powerbi - 类别内的 DAX RANKX
问题描述
如何计算类别内的排名?假设我们有具有以下预期结果的样本数据:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcisqzSwpVtJRSiwoyEkF0oZgHKuDJJWUmAeEQIYJEBuhypXn56QlpRYVVQLZpkBsjCqdnAGVMwNrB8mFpaanliQm5aSC5AvySxJL8lGsRZFPTiwqyi8BWwuzGkU+Py8zPw9Im0OsjgUA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Category = _t, Subcategory = _t, Sales = _t, Results = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Category", type text}, {"Subcategory", type text}, {"Sales", Int64.Type}, {"Results", Int64.Type}})
in
#"Changed Type"
我在那里漫游寻找提示。根据那里显示的模式,我能够编写以下代码:
Rank within category =
RANKX (
FILTER (
ALL (
'MyTable'[Category],
'MyTable'[Subcategory]
),
'MyTable'[Category]
= MAX ( 'MyTable'[Category] )
),
CALCULATE (
SUM ( 'MyTable'[Sales] )
)
)
上面的代码产生了预期的结果,但我不知道它是如何工作的。你能解释一下吗?
更新。
我在这里找到了另一种简单的方法,它有几行优雅的线条,但同样,它的工作逻辑对我来说仍然是一个令人费解的谜语。你能解释一下吗?
Rank within category using variables =
VAR TotalSalesThisItem = [SalesMeasure] // a variable to hold each item's sales
// now count how many items have sales which match or exceed this
RETURN
COUNTROWS (
FILTER (
ALL ( MyTable[Subcategory] ),
[SalesMeasure] >= TotalSalesThisItem
)
)
这段代码的神秘之处在于它如何知道类别是什么?代码仅提及子类别列。然而,它产生了预期的结果。
解决方案
老实说,要完成您想要的事情,这似乎非常复杂且不直观。我重新创建了您的表格(感谢您包含 M 代码!)并编写了以下计算表格:
Ranked =
RANKX (
FILTER (
Table5,
Table5[Category]
= EARLIER ( Table5[Category] )
),
Table5[Sales],
,
ASC,
DENSE
)
这将提供与结果列相同的输出。这里发生的事情是我给它一个改变的表,基于一个 FILTER 语句,我将 RANKX 操作限制为该类别的所有行。EARLIER() 指的是计算中上一级的列(它针对每一行进行评估,使用 EARLIER 您可以引用该行上的不同列)。
如果这对您有帮助,请将其标记为解决方案:)
推荐阅读
- simulation - 如何为 webbots 组件添加动作?.motion 文件的规格如何?
- python - 在进行每通道量化时,TensorFlow 的 QAT 不适用于 LastValue 或 MovingAverage 量化器
- python - 如何在python中获取混合分布数组?
- c++ - 强制派生类覆盖一组虚函数中的一个
- java - 简单 CRUD 方法上的休眠 ArrayIndexOutOfBoundsException
- reactjs - 使用 React Navigation 时如何清理 React Native 中的 useEffect?
- php - 使现有的 htaccess 重写规则与 php-fpm 兼容
- python - Python中加速度计的快速傅里叶变换
- java - JUnit Test - ParameterizedTests - '没有将 java.lang.Integer 类型隐式转换为 [Ljava.lang.Integer;'
- javascript - 预配置文本