使用参数生成日期范围

时间:2018-09-24 13:59:20

标签: sql-server

因此,我有多个报告正在尝试合并为一个报告。最大的问题是,一份报告每两周运行一次,另一份报告每月运行一次。

报告的日期范围是使用此sql创建的

SELECT
    CASE 
        WHEN DAY(GETDATE()) <= 15 THEN
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) + 15
        ELSE
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) , 0)
    END AS LO_DATE

因此,我尝试添加一个我可以使用的参数,该参数基本上会说,嘿,如果选中此选项,则始终将其运行整个月,而不是过去两周。那个sql看起来像这样。

IF (@RUN_FOR_MONTH = 'true')
    SELECT
        CASE 
            WHEN DAY(GETDATE()) <= 15 THEN
                DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) + 15
            ELSE
                DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) , 0)
        END AS LO_DATE
ELSE
    SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) , 0) AS LO_DATE

但是我仍然收到此错误:

报告参数“ LO_DATE”具有默认值或有效值,该值取决于报告参数“ RUN_FOR_MONTH”。转发依赖项无效。

我是使用SQL Server Report Builder的新手,因此,如果您需要更多信息,请询问,我将提供它。

请求的更改-我仍然遇到相同的错误

SELECT
    CASE
        WHEN @RUN_FOR_MONTH = 'true' THEN
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) , 0)
        WHEN DAY(GETDATE()) <= 15 THEN
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) + 15
        ELSE
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) , 0)
    END AS LO_DATE

1 个答案:

答案 0 :(得分:1)

SSRS中的参数是顺序导出的。如果您的参数基于他人的值,则必须以正确的顺序列出这些参数。采取以下

enter image description here

在此示例中,将首先评估@DateFrom,然后评估@DateTo;因此@DateFrom不能依赖@DateTo(不过可以倒过来)。

例如,如果@DateFrom的值为DateAdd("d", -2, @DateTo),您将收到上面的错误。您需要选择@DateTo并单击“向上箭头”图标(或选择@DateFrom和向下箭头)