2017-04-19 125 views
-2

在我SSRS報告有4個參數的開始日期,結束日期,MeterId,& DisplayBySSRS報告多參數(開始日期,結束日期,MeterId,Displayby)

開始日期:datetime數據類型 結束日期:datetime數據類型 MeterId :是一個下拉列表,這將填充基於SQL查詢 DisplayBy:是一個下拉列表,這具有以下值(小時,天,月&年)

enter image description here

數據庫存儲米的每小時值,以下是數據庫表列:(MeterId,ReadingDate,Hours,Quantity,Price)

當我選擇開始日期,結束日期和儀表ID並顯示我想要根據開始日期&結束日期顯示報表,然後顯示值。

如果顯示是小時,我們會顯示日期範圍的MeterId,Quantity,Price的所有24小時值。

如果顯示是白天,我們將顯示該日期範圍的MeterId的總數量和總價格。

如果顯示的是月份,我們會得到該日期範圍的MeterId的總數量和總價格。

如果顯示的是Year,我們就得到了該日期範圍的MeterId的總數量和總價格。例如說如果我選擇開始日期爲1-1-2016,結束日期爲12-31-2016。我的結果應該顯示每個月的12行及其總數量,該特定MeterID的總價。

我的數據庫表存儲所有每小時的值,我知道如何在屏幕上顯示值,如果用戶選擇顯示下拉爲小時。但是,不知道如何顯示日/月/年的結果或如何分組。我是否需要使用「case」語句,如果需要,我需要在顯示參數上給出什麼。

請提出您的想法...

行分組: enter image description here

SELECT I.CustomerName, I.ReadingDate, I.IntegratedHour, I.IntegratedUsage, I.IntegratedGeneration, DATEPART(dd, I.ReadingDate) AS [Reading Day], DATEPART(mm, 
        I.ReadingDate) AS [Reading Month], DATEPART(yyyy, I.ReadingDate) AS [Reading Year] 
FROM   IntegratedHour_MV90 AS I INNER JOIN 
         CustRptMeterExtract AS CT ON CT.CustomerName = I.CustomerName 
WHERE  (I.ReadingDate >= @StartDate) AND (I.ReadingDate <= @EndDate) AND (I.CustomerName IN (@FacilityName)) 

預期結果: enter image description here enter image description here

SSRS電流輸出:亙古不匹配 enter image description here

+0

我建議你告訴我們你的具體問題是什麼。目前,您只是在不提問的情況下描述您的項目。 – Filburt

+0

我很抱歉,因爲我的數據庫表存儲了所有小時值,我知道如何在用戶選擇顯示下拉菜單時顯示屏幕上的值。但是,不知道如何顯示日/月/年的結果。我是否需要使用「case」語句,如果需要,我需要在顯示參數上給出什麼。有點困惑。 – tedstrich

回答

1

根據您的佈局,你可以設置行分組,以表達這樣的事情

=SWITCH 
(
Parameters!ReportBy.Value=1, Fields!Hour.Value, 
Parameters!ReportBy.Value=2, Fields!Day.Value, 
Parameters!ReportBy.Value=3, Fields!Month.Value, 
Parameters!ReportBy.Value=4, Fields!Year.Value, 
True, 0) 

這裏假設你已經有小時/天/月/在你的數據集裏,如果沒有,那麼你就必須更換帶有表達式的字段引用以返回相關的月份等。

根據我上面可以看到的內容,您需要在組表達式之前爲客戶添加分組級別。此外,您數量的表述應該是一筆這樣的

=SUM(FIelds!IntegratedGeneration.Value) 

您可能仍然有一個問題,雖然。我假設Price是一個單位價格,所以它也沒有意義。爲了避開這個,你應該計算LineValue(數量*價格)在數據集中,然後更改價格表現要像

=(SUM(FIelds!LineValue.Value)/SUM(Fields!IntegratedGeneratio‌​n.Value)) 

,這會給你的平均價格。

但是,這可能會很慢,我個人會在數據集中完成這項工作。再次假設你有幾個月,幾年在你的桌子上,然後你可以做這樣的事情。

--DECLARE @ReportBy int = 1 -- uncomment for testing 

select 
    MeterID, Price 
    , CASE @ReportBy 
     WHEN 1 THEN [Month] 
     WHEN 2 THEN [Year] 
     ELSE NULL 
    END AS GroupByColumn 
INTO #t 
from dbo.MyDataTable 

SELECT 
    GroupByColumn 
    , SUM(Price) as Price 
FROM #t 
    Group BY GroupByColumn 
    Order by GroupByColumn 

這裏假設你的報表參數叫做ReportBy,如果不是隻交換名稱。

+0

感謝您的評論。欣賞它。我的數據集包含以下內容(MeterId,ReadingDate,Hour,Price,Quanity,Reading_Day,Reading_Month,Reading_Year)。在參數上,我將Reportby設置爲整數,並將Hour指定爲1,將Day設置爲2,將月份設置爲3並將年份設置爲as4。然後在RowGrouping上使用你的(Switch語句)。它似乎在工作,但我得到的結果是不正確的。是否必須在SSRS報告中同時使用(Switch語句和Select查詢)? – tedstrich

+0

我只使用Switch語句。此外,我的數據庫表不存儲月份或年份。它具有以下列:Meterid,ReadingDate(dateTime),ReadingHour(整數),Price decimal,Usage(整數)。 – tedstrich

+0

你只需要一個或另一個,SSRS分組可能會很慢,這就是爲什麼我建議你可能想用SQL來完成這項工作。你可以添加表格的屏幕截圖以及出現在屏幕底部的分組。然後,如果您可以顯示預期結果的數據樣本,這將有所幫助。 –

相關問題