下表名为DimAufbau
如您所见,此表使用“关系”字段保存父子关系,以保存父项的ID。
此表中的每个节点可以容纳更多节点或保留帐户。
正如你所看到的,Betriebliche有一些帐户关联,但是Erlöse和GuV无法拥有帐户(实际上这是我使用SSAS发现的限制,但现在它不是问题)
DimAufabu与账户之间的关联如下:
现在,问题:我们有一个名为ReportKore的SSRS报告,必须显示Aufbau表的树结构,显示某些字段的总和。
填充该报告的数据集使用以下查询,但它没有显示父母点头的总和,因为他们没有帐户关联:
;WITH aufbautree(id, relation, Bezeichnung, AufbauLevel) AS (
SELECT
id,
relation,
Bezeichnung,
1 AufbauLevel
FROM [dbo].[DimAufbau]
WHERE
relation IS NULL
and ([DimAufbau].id in (@aufbau))
UNION ALL
SELECT
da.id,
da.relation,
da.Bezeichnung,
tr.AufbauLevel + 1
FROM
[dbo].[DimAufbau] da
INNER JOIN aufbautree tr
ON da.relation = tr.id)
SELECT
at.*,
fk.BetragIst,
fk.BetragPlan,
dkbez.Bezeichnung AS KontoBezeichnung
FROM
aufbautree at
LEFT JOIN DimAufbauKonto auk
ON auk.AufbauId = at.id
LEFT JOIN DimKonto dk
ON auk.KontoID = dk.id
LEFT JOIN DimKontoBezeichnung AS dkbez
ON dkbez.Id = dk.BezeichnungId
LEFT JOIN FaktKore fk
ON fk.DimKontoId = dk.id
LEFT JOIN DimKostenstelle AS dko
ON fk.DimKostenstelleId = dko.Id
LEFT JOIN DimMandant AS dm
ON fk.DimMandantId = dm.Id
LEFT JOIN DimZeit AS dz
ON fk.DimZeitId = dz.Id
我真的尝试了很多方法来看看如何显示父节点的总和,但我的CTE知识是有限的。希望有人能帮助我。
答案 0 :(得分:0)
显然,您的查询仅使用CTE根据DimAufbau表中的自引用结构构造逻辑树。
在没有将该数据添加到查询中的情况下,没有最佳方式来获取叶值聚合(来自帐户)。
但是,您提到最终输出中没有Account表关系。 所以你在输出中的内容如下:
我没有看到任何与" Total"相关的内容。在您的报告中,所以必须有另一个数据源或其他聚合/输出该列数据的内容。
最后,如果要从SQL查询中的Accounts表中获取数据,则必须在查询中加入该表。它不一定要在CTE机构中,但我不确定它是否是最佳的。
以下是您可以使用的方案:
;WITH aufbautree(id, relation, Bezeichnung, AufbauLevel) AS (
...
)
SELECT
at.*,
...,
sum(a.YourValueField) as ValueSum
FROM
aufbautree at
JOIN ...
LEFT JOIN Accounts a
ON {your condition}
GROUP BY at.Id
如果您需要一个示例this link may help you。