SSRS报告参数不起作用

时间:2017-03-18 06:05:00

标签: ssrs-2008-r2

我是SSRS的新手。我有一个报告参数不起作用的报告。无论我选择什么价值,它似乎都没有得到那个价值。它只从查询中选择定义的值。如果我将查询中的参数定义为null,则返回null。其他人给了我那份报告,但我不知道这是否是定义参数的正确方法。参数名称是@DateRange,查询是:(如果这个太长,请告诉我我是否使用了错误的参数。)

PS:查询在SSMS中运行良好

    DECLARE @Date           datetime = getdate()
    DECLARE @DateStart      datetime
    DECLARE @DateEnd        datetime
    DECLARE @CorpStart      int = 0
    DECLARE @CorpEnd        int = 0
    DECLARE @ReportTitle        varchar(30) = ''
    DECLARE @DateRange      varchar(50) = N'Year-To-Date'




    IF @DateRange = 'Today'
    BEGIN
            SET @DateStart  = [dbo].[get_today_start](@Date)
            SET @DateEnd    = [dbo].[get_today_end](@Date)
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    IF @DateRange = 'Yesterday'
        BEGIN
            SET @DateStart  = [dbo].[get_yesterday_start](@Date)
            SET @DateEnd    = [dbo].[get_yesterday_end](@Date)
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    IF @DateRange = 'Last Week'
        BEGIN

            --SET DATEFIRST 1
            --SELECT DATEADD(dd,-7,[dbo].[get_week_start](getdate()))   
            --SELECT DATEADD(dd,-7,[dbo].[get_week_end](getdate()))

            SET @DateStart  = DATEADD(dd,-7,[dbo].[get_week_start](@Date))
            SET @DateEnd    = DATEADD(dd,-7,[dbo].[get_week_end](@Date))
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    IF @DateRange = 'Week-To-Date'
        BEGIN
            SET @DateStart  = [dbo].[get_week_start](@Date)
            SET @DateEnd    = @Date --[dbo].[get_week_end](@Date)
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    IF @DateRange = 'Month-To-Date'
        BEGIN
            SET @DateStart  = [dbo].[get_month_start](@Date)
            SET @DateEnd    = @Date --[dbo].[get_month_end](@Date)
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    IF @DateRange = 'Quarter-To-Date'
        BEGIN
            SET @DateStart  = [dbo].[get_quarter_start](@Date)
            SET @DateEnd    = @Date --[dbo].[get_quarter_end](@Date)
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    IF @DateRange = 'Year-To-Date'
        BEGIN
            SET @DateStart  = [dbo].[get_year_start](@Date)
            SET @DateEnd    = @Date --[dbo].[get_year_end](@Date)
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    IF @DateRange = 'Previous 4 Weeks'
        BEGIN
            SET @DateStart  = DATEADD(dd,-29,[dbo].[get_week_start](@Date))
            SET @DateEnd    = DATEADD(dd,-1,[dbo].[get_week_start](@Date))
            SET @CorpStart  = [dbo].udfGetCorpWeek(@DateStart)
            SET @CorpEnd    = [dbo].udfGetCorpWeek(@DateEnd)
        END


    DECLARE @Result TABLE(
                DateStart       datetime,
                DateEnd         datetime,
                CorpStart       int,
                CorpEnd         int,
                Region          varchar(3),
                ID              int,    
                Program         varchar(50),        -- Program group
                [2016 Leads]    int,                -- within 200 miles with phone number
                [2017 Leads]    int,                -- within 200 miles with phone number
                [Budget]        int,                -- budgeted lead #s
                [SortOrder]     int
                )




    INSERT INTO @Result(DateStart,DateEnd,CorpStart,CorpEnd,Region,ID,Program,[2016 Leads],[2017 Leads],[Budget],[SortOrder]) 
    SELECT  DateStart   = @DateStart,
            DateEnd     = @DateEnd,
            CorpStart   = @CorpStart,
            CorpEnd     = @CorpEnd,
            Region      = 'TNC',
            ID          = pg.[ProgramGroupID],
            Program     = pg.[Name],
            0,0,0,1
    FROM    refProgramgroup pg
    WHERE   pg.ProgramGroupID in(1,2,3,4,5,6,7,13,28,29,31)



    INSERT INTO @Result(DateStart,DateEnd,CorpStart,CorpEnd,Region,ID,Program,[2016 Leads],[2017 Leads],[Budget],[SortOrder]) 
    SELECT  DateStart   = @DateStart,
            DateEnd     = @DateEnd,
            CorpStart   = @CorpStart,
            CorpEnd     = @CorpEnd,
            Region  = 'TRG',
            ID      = pg.[ProgramGroupID],
            Program = pg.[Name],
            0,0,0,2
    FROM    refProgramgroup pg
    WHERE   pg.ProgramGroupID in(1,2,3,4,5,6,7,13,28,29,31)



    INSERT INTO @Result(DateStart,DateEnd,CorpStart,CorpEnd,Region,ID,Program,[2016 Leads],[2017 Leads],[Budget],[SortOrder]) 
    SELECT  DateStart   = @DateStart,
            DateEnd     = @DateEnd,
            CorpStart   = @CorpStart,
            CorpEnd     = @CorpEnd,
            Region      = 'RFR',
            ID          = pg.[ProgramGroupID],
            Program     = pg.[Name],
            0,0,0,3
    FROM    refProgramgroup pg
    WHERE   pg.ProgramGroupID in(1,2,3,4,5,6,7,13,28,29,31)



    INSERT INTO @Result(DateStart,DateEnd,CorpStart,CorpEnd,Region,ID,Program,[2016 Leads],[2017 Leads],[Budget],[SortOrder]) 
    SELECT  DateStart   = @DateStart,
            DateEnd     = @DateEnd,
            CorpStart   = @CorpStart,
            CorpEnd     = @CorpEnd,
            Region      = 'TRO',
            ID          = pg.[ProgramGroupID],
            Program     = pg.[Name],
            0,0,0,3
    FROM    refProgramgroup pg
    WHERE   pg.ProgramGroupID in(1,2,3,4,5,6,7,13,28,29,31)



    INSERT INTO @Result(DateStart,DateEnd,CorpStart,CorpEnd,Region,ID,Program,[2016 Leads],[2017 Leads],[Budget],[SortOrder]) 
    SELECT  DateStart   = @DateStart,
            DateEnd     = @DateEnd,
            CorpStart   = @CorpStart,
            CorpEnd     = @CorpEnd,
            Region      = 'BLR',
            ID          = pg.[ProgramGroupID],
            Program     = pg.[Name],
            0,0,0,4
    FROM    refProgramgroup pg
    WHERE   pg.ProgramGroupID in(1,2,3,4,5,6,7,13,28,29,31)



    INSERT INTO @Result(DateStart,DateEnd,CorpStart,CorpEnd,Region,ID,Program,[2016 Leads],[2017 Leads],[Budget],[SortOrder]) 
    SELECT  DateStart   = @DateStart,
            DateEnd     = @DateEnd,
            CorpStart   = @CorpStart,
            CorpEnd     = @CorpEnd,
            Region      = 'NSL',
            ID          = pg.[ProgramGroupID],
            Program     = pg.[Name],
            0,0,0,4
    FROM    refProgramgroup pg
    WHERE   pg.ProgramGroupID in(1,2,3,4,5,6,7,13,28,29,31)

    INSERT INTO @Result(DateStart,DateEnd,CorpStart,CorpEnd,Region,ID,Program,[2016 Leads],[2017 Leads],[Budget],[SortOrder]) 
    SELECT  DateStart   = @DateStart,
            DateEnd     = @DateEnd,
            CorpStart   = @CorpStart,
            CorpEnd     = @CorpEnd,
            Region      = 'LSR',
            ID          = pg.[ProgramGroupID],
            Program     = pg.[Name],
            0,0,0,5
    FROM    refProgramgroup pg
    WHERE   pg.ProgramGroupID in(1,2,3,4,5,6,7,13,28,29,31)



