我使用递归父级功能制作了一个SSRS报表,用于显示值的层次树。问题是有些子元素有多个父级,但是由于我需要按ID分组才能很好地使用递归父级,因此我只看到不同的条目。这意味着即使每个子元素“应该”在报告中的多个位置上出现(在其每个父级下面),但我只能看到一次。
这里是一个示例数据集,展示了我的意思:
DECLARE @Bear Table
( ParentId INT NOT NULL
,Id INT NOT NULL
,Name VARCHAR(255))
INSERT INTO @Bear
SELECT * FROM
(SELECT 0 AS ParentId, 1 AS Id, 'Daddy Bear' AS Name UNION
SELECT 0 AS ParentId, 2 AS Id, 'Mummy Bear' AS Name UNION
SELECT 1 AS ParentId, 3 AS Id, 'Baby Bear' AS Name UNION
SELECT 2 AS ParentId, 3 AS Id, 'Baby Bear' AS Name) AS FamilyMember
ORDER BY FamilyMember.Id
SELECT * FROM @Bear
我的实际数据中包含很多"Baby Bears",例如一个函数被多个程序使用,或者一个程序被多个报表使用。
当我制作报表时,我根据Bear.Id进行分组,并使用Bear.ParentId进行递归父级分组,这会在报表表格中给我类似下面的结果:
Level 1 Level 2
Daddy Bear
Baby Bear
Mummy Bear
正如您所看到的,“Baby Bear”只出现了一次(通常情况下,Id应该是唯一的,这样做就很合理)。我想要的是SSRS显示更像这样的内容:
Level 1 Level 2
Daddy Bear
Baby Bear
Mummy Bear
Baby Bear
这将使用户更好地了解他们正在查看的实际结构。
到目前为止,我已尝试将报告组更改为按“cstr(Fields!Id.Value)& cstr(Fields!ParentId.Value)”分组,以重新建立唯一分组,以便不会将任何记录聚合成不可见性,但这将失去子项直接出现在其父项之后的排序,因此我得到了以下结果:
Level 1 Level 2
Daddy Bear
Baby Bear
Baby Bear
Mummy Bear
我尝试在查询中添加ROW_NUMBER() OVER (ORDER BY Id, ParentId) 作为新列进行分组,但SSRS似乎出了问题。 最终的解决方法是仅列出第一个示例中的唯一值,但在每个表行中使用操作,在单击时再次运行对应节点的报表。 然而,这远非理想。
我也搜索过谷歌,但没有结果。
我不知道该怎么办。
非常感谢您的帮助 - 我该怎么办?
谢谢您的时间,
Mark