gpt4 book ai didi

powerbi - DAX、PowerBI 中的 RANKX() 问题

转载 作者:行者123 更新时间:2023-12-01 10:19:32 32 4
gpt4 key购买 nike

我正在学习 DAX,但对 PowerBI 中的 RANKX() 感到困惑。这是我的数据:

enter image description here

这是我的衡量标准:

Rank = RANKX(
ALL(RankDemo[Sub Category]),
CALCULATE(SUM(RankDemo[My Value])))

这是我的视觉效果:

enter image description here

RANKX() 工作正常,但字段 [My Value] 必须在 PowerBI 字段设置中求和: enter image description here enter image description here

如果我选择Don't Summarize,排名将全部为1。有人可以解释一下吗? Sum 与 DAX 中的 RANKX() 或 CALCULATE() 有什么关系。谢谢。

最佳答案

您遇到的问题与 RANKX 无关。问题在于所谓的“隐式测量”——Power BI 和 Power Pivot 中(不幸的是)一种常见的不良做法。

Power BI 中的数字字段可以充当 2 个角色:

  • 它们可以输入到 DAX 度量中(例如 SUM() 等)
  • 或者它们可以是过滤器(即,提供与视觉对象中的“子类别”相同的功能)。

当您将“我的值”放入表中而不进行任何计算(“不汇总”)时,您是在告诉 Power BI 您希望“我的值”用作筛选器。在 Excel 数据透视表中,它会相当于将“我的值(value)”放入“行”区域而不是“值(value)”。所以表中的每一行现在都按“子类别+我的值(value)”分组,而不仅仅是“子类别”(换句话说,你已经“我的值(value)”是过滤器上下文的一部分)。由于“子类别 + 我的值(value)”的每个组合都是唯一的,因此您实际上是在对包含 1 条记录的表进行排名(这就是它总是返回 1 的原因)。

当您为“我的值”选择“SUM”时,它不再是一个行过滤器,而是一个度量。因此,您现在过滤的上下文不是“子类别”+“我的值”,而只是“子类别”,并且您的 RANKX 公式可以正常工作。您可以通过从表中删除总和的“我的值(value)”轻松地看到这一点 - RANKX 度量仍然以相同的方式工作。

当您对“我的值”使用此“SUM”聚合时,您是在告诉 Power BI 为您隐式创建 DAX 度量(这就是它被称为“隐式度量”的原因)。每当您将数字字段直接放入视觉对象时,都会发生这种情况。由于多种原因,这种隐含措施在经验丰富的设计师中被认为是一种不好的做法,例如:

  • 令人困惑(您对 RANKX 的困扰就是一个典型例子);
  • 您不能重复使用隐式度量(不能在其他 DAX 度量中引用它们)。

解决办法是:

  • 永远不要将数字字段直接放入视觉对象中。
  • 相反,请始终编写 DAX 度量,然后将其放入视觉对象中。

在您的示例中,我将创建一个明确的 DAX 度量:

Total Value = SUM(RankDemo[My Value])

现在您可以在模型中的任何地方使用它。您可以将其放入视觉对象中以查看“我的值(value)”的总和。或者您可以在您的 RANKX 度量中使用它:

Rank = RANKX( ALL(RankDemo[Sub Category]), [Total Value])

这种设计的好处是:

  • 没有隐藏效果(您确切知道 [Total Value] 的作用)
  • 您可以在许多其他公式中使用[总值],而无需一次又一次地编写求和。
  • 如果您更改 [总值] 中的 DAX(例如,添加四舍五入),它将自动更新使用它的所有其他公式。
  • 重复使用 DAX 度量使公式更简洁、更易于理解。

关于powerbi - DAX、PowerBI 中的 RANKX() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55232494/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com