报表知识库
我要提问

动态查询表和列

在很多时候用户希望能够动态的查询表中的数据列,这种效果可以通过宏来实现。

那么,可不可以在动态显示列的同时也动态的查询表呢?

下面我们就来看一下如何同时动态控制表和列的显示。

第一步:

用复杂SQL新建数据集ds1:select ${macro1} from ${tablename}

第二步:

设计表,如下图:

 184

该报表相当于在B1中根据数据集ds1的列数进行横向扩展,在A3中根据数据集的行数进行纵向扩展,然后在B2和B3中动态获取列名和列对象,算出列值,这种用法可以实现动态列报表。

第三步:

配置参数和宏

 193

其中arg1的数据类型为字符串组。

 202

其中macro1的值为:if(str(arg1)==null,”*”,arg1 ),即若参数arg1为空时,查询出表中所有列,否则查询参数传过来的列。

tablename的值为:@arg2,即表名是有arg2来传递的。

注意:两个宏的类型都是动态宏。

第四步:

设计参数模版

 273

在参数模版中建立一个内建数据集:

 223

 233

在内建数据集中,需要将表名,以及表所包含的列名都收录进来,工作量比较大。这里以类别表和产品表为例。

第五步:

实现表和列之间的动态关联,设置B1,B2的编辑风格为“下拉数据集”,如下图:

 242

 253

注意图中红线标注的部分,数据列和显示列都是tablename和cloumnname。这是为什么呢?因为数据列中的值是要传到SQL语句中去的,这就要求这个值必须是真实值,不能是代码值。否则后台执行的SQL语句会是这样:select 11,12,13 from 1,这明显是有问题的!

通过以上步骤,然后在浏览器中浏览报表,效果如下图:

 263