【问题标题】:PowerPivot - SUM of Aggregated Averages Not CorrectPowerPivot - 聚合平均值的总和不正确
【发布时间】:2018-03-23 09:15:09
【问题描述】:

我试图通过 PowerPivot 的数据透视表显示我们招聘流程各个部分的平均持续时间。因此,例如,作为整个过程的一部分,您将能够看到候选人处于“面试”阶段的平均时间。我正在使用 AppDuration 的事实表按候选人、职位和持续时间进行细分。以下是数据示例:

RequisitionID    CandidateID      Req-CandidateKey   HireStatus     Duration
555              111              555_111            App Review     3
555              111              555_111            Phone Screen   5
555              111              555_111            Interview      7
555              222              555_222            Phone Screen   10
666              333              666_333            App Review     12
666              333              666_333            Phone Screen   15
666              444              666_444            App Review     5
666              444              666_444            Phone Screen   4
666              444              666_444            Offer Extend   15

我还有一个查找表 StatusMaster 来对各种 HireStatus 值进行分组

HireStatus     StatusCategory
App Review     Initial
Phone Screen   Intermediate
Interview      Intermediate
Offer          Final

AppDuration 和 StatusMaster 通过 HireStatus 上的关系连接。我想检查 StatusCategory 级别的平均持续时间。

我的想法是我首先需要对申请-候选人组合的不同实例进行计数,因此我创建了度量

DistinctReqApplicants:=DISTINCTCOUNT(AppDuration[Req-CandidateKey])

然后对 Duration 字段求和

DurationTotal:=SUM(AppDuration[Duration])

然后把两者分开

CandidateAvgDur:=DIVIDE([DurationTotal], [DistinctReqApplicants])

然后我创建一个数据透视表,其中将 CandidateAvgDuration 放入值中,将 StatusCategory 放入行中。但问题是总计不等于类别平均值的总和

在我的结果中,当您总结各个类别时,总计应该是 38.3,但实际上是 23.0。我没有应用任何其他过滤器。我很困惑,因为根据我查找的示例和我在这里引用的帖子,这似乎很简单。但是,当谈到 PowerPivot 时,我完全是个菜鸟,所以我确信我缺乏经验是在这里工作的。任何帮助或建议表示赞赏。

【问题讨论】:

  • 如果总持续时间为 3+5+7+10+12+15+5+4+15 = 76 并且您有 4 个不同的候选人,那么我希望您的平均为 76/4 = 19. 为什么你认为应该是 38.3?
  • 对不起,预期总数基于我的整个数据集。帖子中包含的数据只是其中的一个示例。问题实际上是总计与类别平均值之和之间的不匹配。
  • 一般来说,求平均值的总和不等于取整体平均值,也不应该这样。这篇文章可能有用:powerpivotpro.com/2012/03/…
  • 感谢您的回复@AlexisOlson。我已经阅读了这篇文章,虽然我理解在平均值方面需要行迭代,但我不能说我完全理解是什么驱动了对 IF(COUNTROWS()) 的需求,因为链接的文章对菜鸟来说并不完全清楚比如我自己。也不确定为什么 GregGalloway(下)的答案在没有任何 IF(COUNTROWS()) 功能的情况下有效。
  • 这是因为他们对两种不同的场景使用了两种不同的计算:一种用于单行计算,另一种用于多行计算。在许多情况下,当多行计算在单行的筛选上下文中进行计算时,它会解析为单行情况,但情况并非总是如此。如果多行计算不归结为单行计算,则需要IF函数。

标签: powerpivot


【解决方案1】:

请试试这个:

CandidateAvgDur:=SUMX(
 VALUES(AppDuration[HireStatus]),
 DIVIDE([DurationTotal], [DistinctReqApplicants])
)

申请候选人是否可以在每个 HireStatus 中拥有不止一行。如果不是,则将 DistinctReqApplicants 度量更改为 COUNTROWS(AppDuration) 以提高性能。

【讨论】:

  • 谢谢@GregGalloway。我相信这个措施几乎给了我我正在寻找的东西。我相信我需要进行一项修改。由于我正在查看相关 StatusMaster 表中 [StatusCategory] ​​级别的平均值,而不仅仅是 [HireStatus] 级别,我相信 VALUES 函数应该是 VALUES(StatusMaster[StatusCategory]) 非常感谢。
猜你喜欢
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2014-09-07
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
相关资源
最近更新 更多