-
tangmq 数据达人Lv4
发表于2019-3-26 17:34
楼主
本帖最后由 tangmq 于 2019-3-26 17:36 编辑
要点三:分栏区域浮动表元设计
要点四:分栏数据取数表达式
要点五:收尾
最后的思考:如果要分五栏,表达式如何变
- 需求说明:
如上图所示,是word的设计器截的分栏设置,可以把整段文字,分成多栏进行展示,这样做的目的是为了达到排版优化的目的,对于某些内容,分栏显示,可以让文档排版更加美化,文档整体更和谐。
同样,BI报表也会有分栏的需求,对一组数据,进行分栏展示,如下图所示,左侧是全国31各省份的医疗费用指标、费用机构个数,报表结果是“狭长”的,指标少,数据行很多,对于报表展示来说,横向会存在空白区域,纵向可能需要滚动条,整体页面不和谐;右侧是将数据分栏之后的展示,即利用了右侧的空间,纵向又能一屏展示,整体效果更和谐。
- 实现要点:
分栏之前31行,分栏后16行,如何得到这个16呢?
ü 浮动数据行个数X:根据表内的浮动项,得到浮动后的总行数,通过ardb函数
X=ardb(" select distinct SUBSTR(a.XZQH,1,2) from FACT_FY a group by SUBSTR(a.XZQH,1,2) ").count
ü 分栏后数据行个数N:因为分两栏,所以在浮动行个数+1,再除2取整,就是分栏后的行数
N=Int(X/2+1)
ü 合并后的表达式:
N=int(ardb(" select distinct SUBSTR(a.XZQH,1,2) from FACT_FY a group by SUBSTR(a.XZQH,1,2) ").count/2+1)
ü 如果报表有计算参数,需要将参数带入,可将表达式修改如下:
N=int(ardb(" select distinct SUBSTR(a.XZQH,1,2) from FACT_FY a where a.bbq_="+@bbq+" group by SUBSTR(a.XZQH,1,2) ").count/2+1)
要点二:表样设计由两大块组成第一块:原始表格区域,实现原始取数,即不分栏的情况下,原始的报表设计方式实现取数;
第二块:分栏布局的表格区域,定义表内取数表达是,从第一部分将数据取到分栏区域;
要点三:分栏区域浮动表元设计
分栏后浮动表元表达式:1..N
N就是本文要点一中提到的,最终分栏后的行号,所以最终的表达式即为:
1..<#=int(ardb(" select distinct SUBSTR(a.XZQH,1,2) from FACT_FY a where a.bbq_="+@bbq+" group by SUBSTR(a.XZQH,1,2) ").count/2+1)#>
原始取数区域,解析成结果应该是一个二维数组:
A4$[0] B4$[0] C4$[0]
A4$[1] B4$[1] C4$[1]
A4$[2] B4$[2] C4$[2]
……
A4$[30] B4$[30] C4$[30]
我们的目标就是将上面的这个二维数组,分成两列分别放到第一栏和第二栏
以第一栏的省份表达式为例:A4$[2*A2-2].txt
第一行:A2就是分栏行号,则为1,最终解析为A4$[2*1-2].txt,即A4$[0]
第二行:A2就是分栏行号,则为2,最终解析为A4$[2*2-2].txt,即A4$[2]
以此类推
要点五:收尾
把表格的第一部分原始取数,设置隐藏;
如果为了使分栏区域的浮动表元表达式简化,可利用计算参数。定义参数@n,默认值表达式为:
<#=int(ardb(" select distinct SUBSTR(a.XZQH,1,2) from FACT_FY a where a.bbq_="+@bbq+" group by SUBSTR(a.XZQH,1,2) ").count/2+1)#>
则浮动表元的表达式可修改为:1..<#=@n#>
最后的思考:如果要分五栏,表达式如何变
浮动的个数:<#=int((ardb("select… ").count+4)/5)#>
第一栏表达式举例:B4$[5*A2-5]
第二栏表达式举例:B4$[5*A2-4]