SSRS AVG IIF显示与我的SUM IIF不同的值除以数字(带日期范围)

时间:2017-09-27 15:54:23

标签: reporting-services

我想把平均病例给予3个月。

假设我有这样的数据

**Month**      | **Cases**
January 2017   |   3981
February 2017  |   3402
March 2017     |   3683
April 2017     |   2920

以下是示例代码:

=Sum(IIF(CDate(Fields!ServiceYrMnth.Value) >=  
     DateAdd(DateInterval.Month, -3, CDate(Parameters!Period.Value)) 
     And CDate(Fields!ServiceYrMnth.Value) <= 
     DateAdd(DateInterval.Month, -1, CDate(Parameters!Period.Value)), 
     Fields!Total_Cases.Value, 0))/3

正在工作并在SSRS中提供正确的值。

因此,通过使用此代码,参数周期等于2017年4月,平均值将计算为

DateAdd(DateInterval.Month, -3, CDate(Parameters!Period.Value)) = Jan2017
DateAdd(DateInterval.Month, -2, CDate(Parameters!Period.Value)) = Feb2017
DateAdd(DateInterval.Month, -1, CDate(Parameters!Period.Value)) = Mar2017
Total Cases = (3981 + 3402 + 3683)/3 = 3689 

我的问题是,这并没有考虑空值。因此,当只有2个可用值时,总和仍将除以3而不是2。

所以我决定试试这段代码:

=Avg(IIF(CDate(Fields!ServiceYrMnth.Value) >= 
     DateAdd(DateInterval.Month, -3, CDate(Parameters!Period.Value)) 
     And CDate(Fields!ServiceYrMnth.Value) <= 
     DateAdd(DateInterval.Month, -1, CDate(Parameters!Period.Value)), 
     Fields!Total_Cases.Value, Nothing))

我现在的问题是它没有显示与我为总和除以3所做的代码相同的值。通过运行此代码,它将显示等于 527的平均值我不知道它来自哪里。

请帮帮我。我现在坚持这个问题一个星期了。

1 个答案:

答案 0 :(得分:0)

这不构成答案,因为我无法重现问题,但这是我为实现预期结果所做的一步一步。

创建新报告

添加了包含以下查询的数据集以复制测试数据

CREATE TABLE #t(ServiceYrMnth varchar(20), Total_Cases float)

INSERT INTO #t VALUES
('January 2017', 3981),
('February 2017', 3402),
('March 2017', 3683),
('April 2017', 2920)

SELECT * FROM #t

添加了一个显示两列

的简单表格

添加了4行总计如下(有些不是必需的,但有助于测试)

所有行的简单总和[Sum(Total_Cases)]

所有行的简单平均值[Avg(Total_Cases)]

计算总和前3个月。这使用您的第一个表达式

=Sum(IIF(CDate(Fields!ServiceYrMnth.Value) >=  
     DateAdd(DateInterval.Month, -3, CDate(Parameters!Period.Value)) 
     And CDate(Fields!ServiceYrMnth.Value) <= 
     DateAdd(DateInterval.Month, -1, CDate(Parameters!Period.Value)), 
     Fields!Total_Cases.Value, 0))

计算平均前3个月。这使用相同的表达式,但将Sum更改为Avg并将最终的0更改为Nothing,这似乎就是您已经拥有的内容。最后的表达是这个。

=Avg(
    IIF(
        CDate(Fields!ServiceYrMnth.Value) >= DateAdd(DateInterval.Month, -3, CDate(Parameters!Period.Value)) 
         And CDate(Fields!ServiceYrMnth.Value) <= DateAdd(DateInterval.Month, -1, CDate(Parameters!Period.Value))
         , Fields!Total_Cases.Value
         , Nothing
         )
     )

最后,我添加了一个名为Period的Text参数,并将默认设置为'April 2017'

这是报告设计。

enter image description here

运行包含所有4个句点的报告会给出这个。

enter image description here

一切看起来都像预期的那样。

接下来,我在数据集查询中将3683替换为NULL,然后再次运行报告。这次我们得到以下内容。

enter image description here

同样,结果正是我所期望的。