【问题标题】:SSRS Report Builder calculated fields with SQL table (attribute-value)SSRS Report Builder 计算字段与 SQL 表(属性值)
【发布时间】:2020-09-24 13:00:26
【问题描述】:

我有一个每月值的 SQL 数据库,其中包含一些 valuetypeline 和每个月的值,问题是当我尝试在 ssrs 报告中聚合 tablix 矩阵中的信息时

数据库示例

CustomerId | Year | Month | ValueTypeId | Value
---------------------------------------------
     1     | 2020 |    1  |      1      | 500  
     1     | 2020 |    1  |      2      | 10  
     1     | 2020 |    2  |      1      | 200
     1     | 2020 |    2  |      2      | 15
     2     | 2020 |    1  |      1      | 100  
     2     | 2020 |    1  |      2      | 10  
     2     | 2020 |    2  |      1      | 1500
     2     | 2020 |    2  |      2      | 15

考虑到我拥有的 2 个参数(年和月),我已经为特定的 valuetypeid 创建了一个 datalabel 字段示例

=IIF(Fields!ValueTypeId Value="1" and Fields!Year.Value=Parameters!Year.Value and Fields!Month.Value=Parameters!Month.Value,CDbl(Fields!ReportingValue.Value),CDbl(0))

当我创建一个 tablix 矩阵并使用 [Sum(SalesMTD)] 输入字段时,假设年份 =2020 和月份 = 2,结果将是 200+1500 = 1700

如果我创建与添加 nuew 字段的示例相同的表,结果是这样的。

CustomerId | Year | Month | ValueTypeId | Value | SalesMTD
-----------------------------------------------------------
     1     | 2020 |    1  |      1      | 500   | 0  
     1     | 2020 |    1  |      2      | 10    | 0  
     1     | 2020 |    2  |      1      | 200   | 200
     1     | 2020 |    2  |      2      | 15    | 0
     2     | 2020 |    1  |      1      | 100   | 0 
     2     | 2020 |    1  |      2      | 10    | 0  
     2     | 2020 |    2  |      1      | 1500  | 1500
     2     | 2020 |    2  |      2      | 15    | 0

问题是当我们试图计算平均值时 [Avg(SalesMTD)] 因为系统没有这样做 (200+1500)/2 它接缝做 (0+0+200+0+0+0+ 1500+0)/8。这对我来说是错误的。

有人可以帮我解决这个问题吗?我已经尝试过平均 0 值,但我找不到它,无论如何,如果它是真实的,0 可能是一个可能的值,我认为问题更多在于计算将 0 放在不包含的行中的字段在现实中的条件应该被忽略或为空。对于总和是有效的,但我发现对于平均值或其他计算不正确。

提前致谢

【问题讨论】:

  • 这个计算可以用作字段吗? =IIF(Fields!ValueTypeId Value="1" and Fields!Year.Value=Parameters!Year.Value and Fields!Month.Value=Parameters!Month.Value,CDbl(Fields!ReportingValue.Value),Nothing) 我是尝试,它似乎工作,但我不知道它是否有不良后果

标签: reporting-services field average


【解决方案1】:

您的问题,您是否指出AVG() 函数包含零。但是,它不包括 Null 值。

因此,如果我们将零值转换为空值(SSRS 表达式中的Nothing),那么我们可以解决您的问题。

使用下面的表达式

=Avg(
    IIF(Fields!SalesMTD.Value=0, Nothing, Fields!SalesMTD.Value)
    )

在下面的屏幕截图中,我获取了您的示例数据并添加了一个 SUM、一个标准 AVG,最后是上面的表达式(标记为 AGV2)。

【讨论】:

  • 感谢您的回复,您是对的。我不知道 Nothing 功能,这是我需要的。我用过 =iif(CDbl(Fields!ReportingValue.Value)=Nothing,Nothing, IIF(Fields!ValueTypeId Value="1" 和 Fields!Year.Value=Parameters!Year.Value 和 Fields!Month.Value=Parameters! Month.Value,CDbl(Fields!ReportingValue.Value),CDbl(0))) 创建字段,然后当我使用平均值时,一切正常。非常感谢
猜你喜欢
  • 2013-09-16
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多