SSRS报表生成器使用SQL表计算的字段属性值

问题描述

我有一个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

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

= IIF(Fields!ValueTypeId Value =“ 1”和Fields!Year.Value = Parameters!Year.Value和 Fields!Month.Value =参数!Month.Value,CDbl(Fields!ReportingValue.Value),CDbl(0))

当我创建一个tablix矩阵并将字段与[Sum(SalesMTD)]结合在一起时,假设Year = 2020和month = 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。对我来说有些不对劲。

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

预先感谢

解决方法

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

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

使用以下表达式

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

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

enter image description here