Ssrs 2008 分层SQL查询、SSRS 2008和求和列

Ssrs 2008 分层SQL查询、SSRS 2008和求和列,ssrs-2008,hierarchical-data,common-table-expression,drilldown,Ssrs 2008,Hierarchical Data,Common Table Expression,Drilldown,我正在编写一份SSRS报告,但在弄清楚如何实施时遇到了一些困难 首先,以下是数据的基本结构: WITH cteTable(id, parentId, data, level) AS (SELECT id, parentId, data, 1 AS level FROM sampleTable WHERE (parentId = 0) UNION ALL SELECT b.id, b.parentId,

我正在编写一份SSRS报告,但在弄清楚如何实施时遇到了一些困难

首先,以下是数据的基本结构:

WITH cteTable(id, parentId, data, level) AS 
(SELECT id, 
        parentId, 
        data, 
        1 AS level 
FROM sampleTable 
WHERE (parentId = 0) 
UNION ALL 
SELECT b.id, 
       b.parentId, 
       b.data, 
       c.level + 1 AS Expr1 
FROM sampleTable AS b 
INNER JOIN cteTable AS c ON b.parentId= p.id
) 
SELECT id, 
       parentId,  
       data, 
       level 
FROM cteTable
1a级 2a级 2b级 2c级 3a级 1b级 1c级 在数据库中,每个级别都有一个id和一个父id,其中级别1的根父级的所有父id均为0。此外,每个级别都有一个带有数值的列。例如,我可能有:

Level1a
ParentId = 0
Id = 1
DataValue = 42

Level2a
ParentId = 1
Id = 2
DataValue = 1
目前,我已经实现了一个通用表表达式来获取数据的层次结构和级别:

WITH cteTable(id, parentId, data, level) AS 
(SELECT id, 
        parentId, 
        data, 
        1 AS level 
FROM sampleTable 
WHERE (parentId = 0) 
UNION ALL 
SELECT b.id, 
       b.parentId, 
       b.data, 
       c.level + 1 AS Expr1 
FROM sampleTable AS b 
INNER JOIN cteTable AS c ON b.parentId= p.id
) 
SELECT id, 
       parentId,  
       data, 
       level 
FROM cteTable
因此,使用前面的示例数据,查询结果将是:

+----+----------+------+-------+
| id | parentId | data | level |
|----+----------+------+-------+
| 1  | 0        | 42   | 1     |
| 2  | 1        | 1    | 2     |
+----+----------+------+-------+
从这里开始,我需要构建一个报告,将数据汇总到根级别。例如,报告将显示id 1的数据和为43。有一件事我不确定,那就是层次到底有多深——有些情况下没有子层次,有些情况下树有几层深

我现在正在考虑两种选择。一种是创建一个向下钻取报告,该报告将显示每个级别的数据以及可用的总和。例如:

-Level1a SUM_LEVEL2_AND_LEVEL1a_DATA
   Level2a DATA
   Level2b DATA
  -Level2c SUM_LEVEL3_AND_LEVEL2c_DATA 
      Level3a DATA
Level1b DATA
Level1c DATA
Level1a SUM_LEVEL1A_AND_ALL_CHILDREN_DATA
Level1b SUM_LEVEL1B_AND_ALL_CHILDREN_DATA
Level1c SUM_LEVEL1C_AND_ALL_CHILDREN_DATA
另一种方法是将数据求和到根,并在报告中显示一个简单的表,其中仅包含父级总计。例如:

-Level1a SUM_LEVEL2_AND_LEVEL1a_DATA
   Level2a DATA
   Level2b DATA
  -Level2c SUM_LEVEL3_AND_LEVEL2c_DATA 
      Level3a DATA
Level1b DATA
Level1c DATA
Level1a SUM_LEVEL1A_AND_ALL_CHILDREN_DATA
Level1b SUM_LEVEL1B_AND_ALL_CHILDREN_DATA
Level1c SUM_LEVEL1C_AND_ALL_CHILDREN_DATA
我似乎不知道如何让深入调查报告与我所做的谷歌搜索一起工作。有一个链接似乎很有用,但我就是无法让它工作

更改数据库架构不是一个选项

有没有人知道我可以使用什么好的资源来开始,或者对如何进行这项工作有什么想法


如果我遗漏了什么,请告诉我。

我终于找到了解决方案

通用表表达式CTE是一个良好的开端。我对它所做的唯一更改是在递归定义中——我没有为每个孩子收集直系父代的id,而是为它分配了祖父母的id,即直系父代拥有的父代id。这意味着每个孩子都被分配了最终的父id,而不是在层次结构中只向上移动一步。从那时起,在报告中使用这一点非常简单

我将CTE放在自己的存储过程中—唯一的目的是恢复整个层次结构。从那里,我创建了另一个存储过程,它将CTE与另一个存储过程相结合。此时,我应用了过滤器并返回了最终结果集