SSRS中亲子关系的总和

时间:2014-05-22 07:30:59

标签: sql sql-server reporting-services

下表名为DimAufbau

enter image description here

如您所见,此表使用“关系”字段保存父子关系,以保存父项的ID。

此表中的每个节点可以容纳更多节点或保留帐户。

enter image description here

正如你所看到的,Betriebliche有一些帐户关联,但是Erlöse和GuV无法拥有帐户(实际上这是我使用SSAS发现的限制,但现在它不是问题)

DimAufabu与账户之间的关联如下:

enter image description here

现在,问题:我们有一个名为ReportKore的SSRS报告,必须显示Aufbau表的树结构,显示某些字段的总和。

enter image description here

填充该报告的数据集使用以下查询,但它没有显示父母点头的总和,因为他们没有帐户关联:

;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知识是有限的。希望有人能帮助我。

1 个答案:

答案 0 :(得分:0)

显然,您的查询仅使用CTE根据DimAufbau表中的自引用结构构造逻辑树。

在没有将该数据添加到查询中的情况下,没有最佳方式来获取叶值聚合(来自帐户)。

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

  1. id - 树节点ID
  2. da.relation - 树自我引用(对父级的引用)
  3. da.Bezeichnung - 树节点名称
  4. tr.AufbauLevel - 树节点级别
  5. fk.BetragIst - 未知?
  6. fk.BetragPlan - 未知?
  7. dkbez.Bezeichnung - 树节点konto描述(叶子描述?)
  8. 我没有看到任何与" 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