我想把平均病例给予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的平均值我不知道它来自哪里。
请帮帮我。我现在坚持这个问题一个星期了。
答案 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'
这是报告设计。
运行包含所有4个句点的报告会给出这个。
一切看起来都像预期的那样。
接下来,我在数据集查询中将3683
替换为NULL
,然后再次运行报告。这次我们得到以下内容。
同样,结果正是我所期望的。