1

我有這個T-SQL存儲過程:T-SQL存儲過程日期變量

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE dbo.datealter 
    @LastChangeDate AS date 
AS 
BEGIN 
    SELECT 
     s.[DivNo]as Division, 
     SUM(CASE WHEN s.Date = @LastChangeDate 
        THEN s.SELLINC ELSE 0 END) ActualSales 
    FROM 
     [dbo].[NewLayerReports] s 
    WHERE 
     s.BRN = 1 
    GROUP BY 
     s.[DivNo] 
END 
GO 

當我執行這一點,工作正常。

我在SSRS報告中使用此存儲過程。當我執行SSRS報告時,會要求我輸入或選擇日期。

這裏總是我想要一個日曆顯示去年當前月份。例如,如果我在2016年11月運行報告,日曆應顯示2015年11月。

我們該如何做到這一點?

在SSRS參數中,如果我設置了默認值,那麼我無法編輯日期值。請看圖片,

enter image description here

+0

所以你想'Last Last Date'參數的默認值是這一天,但在前一年? – iamdave

+0

@iamdave不,我希望用戶選擇日期。所以日期會有所不同。 – user2331670

+0

日期選取器將初始顯示默認值,然後顯示用戶選擇的任何日期。您不能讓用戶選擇一個日期,然後顯示另一個日期,同時仍然使用日期選擇器。如果您只想顯示相對日期,請參閱下面我編輯的答案。 – iamdave

回答

3

你可以把默認值的參數。在參數的默認值中表達爲Date.Now.Date.AddYears(-1)。當您運行報告時,它將顯示前一年的同一月份。

+0

如果您想使用SSRS參數來執行此操作,該解決方案將起作用。 –

2

如果要在SSRS中設置參數的默認值,請右鍵單擊參數並選擇屬性。在默認值屏幕中,您可以設置返回日期的表達式。

去年爲了得到這一天,你可以使用: =today.AddYears(-1)

但如果你想要月開始,你還需要添加的日子還有: =today.AddYears(-1).AddDays(1-today.day())


如果看起來你只是想顯示相對於用戶選擇的日期。在這種情況下,您可以根據需要在報表元素(例如報表頂部的標題)中使用上述表達式,但可將today的任何實例替換爲Parameters!ParameterName.Value

+0

謝謝,我不想設置默認日期。由於用戶無法編輯日期。我只想顯示去年的日曆(以便用戶無需點擊日曆中的衆多後退按鈕即可到達去年),並且用戶需要選擇日期。我已經上傳了我的問題中的屏幕截圖。 – user2331670

+0

@ user2331670在您的比較日期參數中,您可以根據上述表達式設置默認值,但引用主參數。如果這個目的僅僅是爲了顯示日期,那麼你就完全錯誤地做了這件事。關於「如果我設置默認值,我無法編輯值」是的,你當然可以。你是否錯誤地設置了可用值字段? – iamdave

+0

是的,我的主要目的是簡單地顯示去年的日期,所以用戶可以選擇他們的要求。我該如何做到這一點? – user2331670