[]
动态显示列分组数据功能支持通过参数选择或行隐藏两种方式控制列分组的显示与隐藏,并自动联动展示对应数据,其核心技术是通过行隐藏结合列分组表达式进行实现,与常规动态组件方案不同。
通过参数可动态控制列分组的显示/隐藏状态,同时自动关联展示所选分组的对应数据。
新建报表,添加 Demo_销售明细 的数据集。然后添加矩表组件,使用矩表向导完成矩表设计,如下图示。
1)矩表向导设计。

2)报表设计器展示矩表。

添加一个报表参数p1,并如图所示配置参数。

单击“ 客户地区 ”单元格最左边的灰色区域选中客户地区这一行,在右侧打开列设置面板,找到隐藏属性,并选择表达式。

在隐藏属性的表达式界面,使用下图的表达式并保存。

表达式:{IIF(IndexOf(@p1, "客户地区") >= 0, false, true)}
表达式说明 : 当参数包含客户地区时,显示客户地区列分组,否则隐藏客户地区列分组
IndexOf:返回给定元素的第一个索引,如果不存在,则返回 -1
IIF:根据第一个参数的结果逻辑值(真/假),返回第二个或第三个参数的值。
同理选中客户省份和客户城市的行,分别设置表达式:
1)客户省份行隐藏的表达式:{IIF(IndexOf(@p1, "客户省份") >= 0, false, true)}

2)客户城市行隐藏的表达式:{IIF(IndexOf(@p1, "客户城市") >= 0, false, true)}

此时,预览报表,参数可控制列分组显示和隐藏,但数值未同步更新。期望效果:切换分组时,显示该分组对应的数据,下面需要修改列分组的分组条件为表达式。

选择“客户地区”的列分组,在右侧打开分组设置面板,找到分组条件属性,选择表达式。

在分组条件的表达式界面,使用下图的表达式并保存。

表达式:{IIF(IndexOf(@p1, "客户地区") < 0, 1, 客户地区)}
表达式说明 : 当参数包含客户地区时,使用客户地区字段分组,否则使用“1”作为分组条件,此时所有值都会归于同一组
IndexOf:返回给定元素的第一个索引,如果不存在,则返回 -1
IIF:根据第一个参数的结果逻辑值(真/假),返回第二个或第三个参数的值。
同理选中客户省份和客户城市的列分组,分别设置表达式:
1)客户省份分组条件表达式:{IIF(IndexOf(@p1, "客户省份") < 0, 1, 客户省份)}

2)客户城市分组条件表达式:{IIF(IndexOf(@p1, "客户城市") < 0, 1, 客户城市)}

预览报表,可通过参数动态控制列分组的显示与隐藏,并实时展示对应分组的关联数据。

通过直接隐藏行实现列分组控制,相比参数方案更简便:免参数、免表达式。以下以客户地区-客户省份-客户城市的列分组为例,演示隐藏客户城市行的操作。

新建报表,添加 Demo_销售明细 的数据集。然后添加矩表组件,使用矩表向导完成矩表设计,如下图示。
1)矩表向导设计。

2)报表设计器展示矩表。

单击“ 客户城市 ”单元格最左边的灰色区域选中客户城市这一行,在右侧打开行设置面板,找到隐藏属性,并选择是(即隐藏该行)。

此时,预览报表,客户城市行已隐藏,但数值未同步更新。期望效果:切换分组时,显示该分组对应的数据,下面需要修改行分组的分组条件为表达式。

选择“客户城市”的列分组,在右侧打开分组设置面板,找到分组条件属性,选择表达式。

在分组条件的表达式界面,使用下图的表达式并保存。

表达式:{IIF(Parameter!GroupingEnabled.Value,客户城市,1)}
表达式说明 : 当隐藏该分组时,使用“1”作为分组条件,此时所有值都会归于同一组
IIF:根据第一个参数的结果逻辑值(真/假),返回第二个或第三个参数的值。
注意: 本示例仅仅隐藏了'客户城市'行(需修改其列分组条件),隐藏其他行时请对应调整各自列分组条件。
预览报表,可查看隐藏行实现列分组控制,并实时展示对应分组的关联数据。

示例文件包说明: 已包含上面讲解的两种情况,下载后,您可直接导入至对应版本系统中查看使用。