我正在构建一个 SSRS 报告,但在弄清楚如何实施它时遇到了一些麻烦。
首先,这里是数据的基本结构:
- 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
我似乎无法弄清楚如何让钻取报告与我所做的谷歌搜索一起工作(这里有一个链接似乎很有用,但我就是无法让它工作)。
更改数据库架构不是一种选择。
有谁知道我可以用来开始使用的任何好的资源,或者对如何进行此操作有任何想法?
如果我遗漏了什么,请告诉我...