2

まずは昨日助けてくれてありがとう。開始日と日付クエリに基づいて自分のTo/From日付を設定します。

私の報告書が(今のところ)動くようになったので、私はヘッダーに日付期間(FROM:TO :)を表示する必要があります。ここでは、クエリは次のとおりです。

Declare @startdate datetime 
Declare @enddate datetime 
Declare @BeginningDate datetime 

set @BeginningDate = '12-01-2011' 

IF Month(@BeginningDate) < (Month(GETDATE())-1)--(YTD) 
BEGIN 
set @startdate = DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 
set @enddate = dateadd(day, datediff(day, 0, getdate()), 0) 
END 

IF Month(@BeginningDate) = (Month(GETDATE())-1)--(MTD) 
BEGIN 
set @startdate = dateadd (mm,-1, 
    DATEADD(dd,-(DAY(DATEADD(mm,1,convert(varchar(10),getdate(),111)))-1), 
    DATEADD(mm,0,convert(varchar(10),getdate(),111))))--BEGINNING OF PRIOR MONTH 
set @enddate =DATEADD(dd,-1, 
    DATEADD(mm, 
    DATEDIFF(m,0,convert(varchar(10),getdate(),111)),0))--END OF PRIOR MONTH 
END 


IF Month(@BeginningDate) = (Month(GETDATE()))--(Current Period) 
BEGIN 
set @startdate = dateadd(month, datediff(month, 0, 
    dateadd(day, datediff(day, 1, getdate()), 0)), 0)--BEGINNING OF CURRENT MONTH 
set @enddate = dateadd(day, 
    datediff(day, 0, getdate()), 0)--THROUGH CURRENT MONTH (TODAY) 
END 

ユーザーが検索パラメータとして12-03-201111/27/2011日付を入力すると、その後、私のヘッダーがFROM: 11/01/2011 TO:11/30/2011 (MTD)を表示する必要があります。たとえば、12/01/201112/08/2011を選択した場合は、その日付(現在の期間)が必要です。ユーザーが10/01/2011-12/8/2011を入力すると、期間は01/01/2011 to 12/8/2011 (YTD)になります。

これをSSRSで式としてどのように設定すればよいですか?これらの入力に基づいてデータセットを作成し、パラメータを呼び出す必要がありますか?私はこれを1つの日付の時間枠を使って行ってきましたが、複数の時間枠の問題がある場合は、このようなことはありません。

ありがとうございます!

UPDATE:これは私が私のSSRS式で達成しようとしているものです:ユーザーが最初に選択した場合

