2016-09-13 61 views
0

我試圖通過不是查詢驅動的SSRS報告參數創建級聯參數。這是可能的還是我需要實際創建一個包含我需要的值的表?級聯參數下拉未使用查詢SSRS

enter image description here

所以當選擇年份,我想以下幾點:

  • 中期至今(值= -99)
  • 前1年(值= -1)
  • 2年前
  • 3年前
  • 4年以前

當他們選擇月,我想以下幾點:今天的

  • 當前月(價值詮釋第(因此2016年9月13日將是-13)
  • 1個月前(值= -30)
  • 2個月前(值= -60)
  • 3個月前
  • 4個月前
  • 5個月前
  • 6個月前
  • 7個月前
  • 8個月前
  • 9個月前
  • 11個月前
  • 11個月前

我不是在尋找這一切是做了一個例子,我可以如何通過表達式做一兩個,或者如果我真的必須寫一個查詢來做到這一點?

+0

您知道,您可以使用嵌入式XML存儲用於級聯參數的數據集。這是一種相對乾淨的方式來保存信息,而無需查詢數據源。 – bitnine

回答

1

不,您不需要查詢,但需要多個表達式。在報告參數屬性中,爲可用值創建表達式。從Today()函數的BID幫助中,有下面的示例表達式。

=今天()

= 「明天是」 &使用DateAdd( 「d」,1,今天())

= 「明天是」 &使用DateAdd(DateInterval.Day,1,今天())

因此,1年前會是=DateAdd(DateInterval.Year,-1,Today())。然後您需要爲參數列表中的每個值執行此操作。

就個人而言,我很懶惰,使用遞歸查詢並使用類似下面的數據集。這將從本月開始返回10個月,並將恢復11個月。

WITH dates AS (SELECT  0 AS num 
          UNION ALL 
          SELECT  num - 1 AS Expr1 
          FROM   dates AS dates_2 
          WHERE  (num > - 10)) 
SELECT  DateName(Month,DATEADD(Month, num, GETDATE())) As [MONTH] 
FROM   dates AS dates_1 

這是有點更易於維護,你不必做一個表達式爲每用戶所有可能的輸入。另外,DateName()和DateAdd()可以更改爲不同的日期部分,並且(num > -10)可以更改多少項返回(返回)。

1

如果你不希望創建一個表或查詢,你仍然可以使用您的報告中嵌入XML數據集的第二個參數的可用值:

  • 創建一個XML數據源。將連接字符串留空。
  • 使用靜態嵌入式XML創建一個數據集,其中包含名稱,值和值以過濾不同的集合。

凝結爲簡潔:

<Query><XmlData><Root> 
    <Item Name="1 Year Ago" Value="-1" SetName="Year" /> 
    <Item Name="2 Years Ago" Value="-2" SetName="Year" /> 
    <Item Name="3 Years Ago" Value="-3" SetName="Year" /> 
    <Item Name="1 Month Ago" Value="0" SetName="Month" /> 
    <Item Name="2 Months Ago" Value="-30" SetName="Month" /> 
    <Item Name="3 Months Ago" Value="-60" SetName="Month" /> 
</Root></XmlData></Query> 
  • 在數據庫中創建一個計算的字段,以包括 「1個月前」 案件之日起調整:

=IIF(Fields!Value.Value = 0, -1 * DatePart("d",Today()),Fields!Value.Value)

  • 在數據集fil上設置過濾器從[SetName][@DateType]
  • 使用計算的字段創建使用XML數據集的可用值的第二級聯參數。