1

我有一个 Reporting Services 报告,其中显示了一堆 KPI 分数。每个 KPI 在报告中都有自己的行,对于每一行,我们显示过去 3 年的 SUM 或 AVG(取决于 KPI 类型)得分,然后是当年每月的 SUM、AVG 或(理想情况下)总 YTD 数字:

KPI                     2009 2010 2011  Jan Feb Mar Apr May etc.
Bagels Eaten (Total)    100   90    70  10  20  9   13  14
Sandwiches (Cumm. YTD)  90    75    86  13  23  46  65  76

我看到的问题是RunningValue函数似乎跨行工作,而不是在过滤的列组和构成 Jan、Feb、Mar 列的当前行内(每月数据,按年和月分组,过滤今年)。所以输出与上面不同,而是基于行中所有值的相当随机的数字(我确信它不是随机的,它看起来就是这样)。

列组称为“MonthNum”,单元格值的表达式根据源数据中的“AggregationType”值决定应用哪个聚合:

=Switch(Fields!AggregationType.Value="SUM", Sum(Fields!ScoreValue.Value), 
       Fields!AggregationType.Value="AVG", Avg(Fields!ScoreValue.Value), 
       Fields!AggregationType.Value="YTD", 
       RunningValue(Fields!ScoreValue.Value,Sum,"MonthNum"))

非常感谢任何帮助

更新: 这是正在使用的数据集的几行示例(每月得分,每 kpi)(格式有点棘手!)。聚合类型为“YTD”的项目将应用累积 YTD 表达式,其他所有内容均为当月的 SUM:

KpiID   Title   KPIOwner    ScoreValue  YearNum MonthNum    ReportingGroupTitle ScoreType   DisplayOrder    DisplayPrecision    UnitOfMeasure   AggregationType
5   Donuts Served   Donut Manager   35  2007    1   Catering Services   Actual  10020   0   Number  YTD
5   Donuts Served   Donut Manager   42  2007    2   Catering Services   Actual  10020   0   Number  YTD
5   Donuts Served   Donut Manager   86  2007    3   Catering Services   Actual  10020   0   Number  YTD
5   Donuts Served   Donut Manager   14  2007    4   Catering Services   Actual  10020   0   Number  YTD
6   Donuts Cooked   Donut Manager   45  2007    1   Catering Services   Actual  10020   0   Number  SUM
6   Donuts Cooked   Donut Manager   48  2007    2   Catering Services   Actual  10020   0   Number  SUM
6   Donuts Cooked   Donut Manager   93  2007    3   Catering Services   Actual  10020   0   Number  SUM
6   Donuts Cooked   Donut Manager   32  2007    4   Catering Services   Actual  10020   0   Number  SUM
6   Donuts Cooked   Donut Manager   18  2007    5   Catering Services   Actual  10020   0   Number  SUM
4

1 回答 1

1

根据我从您的问题中了解到的情况,我会这样做:

假设当聚合类型 YTD 返回累积总计时,直到(包括)MonthNum。

创建一个矩阵,其中包含两个在 KpiID 上的组和一个在 AggregationType 上的子组,以及两个列组(相邻),一个在年份上,一个在月份上(在年份组上,创建一个过滤器,以便您不包括当前年和月组排除年份不是当前年份的值)。

然后,您可以对年份和月份组使用以下表达式(最后一个将为您提供每年最后一个月的 YTD 值)

=Switch(Fields!AggregationType.Value="SUM", Sum(Fields!ScoreValue.Value), 
       Fields!AggregationType.Value="AVG", Avg(Fields!ScoreValue.Value), 
       Fields!AggregationType.Value="YTD", Last(Fields!ScoreValue.Value))
于 2012-10-02T17:49:15.183 回答