使用包含声明变量的动态查询在 SSRS 中填充数据集

Populating Dataset in SSRS Using Dynamic Query Including Declare Variables

我目前正在为我的项目使用 SQL Server 2012 和 Visual Studio 2012。

我的问题是下面的代码包含声明变量。基本上,当我在 SQL 服务器中使用它时,我将 @StartDate 设置为当月的第一天,将 @EndDate 设置为当月的最后一天(十二月)

DECLARE @StartDate date
DECLARE @EndDate date

-- SET @StartDate = '20161201'
-- SET @EndDate = '20161231'

SELECT  A.[TYPE_NAME], -- Type_Name
    A.[STRT_DTTM], --Start Date
    A.[END_DTTM], --End Date
    B.[ASSIGNED_DT], --Assigned Date
    CASE WHEN (CAST(A.[STRT_DTTM] AS DATE) <= @EndDate AND (CAST(A.[END_DTTM] as date) > @EndDate OR A.[END_DTTM] IS NULL))
        THEN 1
        ELSE 0
        END AS 'OpenIndicator',
    CASE WHEN CAST(A.[END_DTTM] as DATE) between @StartDate AND @EndDate
        THEN 1
        ELSE 0
        END AS 'ClosedIndicator',
    CASE WHEN CAST(B.[ASSIGNED_DT] as DATE) between @StartDate AND @EndDate
        THEN 1
        ELSE 0
        END AS 'AssignedIndicator',
FROM    Report AS A     
    INNER JOIN Dimension AS B 
    ON A.[ID] = B.[ID]  
WHERE   1=1
AND     A.[EXPIRE_DATE] = '12/31/9999' --Expire Date (Basically looking for active records.)
AND     (A.[TYPE_NAME] like '%Bicycle%'
    OR      A.[TYPE_NAME] like '%Car%')

到目前为止,在 SSRS 中,我已将上述代码放入数据集中。我还在 SSRS StartDate 和 EndDate 中创建了 2 个参数。当我尝试 运行 基于数据集的简单 tablix 时...没有任何显示。

我注释掉了 SET @StartDate = '20161201' 和 SET @EndDate = '20161231'。

我在工作中能做的事情非常有限,所以不幸的是我也不能使用存储过程,因为我认为这可以使它更容易。

但我正在尝试通过用户输入到两个参数 StartDate 和 EndDate 中的内容来填充类似销售的数据集,但我在 SSRS 中遇到了问题。任何人都可以帮助我确切地做什么,我很迷茫。

尝试在代码中添加注释以使其更易于理解,但由于不想在工作中遇到麻烦而不得不更改一些内容。

您不需要在数据集查询中声明变量,这是在 SSRS 应用层处理的。您的查询应该类似于..

SELECT  A.[TYPE_NAME],     -- Type_Name
        A.[STRT_DTTM],     -- Start Date
        A.[END_DTTM],      -- End Date
        B.[ASSIGNED_DT],   -- Assigned Date
    CASE WHEN (CAST(A.[STRT_DTTM] AS DATE) <= @EndDate 
                 AND (CAST(A.[END_DTTM] as date) > @EndDate OR A.[END_DTTM] IS NULL))
        THEN 1
        ELSE 0
        END AS 'OpenIndicator',
    CASE WHEN CAST(A.[END_DTTM] as DATE) between @StartDate AND @EndDate
        THEN 1
        ELSE 0
        END AS 'ClosedIndicator',
    CASE WHEN CAST(B.[ASSIGNED_DT] as DATE) between @StartDate AND @EndDate
        THEN 1
        ELSE 0
        END AS 'AssignedIndicator',
FROM    Report AS A     
    INNER JOIN Dimension AS B 
    ON A.[ID] = B.[ID]  
WHERE   1=1
AND     A.[EXPIRE_DATE] = '12/31/9999' 
AND     (A.[TYPE_NAME] like '%Bicycle%'
    OR      A.[TYPE_NAME] like '%Car%')

既然您已经提到您已经在 SSRS 中创建了参数,请右键单击您的 DataSet 并转到 Properties,然后在 Parameters 选项卡上,创建您的 SSRS 参数映射到您的查询参数。

最后,如果您希望默认日期为当月的第一天和最后一天,您可以转到 Parameters,右键单击转到 Properties,转到 Default Values 选项卡并单击 Add 并使用以下表达式。

本月第一天

=Today.AddDays(1-Today.Day)

本月最后一天

=DateSerial(Year(Now()), Month(Now()), "1").AddMonths(1).AddDays(-1)