【问题标题】:SSRS Hierarchy Recursive parent - child with multiple parentSSRS Hierarchy Recursive parent - 具有多个父级的子级
【发布时间】:2026-02-18 02:00:01
【问题描述】:

您好,我需要 SSRS 设置方面的帮助,以便在层次结构报告中正确显示多个父级中的子级。

这就是我所做的。

 select * from PCA

这是 PCA 表

Parent      Child
ASSY1       CHILD1    
ASSY1       CHILD2    
CHILD1      ACHILD1   
CHILD1      ACHILLD2  
ACHILD1     BCHILD1   
ACHILD1     BCHILD2   

这是报表数据集中的 CTE

 WITH tBOM AS(
 SELECT Parent,Child, 0 as BOMLevel from PCA A
 WHERE Parent='ASSY1'
 UNION ALL
 SELECT C.Parent, C.Child, BOMLevel+1 from PCA C
 INNER JOIN tBOM on tBOM.Child=C.Parent
 )
 SELECT row_number() over (Order by Parent), * FROM tBOM

这是 SSRS rdl 文件中的设置。以及我运行它时的报告。按子级分组,我将递归父级设置为父级。我还设置了组可见性,所以我得到加号来进行向下钻取和填充。一切看起来都不错。

padding left 是这样设置的:

=20 * Level() & "pt"

直到:我在表格中再添加一行。

Parent  Child
ASSY1       CHILD1    
ASSY1       CHILD2    
CHILD1      ACHILD1   
CHILD1      ACHILLD2  
ACHILD1     BCHILD1   
ACHILD1     BCHILD2   
**ACHILLD2      BCHILD2**   

我希望在 ACHILLD2 以下 但不:这就是我得到的

更多。如果我添加更多行来增加深度,结果会更不正确。例如,如果我向 BCHILD2 添加一个孩子,

但是我得到了这个:

【问题讨论】:

    标签: sql-server reporting-services ssrs-2008 hierarchy common-table-expression


    【解决方案1】:

    阅读数小时的文章后。我得出的结论是 SSRS 无法实现我的最终目标。 伤心 我知道。但它就是这样

    https://connect.microsoft.com/SQLServer/feedback/details/724449/bug-found-when-using-the-ssrs-recursive-hierarchy-feature-with-multi-parent-relationships

    使用 SSRS 递归层次结构功能时发现错误 多亲关系 - MichaelLee 着

    状态:按设计关闭

    产品团队 相信此商品符合其预期设计。

    对此特定项目的解决方案的更详细说明 可能已在 cmets 部分提供。

    说明

    在 SSRS 报告中,您可以使用向下钻取创建递归层次结构 按照这篇文章进行控制: http://msdn.microsoft.com/en-us/library/bb630438(v=SQL.100).aspx

    但是,当一个 孩子有多个父母。如果一个孩子有两个父母,你会 期望一个孩子被放置在每个父母之下。相反,孩子是 仅放置在 SQL 表中最先出现的父级之下。如果 您向 tablix 添加一个附加列并将表达式设置为 '=CountRows("RowGroupName",Recursive)',你会注意到总数 孩子的记录是 2。所以由于某种原因,这两个记录都是 放置在第一个父级下方,即使其中一个记录具有 不同的父代。

    请注意,在我的情况下,子 ID 和父 ID 属于 唯一标识符。

    详情 评论 (2) |解决方法 (3) |附件 (0) 发表评论。易卜拉欣·阿奇卡 (Ibrahim Achkar) 于 2012 年 4 月 20 日上午 6:10 发布 你好迈克尔,我也发现了这个错误。有关的任何更新 来自微软的解决方案。至于你的解决方法,你建议 获取数据并将其设置在不同的新临时表中 (一对一关系)格式。有了新桌子,我们还 需要在SSRS中使用父分组还是需要其他方法?

    非常感谢您的帮助。

    谢谢您,Ibrahim 由 Riccardo [MSFT] 于 2012 年 2 月 13 日下午 5:34 发布 感谢您的反馈意见。我们正在按照设计解决此错误 因为我们将每个组与一个父组相关联。我们不 将一个组与多个父组关联(但可以随意创建 对此功能的建议)。

    为了进一步解释预期的行为,我们首先对数据进行分组 在这种情况下,基于 GroupExpression 或 ChildID 字段。然后 我们评估 Parent 表达式,在本例中为 ParentID 字段, 对于每个组。由于我们将每个组与一个单亲相关联 组,我们需要一个值。当一个表达式应该返回一个 单个值是指具有多个数据行的范围内的字段 - 这种情况只是一个例子——行为是官方未定义的, 但在实践中,它往往表现得像第一个聚合函数, 它采用范围内的第一个数据行。

    Riccardo Muti SQL Server 报告服务

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a65bf4a4-e3b6-4c33-aa9e-6f7d7e4b7f5e/bill-of-materials-recursive-parent-report?forum=sqlreportingservices

    嗨 duanekae,只是为了确认一下,我从来没有使用过足够的解决方案 SSRS 为此。我最终使用自定义 SQL 函数来执行此操作。 我希望让它在 SSRS 中工作,因为这将是一个很大的 更容易的解决方案。 2016 年 1 月 13 日星期三下午 4:04 引用头像 Alex Lush - Severn Unival Alex Lush - Severn Unival

    【讨论】:

      最近更新 更多