【问题标题】:SQL Report Builder: how to use functionality of WHERE clause inside SSRS?SQL Report Builder:如何在 SSRS 中使用 WHERE 子句的功能?
【发布时间】:2019-10-07 19:26:22
【问题描述】:

我需要能够计算得到每加仑美分的价值。只需使用 PRICE / GALLONS = CPG 即可实现。

由于我显然不能在报告表达式功能中使用实际的 WHERE 子句,因此我能找到的最接近的方法是使用 IIF() 函数。但是,我并没有完全得到我想看到的东西。

这是表达式:

=IIF(Fields!gallons.Value=0,"-", Fields!GP.Value/Fields!gallons.Value)

如您所见,该报告适用于加仑值不为零的值。但是当涉及到 个零的位置时,我会感到害怕 #Error。

我该如何处理零? 请注意,我无法预先过滤掉 SQL 查询中的零,因为相关列必须存在于其他计算中。

【问题讨论】:

    标签: sql-server reporting-services reportbuilder3.0


    【解决方案1】:

    SSRS 尝试评估 iif 条件的两侧。所以如果分子或分母为0,那么你就会得到错误!

    如果其中一个值为 0,您需要使用函数返回 0。

    转到报告属性 -> 代码,然后将以下代码粘贴到自定义代码部分中

        '  Fix for divide by zero problem in VB
    
       Public Shared Function VarPercent(ByVal Standard As Decimal, ByVal Actual As Decimal) As Decimal
    If Actual = 0 Then
    Return 0
    End If
    If Standard = 0 Then
    Return 0
    End If
    Return (Standard / Actual )
    End Function
    

    在您的报告中没有,无论您在哪里划分两个值,请使用以下内容:

    =Code.VarPercent(Fields!GP.Value,Fields!gallons.Value)
    

    【讨论】:

    • Report Properties > Code....如果您在 VB 中使用 BIDS,这是否具体指代?我只使用 SQL 报表生成器。否则我寻找报告属性但没有看到它,只有 tablix 属性。
    • 无论BIDS / SSDT还是报表生成器都是一样的——右键单击报表区域外,然后选择报表属性。我刚刚尝试了报表生成器,可以确认相同
    • 哇,我以前从来没有进入过那个区域。但它有效!它吐出零,谢谢!
    【解决方案2】:

    SSRS 就是这样愚蠢的。无论如何,您必须修复除以零:

    =IIF(Fields!gallons.Value = 0,"-",
          Fields!GP.Value / IIF(Fields!gallons.Value = 0 , 1, Fields!gallons.Value))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多