UPDATE  @Result
SET     Budget = ISNULL((Select sum(u.LeadCount)
                    from    [ETL].[dbo].[TRA_LeadBudget2016_Unpivot] u
                    where   u.CorpWeek          >= @CorpStart 
                    and     u.CorpWeek          <= @CorpEnd
                    and     u.ProgramGroupID    = [@Result].ID
                    and     u.Region            = [@Result].Region)
                    ,0)


UPDATE @Result
SET [2016 Leads] = ISNULL((Select count(distinct(L.PersonID)) --count(LD.LeadID)
                            from 
                            tblLeadDistance LD with(nolock)
                            join 
                            tblLead L with(nolock)                  on LD.LeadID = L.LeadID
                            join tblCampaignLead CL with(nolock)    on CL.LeadID = L.LeadID
                            join tblCampaign C with(nolock)         on C.CampaignID = CL.CampaignID 
                            join tblProgram prog with(nolock)       on C.ProgramID = prog.ProgramID
                            where prog.ProgramGroupID = [@Result].ID
                            and LD.LandmarkID =  (CASE
                                                    WHEN [@Result].Region = 'TNC' THEN 1
                                                    WHEN [@Result].Region = 'TRG' THEN 2
                                                    WHEN [@Result].Region = 'RFR' THEN 5
                                                    WHEN [@Result].Region = 'TRO' THEN 4
                                                    WHEN [@Result].Region = 'BLR' THEN 16
                                                    WHEN [@Result].Region = 'NSL' THEN 23
                                                    WHEN [@Result].Region = 'LSR' THEN 25
                                                    END)
                            --and LD.DistanceMiles <= 201
                            and L.LeadStatusID <> 9
                            and L.DateCreated >= DATEADD(week, -52, @DateStart)
                            and L.DateCreated <= DATEADD(week, -52, @DateEnd)
                            and not(prog.ProgramID = 1000000265)
                            and L.OriginatingTable like '%Staging%'
                            ),0)



