基于数据仓库中宽表结构的报表设计技巧
本例中将逐步介绍用润乾报表动态列方式实现基于宽表的报表设计过程。
首先介绍要做的样表结构:
参数:
参数描述 |
参数名称 |
参数类型 |
指标公式 |
zbgs |
字符串组 |
指标名称 |
zbmc |
字符串组 |
为了sql动态查询指标个数,需将指标公式参数转为字符串类型,定义如下动态宏:
宏名称 |
宏表达式 |
zbgs |
“R_FAC_EVASUM.APTFLGID,R_FAC_EVASUM.CCY,A_MAS_VALUNTDEF.VALUNTNAM,A_MAS_PRDDEF.PRDNAM,R_FAC_EVASUM.PRSPEDDTE ,”+str(@zbgs) |
公式中的前部分是sql查询固定返回列,后面的str(@zbgs)是按照zbgs参数内容返回动态列。
定义如下数据集:
select ${zbgs} From R_FAC_EVASUM,A_MAS_PRDDEF,A_MAS_VALUNTDEF
WHERE A_MAS_PRDDEF.PRDNUM=R_FAC_EVASUM.FORPRD AND A_MAS_VALUNTDEF.VALUNTNUM=R_FAC_EVASUM.VALUNTNUM
${chanpin}
${jigou}
${bizhong}
${fentan}
${riqi}
${feisn}
下面开始定义报表
如上图,
在A1中输入:
=ds1.colcount()
/*计算出ds1数据集本次返回多少数据列*/
在E5中输入:
=to(6,A1)
/*ds1中有多少动态指标,就预置多少空列 */
E5的显示值输入:
=@zbmc[E5-5]
/*用指标名称来显示指标列的列标题*/
在E6中输入:
=eval(“ds1.#”+E5)/@danwei
/*动态拼出指标列的数据计算公式,@danwei是数值单位参数*/
通过上述4步设定,完成横向动态列的报表功能,具体实现可以参见随本文上传的t12.raq文件。
例表中使用的其它的宏和层次坐标定义,是为了方便报表其它功能的设计,在本文中不予介绍。