2014-10-08 119 views
1

對於我的報告,我需要選擇從數據庫動態訪問哪些列。更precice:SSRS選擇動態列

在數據庫中的列被命名爲這樣的:

FCST_Sales_2014_Q4_with_SF 
FCST_Sales_2015_Q1_with_SF 
FCST_Sales_2015_Q2_with_SF 
FCST_Sales_2015_Q3_with_SF 

我需要的報告選擇當前年份,季度,所以我使用的Now()功能複合的表達我需要。例如:

=Year(Now()) 

而且

=Switch(
    Month(Now()) = 1, 1, 
    Month(Now()) = 2, 1, 
    Month(Now()) = 3, 1, 
    Month(Now()) = 4, 2, 
    Month(Now()) = 5, 2, 
    Month(Now()) = 6, 2, 
    Month(Now()) = 7, 3, 
    Month(Now()) = 8, 3, 
    Month(Now()) = 9, 3, 
    Month(Now()) = 10, 4, 
    Month(Now()) = 11, 4, 
    Month(Now()) = 12, 4) 

結果是20144這正是我需要的。如果我使用了以下內容:

=("Fields!FCST_Sales_" + CStr(Year(Now())) + "_Q" + CStr(Switch(Month(Now()) = 1, 1, Month(Now()) = 2,1,Month(Now()) = 3,1,Month(Now()) = 4, 2, Month(Now()) = 5,2,Month(Now()) = 6,2,Month(Now()) = 7,3,Month(Now()) = 8,3,Month(Now()) = 9,3,Month(Now()) = 10, 4, Month(Now()) = 11,4,Month(Now()) = 12,4)) + "_with_SF") 

我得到正是我所需要的字符串(FCST_Sales_2014_Q4_with_SF),但問題是,我有點不能使用.Value操作。如果我將Sum().Value添加到我創建的表達式中,我收到錯誤消息,那.Value不是String的成員。我使用的表達式是:

=Sum(("Fields!FCST_Sales_" + CStr(Year(Now())) + "_Q" + CStr(Switch(Month(Now()) = 1,1, Month(Now()) = 2,1,Month(Now()) = 3,1,Month(Now()) = 4,2, Month(Now()) = 5,2,Month(Now()) = 6,2,Month(Now()) = 7,3,Month(Now()) = 8,3,Month(Now()) = 9,3,Month(Now()) = 10, 4, Month(Now()) = 11,4,Month(Now()) = 12,4)) + "_with_SF").Value) 

是否有解決此問題的方法?

回答

3

你不能像這樣建立一個字段 - 你實際上在建立一個字符串。你想要做的是建立字段的名稱來查找Fields集合中,所以不是這樣的:

Fields!FieldName.Value 

看起來是這樣的:

Fields("FieldName").Value 

所以,你可以用你的非常大表達式:

=Sum(Fields("FCST_Sales_" + CStr(Year(Now())) + "_Q" + CStr(Switch(Month(Now()) = 1, 1, Month(Now()) = 2, 1, Month(Now()) = 3, 1, Month(Now()) = 4,2, Month(Now()) = 5, 2,Month(Now()) = 6, 2, Month(Now()) = 7, 3, Month(Now()) = 8, 3, Month(Now()) = 9, 3, Month(Now()) = 10, 4, Month(Now()) = 11, 4, Month(Now()) = 12, 4)) + "_with_SF").Value) 

您還可以簡化該表達式。爲了得到季,你只需要做到這一點:

(Month(Today) + 2) \ 3 

讓你的表達歸結爲

=Sum(Fields("FCST_Sales_" + CStr(Year(Today)) + "_Q" + CStr((Month(Today) + 2) \ 3) + "_with_SF").Value) 

替代方法:使用SQL打造的字段名稱動態

有是使用返回一致字段名稱的動態SQL字符串的另一種可能更簡單的方法。例如,如果你的SQL是這樣的:

SELECT FCST_Sales_2014_Q4_with_SF 
FROM MyTable 

您可以在轉換爲解析SQL語句中的字符串表達式。右鍵單擊數據集,選擇「數據集屬性」,然後單擊查詢旁邊的表達式編輯器fx按鈕。現在,我們可以從一個字符串生成SQL語句,像這樣

="SELECT FCST_Sales_" + CStr(Year(Today)) + "_Q" + CStr((Month(Today) + 2) \ 3) + "_with_SF AS FCST_Sales " 
&"FROM MyTable" 

現在你動態的SQL查詢建立字段名稱,它就會在你的數據集中返回的別名爲FCST_Sales,所以你可以很容易地使用已知的場整個報告值,讓您的計算更加容易:

=Fields!FCST_Sales.Value 

=SUM(Fields!FCST_Sales.Value) 
+0

,完美的工作,也是你的簡化的表達是非常有益的。謝謝你的幫助。 – Maierlu 2014-10-09 06:08:27