【问题标题】:Passing multiple values into sub report parameter SSRS将多个值传递到子报表参数 SSRS
【发布时间】:2020-08-27 11:10:02
【问题描述】:

我有一份显示产品详细信息的报告。其中一些产品将是父母产品的孩子。孩子们有3列Parent1Parent2Parent3

除了变量@ParentCodes 之外,子报表运行相同的查询。这设置为varchar(max)。然后我在 where 子句中使用一个函数来拆分可能传递的代码ParentCode in (SELECT [Value] FROM dbo.SplitMultiValueParameterString(@ParentCodes, ','))

如果我在 ('123', '456') 这样的字符串中传入 2 或 3 个代码,则查询将返回所需的 2 行。

我正在努力让它在 SSRS 中工作。我已经设置了两个报告,并在子报告中添加了@ParentCodes 参数。

在主报告中,我使用文本框上的操作转到子报告,并使用以下值表达式 =Fields!Parent1.Value & Fields!Parent2.Value & Fields!Parent3.Value 传递参数 @ParentCodes

在子报表中,在数据集的参数选项卡中,我添加了@ParentCodes 参数并使用表达式=JOIN(Parameters!ParentCodes, ",")

这没有按预期工作,任何人都可以理解我要做什么并提出解决方案吗?

【问题讨论】:

    标签: sql-server reporting-services ssrs-2012


    【解决方案1】:

    在 SSRS 中,如果您使用直接语句(因为您只是将原始 SQL 转储到报告数据中),那么您需要使用 IN,并且 SSRS(尽管我讨厌它)“安全地”替换IN 中的变量带有参数注入。简单来说,进行如下查询:

    SELECT *
    FROM dbo.YourTable
    WHERE ID IN (@ID);
    

    然后在报告中选择参数1234。它将注入这些,查询将变为以下内容:

    SELECT *
    FROM dbo.YourTable
    WHERE ID IN (1,2,3,4);
    

    但是,如果您使用的是存储过程,则需要使用字符串拆分器(例如 DelimitedSplit8k_LEAD)来完成这项工作,并将您的参数设为 (n)varchar

    CREATE PROC dbo.YourProc @IDs varchar(8000) AS
    BEGIN
    
    SELECT *
    FROM dbo.YourTable YT
         JOIN dbo.DelimitedSplit8k_LEAD(@IDs, ',') DS ON YT.ID = DS.item;
    

    【讨论】:

      【解决方案2】:

      看起来您希望查询在子报表中执行动态 SQL,但这是行不通的,但 SSRS 应该可以满足您的需要。

      尝试This 与您的子报表一起使用一些多个父代码。

      在子报告的 where 子句中,您应该可以这样做:

      父代码在哪里(@parentcodes)

      您可能需要根据 this: 文章调整您的 JOIN 表达式,但它可能会起作用。

      【讨论】:

        【解决方案3】:

        如果我的理解正确,子报表接受一个逗号分隔的字符串作为参数,并从主报表中填充?

        如果是这样,那么你的表达方式

        =Fields!Parent1.Value & Fields!Parent2.Value & Fields!Parent3.Value
        

        错误,因为它没有任何分隔符,因此 123 和 456 将作为 123456 发送。

        你可能需要类似的东西

        =Fields!Parent1.Value & "," & Fields!Parent2.Value & "," & Fields!Parent3.Value
        

        另一种选择是只传入子产品的 ID,然后在子报表的查询中获取父 ID。通过这种方式,您无需进行任何类型的处理来构建或拆分参数值。

        【讨论】:

        • 我已将表达式更新为您的建议,不再有错误消息,但子报告中没有数据。此外,如果没有父代码,则数据集中的值为 null。这可能是个问题吗?
        • 传递给子报表的参数值是123,456,
        • 您可能需要编辑您的问题并显示数据集查询,或者至少显示其中的重要部分。还包括一个记录/行的样本,因为它会出现在主报告中,包括子产品,因为我认为整个事情可能会被简化
        猜你喜欢
        • 2021-02-09
        • 1970-01-01
        • 2023-03-15
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多