lucas.Yan 发表于 2024-7-25 18:38:58

[报表-数据过滤] 多层嵌套筛选条件的补充

本帖最后由 lucas.Yan 于 2024-7-26 13:34 编辑

背景
当我们在报表中做数据筛选的时候,会发现内层分组的过滤条件类型缺失了一些。那如果我们需要在内层使用类似于‘在’、前N项等过滤条件的时候该怎么做呢?

场景说明:我们需要对报表进行多级筛选,首先设置外层筛选条件支付方式为支付宝,内层使用多值参数来进行过滤。使用步骤:我们使用Demo销售明细输出集进行测试,首先我们都以Demo销售明细创建两个数据集。接着创建一个报表参数设置为多值数据,设置可用数据为第二个数据集的运货商字段
使用IndexOf()判断在数据过滤中使用表达式来构建过滤条件。如果数据不匹配{IndexOf(@报表参数1, 支付方式)} != -1

通用方法使用自定义函数来实现我们想要的功能。下面这个函数是为了实现IN的功能函数IN 需要两个参数 对象数组array,对象element通过判断array中的元素是否存在和element元素相同的,如果存在就返回true,如果都不相同则返回false。/// <function name="In">
/// <culture>
/// <label>In</label>
/// <syntax>Code.In(<Array>, <Element>)</syntax>
/// <description>Checks whether array includes element.</description>
/// <example>=Code.In(array, element)</example>
/// </culture>
/// </function>
public bool In(object[] array, object element){
   return Array.Exists(array, (elem) => elem.ToString() == element.ToString());
}
当我们编译好自定义函数之后,就可以在报表中使用这个自定义的IN函数了。{Code.In(@报表参数1, 运货商)}用法和indexOf类似,不过我们可以在自定义函数中实现更多类型的需求。如NotIn、Like等函数。




页: [1]
查看完整版本: [报表-数据过滤] 多层嵌套筛选条件的补充