一个BI项目是如何开展的
目录文章目录整体概览RS传递TS传递开发SITUAT上线执行计划整体概览一般来说,一个BI项目大体上个分为6个阶段:RS传递TS传递开发SITUAT上线先简单介绍一下我之前的开发环境:用到的后台开发工具包括:oracle,plsql,datastage,controlM。涉及到的前台开发工具包括:Tableau,JS。然后会用一个模拟的实例去简单的这六个阶段...
目录
整体概览
一般来说,一个BI项目大体上个分为6个阶段:
- RS传递
- TS传递
- 开发
- SIT
- UAT
- 上线
先简单介绍一下我之前的开发环境:
- 用到的后台开发工具包括:oracle,plsql,datastage,controlM。
- 涉及到的前台开发工具包括:Tableau,JS。
然后会用一个模拟的实例去简单的这六个阶段是如何进行的。
RS传递
RS传递的根本目的:是需求分析师根据业务的需求,把这次要实现什么样的内容进行传递。
模拟例子:
业务想要对股票进行分析,实现的效果如草图。
左边是所有当天各个股票的涨幅,开盘价,收盘价,最高价等信息。
点击后可以在右边查看当前股票的K线图,默认以60分钟为一根K线。
当然,这个草图是自己用画图工具画的,实际中,会有专门设计高保真页面的人员。
如何是实现这个东西,就是需求分析师和架构设计之间要沟通的事情,如何去实现,展示效果细节敲定种种事情确定后。这一阶段就会输出一个文档,RS文档。
TS传递
到了TS阶段,那就要去确定数据从哪里来,数据如何流到展现层,数据应该如何展示。
还是模拟项目:
草图上面,是所在项目组的数据库架构,在遵守数据库架构的基础上,下面即我们当前模拟项目的数据流图,数据源从API接口里获取,然后用DS同步到EDW层保存明细数据,后DS同步到DM展示层,做相关处理后,提供相关数据到前台进行展示。
一般这种数据流图,都是用Visual画图,方便高效简洁。
因为工具有限,数据源的获取就通过python调用市面上普遍的一些股票数据的接口。然后在项目中,会通过DS,Kettle或者其他的一些ETL工具进行抽数。
除了数据流图,一般TS阶段还要输出mapping文档,用来管理表结构,字段之间的映射关系等等。
因为手头上没有比较好的模板,就不贴图了。直接用oracle的表结构看把。
TS阶段,暂定了数据源,数据流,数据同步方案,以及表结构。那么具体的实现就是由开发人员进行开发的。
开发
到了开发阶段,基本上就是实际方案落地了。
- 第一步,数据源获取。
通过python调用接口。
参考:baostock证券宝
import baostock as bs
import pandas as pd
#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)
#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
"""
参数含义:
code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
fields:指示简称,支持多指标输入,以半角逗号分隔,填写内容作为返回类型的列。详细指标列表见历史行情指标参数章节,日线与分钟线参数不同。此参数不可为空;
start:开始日期(包含),格式“YYYY-MM-DD”,为空时取2015-01-01;
end:结束日期(包含),格式“YYYY-MM-DD”,为空时取最近一个交易日;
frequency:数据类型,默认为d,日k线;d=日k线、w=周、m=月、5=5分钟、15=15分钟、30=30分钟、60=60分钟k线数据,不区分大小写;指数没有分钟线数据;周线每周最后一个交易日才可以获取,月线每月最后一个交易日才可以获取。
adjustflag:复权类型,默认不复权:3;1:后复权;2:前复权。已支持分钟线、日线、周线、月线前后复权。 BaoStock提供的是涨跌幅复权算法复权因子,具体介绍见:复权因子简介或者BaoStock复权因子简介。
"""
rs = bs.query_history_k_data_plus("sh.601398",
#"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
"date,time,code,open,high,low,close,volume,amount,adjustflag",
start_date='2019-06-01', end_date='2019-12-31',
frequency="60", # 分钟线
adjustflag="3")
print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond error_msg:'+rs.error_msg)
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
#### 结果集输出到csv文件 ####
result.to_csv("1_K_hour.csv", index=False)
print(result)
#### 登出系统 ####
bs.logout()
- 第二步,建立落地表,并通过ETL工具装载数据。
DS或者kettle等ETL工具,将保存的CSV格式数据抽到你的oracle数据库里。
真实场景则是,通过ETL工具,从生产线上获取数据,或者从一些别的数据库获取。- 在这里因为没有相关的工具。直接就建表往里面插数即可。
- 建了两个表,一个是股票数据1H的数据表,一个是股票数据日表。
-- Create table
create table DMTEST.DM_TEST_STOCK_DAY
(
date_time DATE,
code VARCHAR2(20),
open NUMBER,
high NUMBER,
low NUMBER,
close NUMBER,
preclose NUMBER,
volume NUMBER,
amount NUMBER,
adjustflag NUMBER,
turn NUMBER,
tradestatus NUMBER,
pctchg NUMBER,
isst NUMBER
);
-- Create table
create table DMTEST.DM_TEST_STOCK_HOUR
(
date_time DATE,
hour NUMBER,
code VARCHAR2(20),
open NUMBER,
high NUMBER,
low NUMBER,
close NUMBER,
volume NUMBER,
amount NUMBER,
adjustflag NUMBER
);
- 其中插入的数据
- 第三步,通过SP或者视图等能够存放加工逻辑的形式,把数据源进行处理,并整理到DM层去。
- 像对应的股票的时表数据,就可以对股票编码的格式进行转换,对时间的格式进行转换。
- 还可以计算5,10,20,30,100日的移动平均线等等。
因为家用电脑,没有必要整多个数据库,就当此时的表已经是最后展现使用的表。
- 第四步,通过工具或者JS进行数据的展示,这个阶段一般来说都是有专门的前台开发人员。
因为本身前台能力有限,只能做比较简单的展示和交互。在这里主要用帆软进行简单的演示。
- 交互的效果为:点击查询后,能够查询对应时间的股票价格,在这里可以展示股票的日涨幅。
- 然后点击具体的股票后,可以查看对应的K线图。(PS:因为官网下载的帆软工具个人的最新版是没有K线图的,要自己额外下载插件包,故在这里用折线图显示)
有时间的话,可以好好弄一下这个图标。现在太丑了…
- 其中参数的传导,主要靠帆软工具的事件触发,改变图标的全局参数来使K线图展示数据进行变化。
- 具体的设置如下:
SIT
测试阶段,自己测试。
UAT
测试阶段,业务测试。
上线
都通过后,就可以上生产了。
执行计划
更多推荐
所有评论(0)