2013-07-08 19 views
4

好吧,這是一個有趣的一部分,我迄今爲止從閱讀中所做的一部分迄今爲止,有些人聲稱由於SSRS處理默認行爲的默認行爲值。然而,我已經得到了很多,我很好奇,如果我能一路獲得。級聯文本參數,允許選擇日期時間日曆或預填充字段

問題:我想要做的是讓用戶在諸如'This Month','LastMonth'之類的語句之間得到PRE DEFINED ...然後用DateTime爲該字符串引用填充一個變量,但用戶可以稍後更改它,並且應該根據父字符串進行刷新,否則讓用戶在SINGLE DATETIME PARAMETER上選擇另一個。

要開始讓我們通過什麼工作工作,不會:

I.我綁定一個數據集來此,縮寫形式是:

select 
'Today' as Description 
, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) BegDt 
union 
select 
    'ThisMonth' 
, Dateadd(month, Datediff(month, 0, getdate()), 0) 

II。然後,我設置一個名爲'DatesPeriod'的參數,然後在選擇'從查詢中獲取值'時添加'描述'作爲參數的字段和標籤。用戶現在可以從下拉列表中選擇「今日」或「ThisMonth」。

三,我現在建立另一個數據集並將其標記爲'DatesSelected'。爲了我的解釋目的,我會保持簡單,只需嵌入第I部分的數據集,但列出where子句。基本上我再次使用相同的數據集,但一次強制返回一行。

select * 
from 
    (
    select 
     'Today' as Description 
    , DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) BegDt 
    union 
    select 
     'ThisMonth' 
    , Dateadd(month, Datediff(month, 0, getdate()), 0) 
    ) as x 
where x.Description = @DatesPeriod 

四,我定義了另一個名爲'Start'的參數,它是DateTime並從上面的數據集中獲取它的值以及它的默認值。現在,當用戶更改第一個文本變量時,相關的DateTime變量也會改變。我已經將文本選擇基本上綁定到了一個日期時間變量,該變量的範圍現在僅限於描述的可用值和默認值。這將範圍限制爲1,強制默認值被傳遞。

V.雖然這還不夠,但我希望用戶能夠隨意選擇FREE DATE RANGES。目前的設置不會允許這個日期選擇器被使用,因爲範圍受限於可用值。然而,這需要完成將文本傳遞給將刷新ON DEMAND的日期時間變量(當它在運行報表時更改,而不僅僅是第一次)。因此,我創建另一個DateTime參數並將其稱爲'UserStart',並且默認值爲'[@Start]'以將其默認值作爲「Start」的依賴項。

六,我現在創建一個名爲「選擇」的測試數據集,以便直觀地看到我的數據正在呈現,因爲我也需要它。

Select isnull(@UserStart, @Start) as Choice 

七,我創建了一個表格對象,並將其放在我的報告中,並放入上面列出的單個單元格中,以查看當用戶使用自己的選擇(從SSRS提供的日曆顯示)覆蓋默認的「開始」值時,它會顯示。

因此,在這一點上,一切都適用於caveot。您需要顯示BOTH日期時間參數以允許最終用戶選擇默認設置或選擇它們自己的參數。如果我試圖隱藏第二個參數'開始',它將只會設置一個默認的第一次只有報告運行,我希望每當第一個參數改變。如果它是可見的,它工作正常,但對於功能,我不希望用戶看到兩個報告參數,只要他們關心的是相同的。我已經嘗試了自定義代碼來返回'開始'參數,創建另一個數據集,但據我所知,SSRS被設置爲不靈活,默認刷新或任何你想選擇的日期。如果要刷新一個參數,並把它在屏幕上從你需要告訴它另一個變量做到這一點,是可以改變的值和默認值。但是,這會擺脫日曆選項,因此您需要將該參數傳遞給另一個參數。但是,如果您隱藏第二個參數,則不會傳遞該值。

任何幫助將非常感激。

回答

0

根據Microsoft Connect不刷新默認參數的能力是「設計」