="FROM:"&iif(Month(Parameters!BeginningDate.Value < (Month(today()-1)) THEN (DateAdd("d",-DatePart(DateInterval.DayOfYear,Today(),0,0)+1,Today())).tostring("dd/MM/yyyy")+"  "+"TO:today()" 

は前月(例えば10/1)よりも大きい日付、日付はSHOULDを返さbe 1/1/2011 to 12/16/2011

これが明確になることを願っています。

ありがとうございます!

+0

@Kenホワイト。あなたはどのようにしてその日を「ハイライト」にするのですか?コードのようにインデントしましたか?まだ火傷を最小限に抑えるためにここで取引のすべてのトリックを学ぶことを試みている:Dありがとう! –

+0

バックトラック(前後のアポストロフィは、 'Esc 'の直下にある米国のキーボードの〜と同じキー上にあります)をインラインコードとして扱います。 –

+0

ありがとう!前の質問でこれを気づいたとき、私はこれを尋ねることを忘れていました。 –

答えて

3

これを前に投稿したので、日付機能を呼び出すことができるデータセットを使用する必要があります。あなたがこれに従うことができるかどうかを確認してください:SQL Server: calculating date rangesそれは不思議に動作します。具体的には、For Reporting Services Folksという部分を見てください。

11/27/2011を選択し、11/1/2011を返す場合は、単に関数month_startを呼び出すデータセットを呼び出すだけで簡単です。これは、そのスレッドですべて文書化されており、広く使用されています。

それのJISTはあなたがRSでこの機能が必要である:

CREATE FUNCTION [dbo].[udfCommonDates] (@date datetime) 
RETURNS @t table (week_start datetime, 
        week_end datetime, 
        lastweek_start datetime, 
        lastweek_end datetime, 
        month_start datetime, 
        month_end datetime, 
        lastmonth_start datetime, 
        lastmonth_end datetime, 
        yesterday_start datetime, 
        yesterday_end datetime, 
        today_start datetime, 
        today_end datetime, 
        thisweek_monday_start datetime, 
        thisweek_monday_end datetime, 
        year_start datetime, 
        year_end datetime, 
        tomorrow_noon datetime, 
        today_noon datetime, 
        date_only datetime) 
BEGIN 
    INSERT @t 
    SELECT 
    dbo.get_week_start (@date) AS week_start, 
    dbo.get_week_end (@date) AS week_end, 
    dbo.get_week_start (DATEADD(d, -7, @date)) AS lastweek_start, 
    dbo.get_week_end (DATEADD(d, -7, @date)) AS lastweek_end, 
    dbo.get_month_start(@date) AS month_start, 
    dbo.get_month_end (@date) AS month_end, 
    dbo.get_month_start (DATEADD(m,-1, @date)) AS lastmonth_start, 
    dbo.get_month_end (DATEADD(m,-1,@date)) AS lastmonth_end, 
    dbo.get_yesterday_start (@date) AS yesterday_start, 
    dbo.get_yesterday_end (@date) AS yesterday_end, 
    dbo.get_today_start (@date) AS today_start, 
    dbo.get_today_end (@date) AS today_end, 
    dbo.get_weekday_start(1,@date) AS thisweek_monday_start, 
    dbo.get_weekday_end(1,@date) AS thisweek_monday_end, 
    dbo.get_year_start(@date) AS year_start, 
    dbo.get_year_end(@date) AS year_end, 
    dbo.get_tomorrow_noon(@date) AS TomorrowNoon, 
    dbo.get_today_noon(@date) AS TodayNoon, 
    dbo.get_date_only(@date) AS DateOnly 
RETURN 
END 

次にあなたが各1スカラー値関数必要があります。今、ハードワークがサービスを報告するために行われ

CREATE FUNCTION [dbo].[get_date_only] (@date datetime) 
    RETURNS datetime 
    WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
    AS  
    BEGIN 
     RETURN dateadd(day, DateDiff(day, 0, GetDate()), 0) 
    END 
    GO 

CREATE FUNCTION [dbo].[get_month_end] (@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS  
BEGIN 
    RETURN dateadd(ms, -3, dateadd (m,datediff(m,0, 
      dateadd(m,1,@date)),0)) 
END 
GO 

CREATE FUNCTION [dbo].[get_month_start] (@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS  
BEGIN 
    RETURN dateadd(m,datediff(m,0, @date),0) 
    END 
GO 

CREATE FUNCTION [dbo].[get_today_end] (@today datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS  
BEGIN 
    return dateadd(ms, -3, datediff(d,0,dateadd(d,1,@today))) 
END 
GO 

CREATE FUNCTION [dbo].[get_today_noon](@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    RETURN DATEADD(hh, 12, DATEADD(d,DATEDIFF(d,0, @date),0)) 
END 
GO 

CREATE FUNCTION [dbo].[get_today_start] (@today datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    return dateadd(day, 0, datediff(d,0,@today)) 
END 
GO 

CREATE FUNCTION [dbo].[get_tomorrow_noon](@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    RETURN DATEADD(hh, 12, DATEADD(d,DATEDIFF(d,-1, @date),0)) 
END 
GO 

CREATE FUNCTION [dbo].[get_week_end] (@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    return dateadd(yyyy, datepart(yyyy, 
     dateadd(weekday,7-datepart(weekday, @date),@date))-1900, 0) 
    + dateadd(ms, -3, 
     dateadd(dy, datepart(dy, 
    dateadd(weekday,7-datepart(weekday, @date),@date)),0)) 
END 
GO 

CREATE FUNCTION [dbo].[get_week_start] (@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    return dateadd(yyyy, datepart(yyyy, 
     dateadd(weekday,1-datepart(weekday, @date),@date))-1900, 0) 
    + dateadd(dy, datepart(dy, 
     dateadd(weekday,1-datepart(weekday, @date),@date))-1,0) 
END 
GO 

CREATE FUNCTION [dbo].[get_weekday_end] (@weekday tinyint, 
           @date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    return dateadd(yyyy, datepart(yyyy, 
     dateadd(weekday,@weekday- 
     datepart(weekday, @date),@date))-1900, 0) 
    + dateadd(ms, -3, 
     dateadd(dy, datepart(dy, 
     dateadd(weekday,@weekday-datepart(weekday, @date), 
             @date)),0)) 
END 
GO 

CREATE FUNCTION [dbo].[get_weekday_start] (@weekday tinyint, 
            @date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    return dateadd(yyyy, datepart(yyyy, 
     dateadd(weekday,@weekday- 
     datepart(weekday, @date),@date))-1900, 0) 
    + dateadd(dy, datepart(dy, 
     dateadd(weekday,@weekday-datepart(weekday, @date), 
             @date))-1,0) 
END 
GO 

CREATE FUNCTION [dbo].[get_year_end] (@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
RETURN DATEADD(year, DATEDIFF(year, 0, GetDate())+1, 0)-1 
END 
GO 

CREATE FUNCTION [dbo].[get_year_start] (@date datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    RETURN DATEADD(year,DATEDIFF(year,0, @date),0) 
END 
GO 

CREATE FUNCTION [dbo].[get_yesterday_end] (@today datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    return dateadd(ms, -3, datediff(d,0,@today)) 
END 
GO 

CREATE FUNCTION [dbo].[get_yesterday_start] (@today datetime) 
RETURNS datetime 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 
AS BEGIN 
    RETURN dateadd(day, -1, datediff(d,0,@today)) 
END 
GO 

をデータセットがストアドプロシージャまたはダイレクトテーブルになることを忘れないでください。

CREATE PROCEDURE [dbo].[uspCommonDates] AS 
begin 
    set datefirst 1 
    declare @date datetime 
    set @date = getdate() 
    select * from dbo.udfCommonDates(@date) 
end 

をそしてdatasetとして、このストアドプロシージャを使用します。だから、単にストアドプロシージャを作成します。だから、これらすべての素晴らしい日付関数にアクセスできるようになりました。だから、今、あなたのパラメータセクションに移動し、そのように、これらの関数を呼び出すことができます。

enter image description here

関連する問題