稀疏人口百分比值的“平均”聚合

时间:2013-07-18 14:24:02

标签: ssas aggregate-functions cube dimensional-modeling

我的成本中心分配数据目前已完全填充,每天一条记录,每条记录都有一个成本中心维度键。多维数据集具有头计数度量(数据设置为“1”),并且聚合函数设置为“LastChild”。这意味着人头统计报告将在任何给定时间段内仅在一个成本中心计算一次人。

引入部分分配 - 新措施将具有分配的百分比值,允许多个并发成本中心,其中分配应加起来为100%(“天”为粒度级别)。我试图弄清楚如何在其他时间段配置聚合。我认为“平均”应该可以正常工作,即在一段时间内分配到成本中心50%的人将在该期间以25%报告。 我看到的问题是,在成本中心的分配为0%的情况下,我的事实并未填充。举例说明:

Employee1 CostCenterA 1/1/2013 50%
Employee1 CostCenterB 1/1/2013 50%
Employee1 CostCenterA 1/2/2013 100%
Employee1 CostCenterA 1/3/2013 100%
... etc with 100% in CostCenterA for all days 

上述按月报告的数据显示,对CostCenterB的分配为50%,即使该人只分配了一天,而且每月的平均百分比应为1.6%。

我想我可以在数据中生成0%-allocations,但是我的事实表会因此而爆炸,所以我更愿意改变“平均”聚合如何处理人口稀少的事实中的百分比值,即平均值应根据报告期间的粒度单位数(月中的天数,本例中为0.5 / 31)计算,而不是根据事实表中的行数(0.5 / 1)计算。这可以在SSAS中完成吗?

1 个答案:

答案 0 :(得分:2)

如果平均分配的度量偏离了与我的事实的“稀疏性”成比例的因子,即一个时期中的天数与实际事实行的比率,则可以如下修正:

adjusted average allocation = 
  (calculated average allocation) * (fact count)/(number of days in period)

我创建了两个新的隐藏度量,一个名为[Fact Count],用于事实计数(一个使用AggregateFunction测量“Count”)和一个名为[Days In Period Count]的计算度量,使用表达式

COUNT(Descendants([Date].[Calendar].CurrentMember,5),INCLUDEEMPTY)

,[日历]是我的日期维度中层次结构的名称。

最后,我添加了一个实施纠正公式的计算度量:

[Measures].[Allocative Head Count]/
(
    [Measures].[Days In Period Count]/[Measures].[Fact Count]
)

并将其命名为[调整后的平均分配]。我现在可以在报告中使用它,它似乎在一定程度上接近较长时期内的平均成本中心分配。

[Days In Period Count]的公式btw在涉及过滤器时不适用于行总计。我为此打开了another question