You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSDT SSRS:如何筛选出生产力值大于零的报表数据

在SSDT Visual Studio中过滤生产力零值条目的解决方案

针对你的需求,其实有两种更彻底的方式可以过滤掉生产力值为零的条目,比你之前用switch表达式只处理字段内容要靠谱得多,我来详细说下:

一、数据集层面过滤(推荐,性能更优)

从数据源层面直接过滤掉不符合条件的数据,能减少报表处理的数据量,避免后续不必要的计算。操作步骤:

  1. 打开报表对应的数据集属性窗口(右键数据集 → 数据集属性)
  2. 切换到过滤器选项卡
  3. 添加一条过滤规则:
    • 表达式:=IIF(Sum(Fields!ProductiveHours.Value*60) = 0, 0, Sum(Fields!TotalMinutes.Value)/Sum(Fields!ProductiveHours.Value*60))
    • 运算符:>
    • 值:0

    这里加了IIF判断分母是否为零,避免出现除以零的报错,同时把分母为零的情况也归为要过滤的范围。

二、报表行可见性设置(无需修改数据集)

如果不想调整数据集,可以直接在报表的行上设置可见性,把不符合条件的行隐藏:

  1. 选中你要控制的行(细节行或分组行,取决于你的报表结构)
  2. 右键 → 选择行可见性
  3. 勾选“显示或隐藏基于表达式”,然后输入以下表达式:
    =IIF(Sum(Fields!ProductiveHours.Value*60) = 0 OR Sum(Fields!TotalMinutes.Value)/Sum(Fields!ProductiveHours.Value*60) <= 0, True, False)
    
    这个表达式的逻辑是:当分母为零,或者生产力值≤0时,就隐藏该行(True代表隐藏)。

为什么你之前的方法会出现空行?

你用switch表达式只处理了GLProgramName.Value,当生产力值不大于0时,switch没有匹配的分支,会返回null,所以程序名称变成空,但行本身还是会显示出来,这就是为什么你看到空行的原因。要彻底过滤,必须隐藏整行,而不是只清空字段内容。

另外要注意,无论用哪种方法,都一定要处理分母为零的情况,否则当Sum(Fields!ProductiveHours.Value*60)为0时,直接计算除法会导致报表报错,这一步不能省。

内容的提问来源于stack exchange,提问作者Hell-1931

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:03:50