Ssrs 2008 分层SQL查询、SSRS 2008和求和列
我正在编写一份SSRS报告,但在弄清楚如何实施时遇到了一些困难 首先,以下是数据的基本结构: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,
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与另一个存储过程相结合。此时,我应用了过滤器并返回了最终结果集