使用Reporting Services数据集中的条件值进行调试

时间:2009-06-12 12:25:50

标签: reporting-services

在我的报告服务数据集的SQL查询中,我希望能够使用以下模式:

-- Used to enable/disable diagnostic statements
declare @DEBUG bit
set @DEBUG = 0

-- Get current date/time.
declare @now datetime; set @now = getdate()
if @DEBUG = 1 select @now as now

-- Create a table to contain the chart values for the last 30 days.
declare @reportValues table
(
    reportDate datetime,
    x int
)

-- Populate the table with the last 30 days.
declare @counter int; set @counter = 0
while @counter < 5
begin
    insert into @reportValues select dateadd( day, -@counter, @now ), @counter
    set @counter = @counter + 1
end
if @DEBUG = 1 select * from @reportValues

select sum(x) as total from @reportValues

问题是,Reporting Services忽略了IF语句,并为报告的值而不是主查询“选择@now as now”。

有没有办法实现这种模式来解决这个RS限制?

更新:如果您转到"SET FMTONLY" help page on the MSDN,有人已在页面底部的评论中注明了此问题,并且关闭此选项可解决此问题。

2 个答案:

答案 0 :(得分:2)

列集是否随@debug而变化?

如果数据库是SQL Server,您可以尝试使用fmtonly kludge:

declare @fmtonlyon bit
select @fmtonlyon = 0
if 1 = 0 select @fmtonlyon = 1
if @fmtonlyon = 1 set fmtonly off

/* query body */

if @fmtonlyon = 1 set fmtonly on

强制进行全面评估。在你的情况下可能会或可能不会工作。

或者,用PRINT替换调试SELECT语句。

答案 1 :(得分:0)

最好在存储过程中编写查询并从RS调用sproc,而不必依赖RS对文本查询的解释。然后,您应该能够传递@Debug参数并毫无问题地进行检查。

编辑:请尝试此操作,看看它是否识别出If语句 -

-- Used to enable/disable diagnostic statements
declare @DEBUG bit
set @DEBUG = 0

-- Get current date/time.
declare @now datetime; set @now = getdate()
IF @DEBUG = 1 
BEGIN
    select @now as now
END
ELSE
BEGIN
    select * from ... -- Main query elided
END

编辑#2 :由于以上似乎没有帮助,我的下一个建议是尝试类似SELECT CASE(这假设你只是拉一列并调用它“现在“):

-- Used to enable/disable diagnostic statements
declare @DEBUG bit
set @DEBUG = 0

-- Get current date/time.
declare @now datetime; set @now = getdate()
SELECT
    CASE @Debug
        WHEN 1 THEN @now
        WHEN 0 THEN (Perform Your Select Inside These Parentheses)
    END as now