SSDT SSRS:如何筛选出生产力值大于零的报表数据
在SSDT Visual Studio中过滤生产力零值条目的解决方案
针对你的需求,其实有两种更彻底的方式可以过滤掉生产力值为零的条目,比你之前用switch表达式只处理字段内容要靠谱得多,我来详细说下:
一、数据集层面过滤(推荐,性能更优)
从数据源层面直接过滤掉不符合条件的数据,能减少报表处理的数据量,避免后续不必要的计算。操作步骤:
- 打开报表对应的数据集属性窗口(右键数据集 → 数据集属性)
- 切换到过滤器选项卡
- 添加一条过滤规则:
- 表达式:
=IIF(Sum(Fields!ProductiveHours.Value*60) = 0, 0, Sum(Fields!TotalMinutes.Value)/Sum(Fields!ProductiveHours.Value*60)) - 运算符:
> - 值:
0
这里加了
IIF判断分母是否为零,避免出现除以零的报错,同时把分母为零的情况也归为要过滤的范围。 - 表达式:
二、报表行可见性设置(无需修改数据集)
如果不想调整数据集,可以直接在报表的行上设置可见性,把不符合条件的行隐藏:
- 选中你要控制的行(细节行或分组行,取决于你的报表结构)
- 右键 → 选择行可见性
- 勾选“显示或隐藏基于表达式”,然后输入以下表达式:
这个表达式的逻辑是:当分母为零,或者生产力值≤0时,就隐藏该行(=IIF(Sum(Fields!ProductiveHours.Value*60) = 0 OR Sum(Fields!TotalMinutes.Value)/Sum(Fields!ProductiveHours.Value*60) <= 0, True, False)True代表隐藏)。
为什么你之前的方法会出现空行?
你用switch表达式只处理了GLProgramName.Value,当生产力值不大于0时,switch没有匹配的分支,会返回null,所以程序名称变成空,但行本身还是会显示出来,这就是为什么你看到空行的原因。要彻底过滤,必须隐藏整行,而不是只清空字段内容。
另外要注意,无论用哪种方法,都一定要处理分母为零的情况,否则当Sum(Fields!ProductiveHours.Value*60)为0时,直接计算除法会导致报表报错,这一步不能省。
内容的提问来源于stack exchange,提问作者Hell-1931
相关产品推荐
相关产品推荐

