递归Tablix中不同的SUM

时间:2019-05-25 05:35:50

标签: sql reporting-services

我需要按用户报告销售总额,并包括递归总数。问题是,每个客户都有2个客户经理,而这些客户经理可以来自不同的团队。在每个父级,我要返回组级每个相关帐户的不同总和。

例如:

Name          LEVEL       AccountNum        Sales
James         1           A1                1000
                          A2                2000
                          A3                5000
Mike          2           A1                1000
                          A2                2000
Sally         3           A1                1000
John          3           A1                1000
Mary          3           A2                2000
Matt          2           A2                2000
                          A3                5000  
Andy          3           A2                2000
                          A3                5000
 Bob          3           A3                5000

我只想返回总计,而不显示帐户详细信息:

Name            Sales
James           8000
Mike            3000
Sally           1000
John            1000
Mary            2000 
Matt            7000
Andy            7000
Bob             5000

我是SSRS的相对新手,因此非常感谢您提供有关如何实现上述小组总数的建议!谢谢!

我尝试在SQL中使用递归查询,但由于跨团队帐户的原因,总数只能达到2级。按等级使用分区也只能在第2级使用。(例如 {row_number() over (partition by AccountNum, TeamLeaderKey ORDER BY AccountNum ASC))}),以排除排名大于1的任何客户。当存在来自不同级别2的不同团队的客户经理时,级别1下降。

1 个答案:

答案 0 :(得分:0)

万一其他人遇到此问题,这就是我解决的方法。我在数据集中引入了两个新字段: 团队内排名:

Case When ROW_NUMBER() OVER (PARTITION BY AccountNum, TeamLeaderKey ORDER BY AccountNum ASC) > 1 Then 0 Else 1 End

InterTeamRank:

Case When ROW_NUMBER() OVER (PARTITION BY AccountNum ORDER BY AccountNum ASC) > 1 Then 0 Else 1 End

我在SSRS中设置了一个参数以返回最大水平。

然后我在SSRS中使用以下表达式:

IIf( Level() < (Parameters!MaxLevel.Value - 1),
  SUM((Fields!InterTeamRank.Value * Fields!Amount.Value), "StaffName", Recursive),
IIf( Level() = (Parameters!MaxLevel.Value - 1),
  SUM((Fields!IntraTeamRank.Value * Fields!Amount.Value), "StaffName", Recursive),
  SUM(Fields!Amount.Value), "StaffName")
)
)

也许不是最优雅的解决方案,但它可以达到我的目的。如果在区域之间(而不是团队之间)共享一个帐户,则可能会中断,但是在我的情况下这不太可能。我仍然想知道是否有人有更强大的解决方案。