【问题标题】:Sum totals of parent-child relationship in SSRSSSRS中父子关系的总和
【发布时间】:2014-05-22 16:14:54
【问题描述】:

有一个名为 DimAufbau 的表

如您所见,此表使用“关系”字段保存父子关系来保存父级的 id。

此表中的每个节点都可以持有更多节点或持有账户。

如您所见,Betriebliche 关联了一些帐户,但 Erlöse 和 GuV 不能拥有帐户(实际上这是我使用 SSAS 发现的限制,但现在这不是问题)

DimAufabu 和 Accounts 之间的关联如下:

现在,问题来了:我们有一个名为 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 知识有限。希望有人可以帮助我。

【问题讨论】:

标签: sql sql-server reporting-services


【解决方案1】:

显然,您的查询仅使用 CTE 来构建基于 DimAufbau 表中的自引用结构的逻辑树。

如果不将数据添加到查询中,没有最佳方法可以获取叶值聚合(来自 Accounts)。

但是,您提到最终输出中没有 Account 表关系。 所以你的输出如下:

  1. id - 树节点 ID
  2. da.relation - 树自引用(对父级的引用)
  3. da.Bezeichnung - 树节点名称
  4. tr.AufbauLevel - 树节点级别
  5. fk.BetragIst - 未知?
  6. fk.BetragPlan - 未知?
  7. dkbez.Bezeichnung - 树节点 konto 描述(叶子描述?)

我在您的报告中没有看到任何与“总计”相关的内容,因此必须有另一个数据源或其他东西来聚合/输出该列中的数据。

最后,如果您想在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多