2017-09-27 65 views
0

我想對平均情況給出3個月。SSRS AVG IIF顯示與我的SUM IIF不同的值除以數字(具有日期範圍)

假設我有這樣的

**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所得到的代碼相同的值。通過運行此代碼,它將顯示平均值等於,我不知道它來自哪裏。

請幫幫我。我現在在這個問題上陷入了一個星期。

+0

SSRS函數'AVG'在計算時將忽略任何NULL/Nothing值,所以這應該給你你想要的。你可以編輯你的問題,並從數據集中發佈一個數據樣本,說明問題以及你目前得到的結果和你的期望。 –

+0

請檢查最新的帖子。 – heneral

+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個如下共行(有些是不需要,但有助於測試)

所有行的簡單和[總和(總和)]

所有行的簡單平均值[平均(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 
     ) 
    ) 

最後,我增加了一個叫做時期文本參數,默認值設置爲「2017年4月」

這裏的報表設計。

enter image description here

運行與使用全部4期的報告給出了這一點。

enter image description here

一切看起來都如預期。

接下來我在數據集查詢中將3683替換爲NULL,並再次運行報告。這次我們得到以下內容。

enter image description here

再次,結果正是我所期望的。