成都网站建设设计

将想法与焦点和您一起共享

如何实现报表数据的动态层次钻取(二)-创新互联

《如何实现报表数据的动态层次钻取(一)》 介绍了利用复杂 sql 实现动态层次结构的方法,但该方法依赖 Oracle 的递归语法,在其他类型的数据库中难以实现。要想通用地实现此类报表,可以使用下面介绍的“集算脚本 + 本地文件”的方法。

创新互联主营虹口网站建设的网络公司,主营网站建设方案,重庆APP开发公司,虹口h5微信小程序开发搭建,虹口网站营销推广欢迎虹口等地区企业咨询

《各级部门 KPI 报表》的格式和具体要求参见上一篇文章。有所不同的是,报表数据源从数据库表变为本地文件:tree.b(树形结构维表)和 kpi.b(指标事实表),数据示例如下图:

如何实现报表数据的动态层次钻取(二)

Tree 文件数据

如何实现报表数据的动态层次钻取(二)

Kpi 文件数据

说明:Tree 的叶子节点,通过 id 字段与 kpi 表关联。KPI 文件每个 ID 每天都会新增 kpi 记录,总数据量较大。

具体实现步骤如下:

第一步   编写集算脚本 tree.dfx,完成源数据计算,输入参数为当前节点号 id。

集算脚本如下:

  A B C
1 =[“省”,“地市”,“区县”,“营业部”]|to(4,13).(“架构”+string(~)) =file(“D:\\files\\tree.b”).import@b() =file(“D:\\files\\kpi.b”).cursor@b()
2 =B1.switch(PID,B1:ID) =B1.select@1(ID==string(id)) =B2.prior(PID).rvs()
3 =C2.new(ID,NAME,A1.m(#):title) >xtitle=A1.m(A3.len()+1) =B1.select(PID==B2)
4 =if(C3.len()>0,C3,B1.create().insert(0)) =B1.new(ID, ~.prior( PID, B2):GID ).select( GID) =B4.run(GID=GID.m(-1).ID )
5 =C1.switch@i(ID,C4:ID) =A5.groups(ID.GID:ID;sum(KPI1):KPI1,sum(KPI2):KPI2,sum(VIPKPI1):VIPKPI1,sum(VIPKPI1):VIPKPI2) =B5.align(A4:ID,ID)
6 =C5.new(A4(#).ID:ID,A4(#).NAME:NAME,xtitle:TITLE,KPI1:KPI1,KPI2:KPI2,VIPKPI1:VIPKPI1,VIPKPI2:VIPKPI2) return A3,A6

文章标题:如何实现报表数据的动态层次钻取(二)-创新互联
浏览地址:http://chengdu.cdxwcx.cn/article/cddice.html