UPDATE @Result
SET [2017 Leads] = ISNULL((Select count(distinct(L.PersonID))
                            from tblLeadDistance LD with(nolock)
                            join tblLead L with(nolock)             on LD.LeadID = L.LeadID
                            join tblCampaignLead CL with(nolock)    on CL.LeadID = L.LeadID
                            join tblCampaign C with(nolock)         on C.CampaignID = CL.CampaignID 
                            join tblProgram prog with(nolock)       on C.ProgramID = prog.ProgramID
                            where   prog.ProgramGroupID = [@Result].ID
                            and     LD.LandmarkID =  (CASE
                                                    WHEN [@Result].Region = 'TNC' THEN 1
                                                    WHEN [@Result].Region = 'TRG' THEN 2
                                                    WHEN [@Result].Region = 'RFR' THEN 5
                                                    WHEN [@Result].Region = 'TRO' THEN 4
                                                    WHEN [@Result].Region = 'BLR' THEN 16
                                                    WHEN [@Result].Region = 'NSL' THEN 23
                                                    WHEN [@Result].Region = 'LSR' THEN 25
                                                    END)
                            and     L.LeadStatusID <> 9
                            and     L.DateCreated >= @DateStart
                            and     L.DateCreated <= @DateEnd
                            and     L.OriginatingTable like '%Staging%'
                            ),0)



SELECT * from @Result

1 个答案:

答案 0 :(得分:0)

只是想确定 - 您的SSRS数据集中是否DECLARE @DateRange varchar(50) = N'Year-To-Date'已注释掉了吗?因为如果没有,那就是它无法正常工作的原因。