2015-07-21 55 views
0

我想出現如下的一份報告中創建表的時間分組行:報表生成器3.0 - 通過

數據集基於此查詢:

SELECT 
DATENAME(dw, CurrentReadTime) AS 'DAY', 
DATEPART(dw, CurrentReadTime) AS 'DOW', 
CAST(datename(HH, CurrentReadTime) as int) AS 'HOD', 
AVG([Difference]) AS 'AVG' 
FROM 
Consumption 
INNER JOIN Readings ON Readings.[RadioID-Hex] = Consumption.[RadioID-Hex] 
WHERE 
CONCAT([Building], ' ', [Apt]) = @ServiceLocation 
GROUP BY 
CurrentReadTime 
ORDER BY 
DATEPART(DW, CurrentReadTime), 
CAST(DATENAME(HH, CurrentReadTime) AS INT) 

如下從該表中的數據返回:

Data Results

在報表生成器,我加入這個代碼報告屬性:

Function GetRangeValueByHour(ByVal Hour As Integer) As String 
Select Case Hour 
Case 6 To 12 
GetRangeValueByHour = "Morning" 
Case 12 to 17 
GetRangeValueByHour = "Afternoon" 
Case 17 to 22 
GetRangeValueByHour = "Evening" 
Case Else 
GetRangeValueByHour = "Overnight" 
End Select 
Return GetRangeValueByHour 
End Function 

而這個代碼爲「行組」:

=Code.GetRangeValueByHour(Fields!HOD.Value) 

當我執行報告,選擇了參數目標服務的位置,我得到這樣的結果:

Actual Result

正如你會發現,在「時刻」的displayin g在報表屬性代碼中符合CASE表達式的第一個結果;但是,我確認了所有「HOD」(存儲爲整數)通過對此結果執行SUM進行分組。

此外,實際表值(.05,.08等)僅返回首次滿足VB代碼中CASE語句要求的HOD結果。

這些都是我需要解決的事情,但想不通:

  • 爲什麼不報告屬性VB代碼顯示「上午」,「下午」,「晚上」和「隔夜「在當日時間專欄?
  • 如何將表中的值組合在一起?因此,AVG實際上是指定範圍內的所有小時和每週的星期幾(週一,週二等6-12,12-18等)的每個AVG的總和。

對於那些仍在閱讀,感謝您的協助!如果您需要更多信息,請告訴我。

+0

您是使用表格還是矩陣?你是否在時間列中使用行組表達式('= Code.GetRangeValueByHour(Fields!HOD.Value)')? – stubaker

+0

我正在使用一張桌子。報告屬性中的代碼在時間列中被調用以對「早晨」,「下午」等進行分組。 我最終更改了「每日時間」的參數,以創建(4)六小時時段。然後,只需將查詢中返回的值乘以6即可得到我需要的數字。這就是說,如果你有一個解決方案的原始問題,我仍然非常有興趣聽到如何解決這個問題。 – johnwonderbread

回答

0

我還不確定我是否清楚地瞭解了您的餐桌設計,但我將其想象爲按此表達式分組的單行組:=Code.GetRangeValueByHour(Fields!HOD.Value)。在此基礎上設計和上面的數據集,這裏就是我會解決你的兩個問題:

  • 使用分組表達式爲日細胞的時間價值,如:

Expression for Time of Day column

  • 添加一個SUM,並在每週的每一天的值的條件。例如:星期天的表達爲=SUM(IIF(Fields!DOW.Value = 1, Fields!AVG.Value, CDec(0)))。這使用CDec(0)而不是0,因爲AVG值是小數,SSRS會通過將0解釋爲int來拋出混合數據類型錯誤的集合。