【问题标题】:How to create SSRS report using procedure that returns data based on parameter如何使用基于参数返回数据的过程创建 SSRS 报告
【发布时间】:2017-01-31 17:11:56
【问题描述】:

我有一个基于参数@SearchType 返回列数的存储过程。所以首先它检查参数值是什么,然后 SELECT 语句返回数据。

我的问题是如何在 SSRS 中使用此程序?它不会给我带来任何列,因此我可以将其添加到表格或矩阵中。

在 SSMS 中,该过程可以正常工作。 必须有一个解决方法。

谢谢

ALTER PROCEDURE dbo.RPT_spLoadUserOpenTasks
      (
        @UserGUID varchar(8000) = NULL,
        @NoteStoreType INT = NULL,
        @DateFrom datetime = NULL,
        @DateTo datetime =NULL,
        @LineGUID varchar(8000) = NULL
      ) 

AS
 IF @SearchType = 0
 BEGIN 
       SELECT DISTINCT 
            TOP 100 PERCENT 
                Column1,
                Column2,
                Column3
                --other columns
         FROM 
                  dbo.tblNoteEntities  (nolock) 
           --some other JOINs here 
         WHERE tq.LineGuid IN (SELECT * FROM @LineTable)
                AND               
                  (@UserGUID IS NULL OR tblNoteRecipients.UserGUID = @UserGUID) 
             ORDER BY  Column1
      RETURN
END
--------------------------------------------------------------------------------
if @SearchType = 1  --eq and eq access 
BEGIN 
SELECT DISTINCT 
            TOP 100 PERCENT 
                Column4,
                Column5,
                Column6
         FROM 
                  dbo.tblNoteEntities  (nolock) 
           --some other JOINs here 
         WHERE tq.LineGuid IN (SELECT * FROM @LineTable)
                AND               
                  (@UserGUID IS NULL OR tblNoteRecipients.UserGUID = @UserGUID) 
             ORDER BY  Column1
      RETURN
END
--------------------------------------------------------------------------------
if @SearchType = 3 --And so on 

【问题讨论】:

    标签: sql-server tsql reporting-services


    【解决方案1】:

    您必须在数据集中手动定义查询输出的列。

    由于列名和列数不是静态的,因此尝试通过让每个查询返回相同数量的列,而这些列对于不需要的列具有空数据。

    对于参数的每个值,创建包含所需列的表并根据所选参数值设置表可见性(例如,如果参数有 3 个值,则必须创建 3 个表,但每次只有一个可见)。

    【讨论】:

    • 谢谢。列数将根据参数值而有所不同。有没有类似的例子?谢谢
    • 我将更新我的答案以匹配您的情况。我认为 CRM 的 Microsoft 报告与您所要求的类似
    • 太棒了。我会尽力做到这一点。存储过程也可以返回所有列,它只是一堆 NULL。但是我可以根据参数通过编写表达式来隐藏 SSRS 中的列。你认为那会是更好的方法吗?尤其是在性能方面。谢谢
    • 如果您想打印报表,那么我认为最好使用多表解决方案,否则由于报表宽度可能会导致打印时出现空白页。从性能的角度来看,我认为隐藏列和隐藏表的渲染时间差别不大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多