SSRS Report Builder 计算字段 SQL table(属性值)
SSRS Report Builder calculated fields with SQL table (attribute-value)
我有一个 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 创建了一个数据标签字段示例,同时考虑了我拥有的 2 个参数(年和月)
=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
如果我创建的 table 与添加 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。对我来说有些不对劲。
有人可以帮助我吗?我试过 averageiff innoring 0 值,但我找不到它,无论如何 0 可能是一个可能的值,如果它是真实的,我认为问题更多的是在字段的计算中将 0 放在没有的行中实际上应该忽略或为空的条件。对于求和是有效的,但我发现对于平均值或其他计算是不正确的。
提前致谢
你的问题,你指出的是 AVG()
函数包含零。但是,它不包括 Null
个值。
因此,如果我们将零值转换为空值(SSRS 表达式中的Nothing
),那么我们就可以解决您的问题。
使用下面的表达式
=Avg(
IIF(Fields!SalesMTD.Value=0, Nothing, Fields!SalesMTD.Value)
)
在下面的屏幕截图中,我使用了您的示例数据并添加了一个 SUM、一个标准 AVG,最后添加了上面的表达式(标记为 AGV2)。
我有一个 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 创建了一个数据标签字段示例,同时考虑了我拥有的 2 个参数(年和月)
=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
如果我创建的 table 与添加 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。对我来说有些不对劲。
有人可以帮助我吗?我试过 averageiff innoring 0 值,但我找不到它,无论如何 0 可能是一个可能的值,如果它是真实的,我认为问题更多的是在字段的计算中将 0 放在没有的行中实际上应该忽略或为空的条件。对于求和是有效的,但我发现对于平均值或其他计算是不正确的。
提前致谢
你的问题,你指出的是 AVG()
函数包含零。但是,它不包括 Null
个值。
因此,如果我们将零值转换为空值(SSRS 表达式中的Nothing
),那么我们就可以解决您的问题。
使用下面的表达式
=Avg(
IIF(Fields!SalesMTD.Value=0, Nothing, Fields!SalesMTD.Value)
)
在下面的屏幕截图中,我使用了您的示例数据并添加了一个 SUM、一个标准 AVG,最后添加了上面的表达式(标记为 AGV2)。