动态查询表和列
在很多时候用户希望能够动态的查询表中的数据列,这种效果可以通过宏来实现。
那么,可不可以在动态显示列的同时也动态的查询表呢?
下面我们就来看一下如何同时动态控制表和列的显示。
第一步:
用复杂SQL新建数据集ds1:select ${macro1} from ${tablename}
第二步:
设计表,如下图:
该报表相当于在B1中根据数据集ds1的列数进行横向扩展,在A3中根据数据集的行数进行纵向扩展,然后在B2和B3中动态获取列名和列对象,算出列值,这种用法可以实现动态列报表。
第三步:
配置参数和宏
其中arg1的数据类型为字符串组。
其中macro1的值为:if(str(arg1)==null,”*”,arg1 ),即若参数arg1为空时,查询出表中所有列,否则查询参数传过来的列。
tablename的值为:@arg2,即表名是有arg2来传递的。
注意:两个宏的类型都是动态宏。
第四步:
设计参数模版
在参数模版中建立一个内建数据集:
在内建数据集中,需要将表名,以及表所包含的列名都收录进来,工作量比较大。这里以类别表和产品表为例。
第五步:
实现表和列之间的动态关联,设置B1,B2的编辑风格为“下拉数据集”,如下图:
注意图中红线标注的部分,数据列和显示列都是tablename和cloumnname。这是为什么呢?因为数据列中的值是要传到SQL语句中去的,这就要求这个值必须是真实值,不能是代码值。否则后台执行的SQL语句会是这样:select 11,12,13 from 1,这明显是有问题的!
通过以上步骤,然后在浏览器中浏览报表,效果如下图: