数据分栏,一列数据分N列展示

3506
1

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]

最近看过此主题的会员

esen_50EOT2L3A3

esen_4Y3L5ADO80

esen_4ZJ8RP7VB1

esen_4SBQYN0BZ5TZ

esen_4Y383NXSFN

pandabuxizao

salmons001

Gardenia

kxh

lizf

chestnut

1个回答

只看楼主

tangmq 数据达人Lv4

发表于2019-9-2 17:21

只看该作者

取消 关注该作者的回复

沙发

还有一种数据分栏的实现方案。以数据分两栏显示为例。
维表的数据增加一个冗余标记字段,第一栏和第二栏分别标记1和2
两个独立的浮动,第一个浮动,标记1的数据,第二个浮动,标记2的数据

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号