「如上所述,這是不是一個錯誤。我們不會,除非後續的參數重新評估的默認值選擇的值不再有效的值列表。我們不知道目前的值是由用戶特別要求,或者是因爲默認的存在。你可以通過某種財產作出的情況下,有控制這種行爲但它目前按設計工作。「 - 微軟

建議的解決方法:

了這一個,而現在打,唯一的解決辦法,我可以看到的是改變你如何打算的用戶使用報告。

而不是讓UserStart顯示查詢計算的日期,您將它用作覆蓋日期,並允許它接受空值並將null設置爲默認值。然後在查詢中使用類似:

where Table.DateStart < isnull(@UserStart, @Start) 

這使得用戶可以選擇DatePeriod運行報告或更新他們自己定製的日期範圍。

樣品:

ssrs sample

+0

不起作用,試圖在所有參數。 – djangojazz

+0

您可以將where子句添加到「where @ nameofdependantparamter1 = @ nameofdependantparamter1」隱藏的Start參數數據集中,使其依賴於該值,並可能強制更新隱藏參數。該位置將始終返回true,因此對數據集沒有影響。 –

+0

其實這就是我正在做的,但我忘了編輯我的問題,以正確顯示該條款。謂詞改變時的事件仍然是問題。 – djangojazz

0

經過大量的研究,以上所提供的最終線索的解決方案。有許多步驟,但它允許用戶選擇預定義的日期範圍或輸入自己的日期。

  1. 添加文本參數 「日期範圍」。集AvailableValues像:

選擇日期:選擇

該年份:ThisYear

去年:LastYear

所有:所有

設置DefaultValues爲無

  • 創建存儲過程 「GetDateRangeFromDesc」如下:
  • CREATE PROCEDURE [DBO]。[GetDateRangeFromDesc]

    @range VARCHAR(50)

    AS

    BEGIN

    SET NOCOUNT ON;

    SELECT 
        CASE 
    WHEN @Range = 'Choose' THEN NULL 
    WHEN @Range = 'ThisYear' THEN DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 
    WHEN @Range = 'LastYear' THEN DATEADD(yy, DATEDIFF(yy,0,getdate()) - 1, 0) 
    WHEN @Range = 'All' THEN Convert(DATE, '1/1/1900') END AS Date1, 
    CASE 
    WHEN @Range = 'Choose' THEN NULL 
    WHEN @Range = 'ThisYear' THEN DATEADD(yy, DATEDIFF(yy,0,getdate()) + 1, 0) 
    WHEN @Range = 'LastYear' THEN DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 
    WHEN @Range = 'All' THEN Convert(DATE, '12/31/2099') END AS Date2 
    
    END 
    GO 
    
  • 添加一個數據集 「DateRangeValues」
  • 選擇存儲的過程 「GetDateRangeFRomDesc」

    字段應該日期1和date2

    參數應該是@Range:[@ DateRange]

    1. 添加日期/時間參數「StartDate」。將AvailableValues和DefaultValues設置爲:

    從查詢中獲取值。數據集:DateRangeValues;值/標籤字段:日期1

    1. 添加日期/時間參數「EndDate」。將AvailableValues和DefaultValues設置爲:

    從查詢中獲取值。數據集:DateRangeValues;值/標籤字段:日期2

    當您運行報表時,開始日期和結束日期將按存儲過程中確定的方式填充。根據需要添加儘可能多的日期範圍。只要有一個返回NULL的選項,用戶就可以輸入他自己的值。

    **對不起,但我發佈之前完全測試。當您選擇選擇,然後輸入一個日期,一切刷新和日期消失。 :)也許有人可以添加將允許這個工作的最後一塊。

    另一個更新:這工程當DateRange參數是最後一個參數後導致刷新!

    +0

    因爲我廣泛停止使用SSRS,所以我既不能確認也不否認這個答案。也許你可以從其他人那裏獲得一些信用,但是我無法贊成一些我無法看到它是否有效的東西。 – djangojazz

    相關問題