找回密码
 立即注册

QQ登录

只需一步,快速开始

lucas.Yan
超级版主   /  发表于:2024-7-25 18:38  /   查看:185  /  回复:0
本帖最后由 lucas.Yan 于 2024-7-26 13:34 编辑

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

image.png616513976.png

场景说明:
我们需要对报表进行多级筛选,首先设置外层筛选条件支付方式为支付宝,内层使用多值参数来进行过滤。
使用步骤:
我们使用Demo销售明细输出集进行测试,首先我们都以Demo销售明细创建两个数据集。
image.png978851318.png
接着创建一个报表参数设置为多值数据,设置可用数据为第二个数据集的运货商字段
image.png597782287.png

使用IndexOf()判断
在数据过滤中使用表达式来构建过滤条件。如果数据不匹配
  1. {IndexOf(@报表参数1, 支付方式)} != -1
复制代码

image.png543883361.png

通用方法
使用自定义函数来实现我们想要的功能。
下面这个函数是为了实现IN的功能
函数IN 需要两个参数 对象数组array,对象element
通过判断array中的元素是否存在和element元素相同的,如果存在就返回true,如果都不相同则返回false。
  1. /// <function name="In">
  2. /// <culture>
  3. /// <label>In</label>
  4. /// <syntax>Code.In(<Array>, <Element>)</syntax>
  5. /// <description>Checks whether array includes element.</description>
  6. /// <example>=Code.In(array, element)</example>
  7. /// </culture>
  8. /// </function>
  9. public bool In(object[] array, object element){
  10.    return Array.Exists(array, (elem) => elem.ToString() == element.ToString());
  11. }
复制代码

当我们编译好自定义函数之后,就可以在报表中使用这个自定义的IN函数了。
  1. {Code.In(@报表参数1, 运货商)}
复制代码
用法和indexOf类似,不过我们可以在自定义函数中实现更多类型的需求。如NotIn、Like等函数。
image.png129641112.png





0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部