引言
今天一位朋友提到这样一个问题:如何根据参数(多选)选择,在表达式中控制数据显示、隐藏。通常情况下,我们参数过滤数据会直接针对数据集过虑。但是这儿因为他在报表层面使用ReturnValue给数据做了排名,想在过滤数据的同时不影响排名,所以不能过滤数据集。那么,如何来实现这个功能呢?
我们可以通过表达式来控制分组的可见性实现此功能。
关键知识点
MultiLookup:使用 Multilookup 可以从数据集中为若干名称-值对(其中每个名称-值对都具有一对一关系)检索一组值。MultiLookup 等同于针对一组名称或键调用 Lookup。例如,对于一个基于主键标识符的多值参数,可以在表中文本框内的表达式中使用 Multilookup,从未与参数或表绑定的数据集中检索关联的值。
Filter:基于指定筛选条件返回包含字符串数组子集的以零为基的数组。
MultiLookup
此种方法实现的前提是表不能有分组,矩阵的默认分组可以。原因是:此方法是从整个数据集中检索数据,所以它的检索无法限制在某个组内。
=Not(IsArray(MultiLookup(Parameters!shoparea.Value,Fields!ShopArea.Value,Fields!ShopID.Value,"DataSet1")))
由于简单,我简述下实现步骤,就不截实现过程了。
右键“分组”,“组属性”,“可见性”,“表达式”,输入以上表达式。
重点解释下MultiLookup:MultiLookup(参数(多选,即数组),要查找的值(即数据集中的字段),要显示的值(即数据集中的字段,这儿可以取任意字段因为并不做显示),"数据集名称(即要查询的数据集)")。简单来说就是,用当前行中要查找的值,去多选参数中查询该值是否存在,存在则取出要显示的值。
Filter
=IIF(Filter(Parameters!shoparea.Value,Fields!ShopArea.Value,True,CompareMethod.Binary).Length = 0 ,True,False)
此种方法实现过程同上。