由于 "Single value for column XX in table YY cannot be determined",RANKX 无法正常工作

RANKX not working due to "Single value for column XX in table YY cannot be determined"

我正在尝试插入一个列,该列从最大值开始到最小值连续汇总来自另一列的所有值(这里是来自 GrossMargeEUR 的值)。 为了实现这一点,我找到了一个似乎为我的问题提供解决方案的视频:

https://www.youtube.com/watch?v=f5k4fD1YJrQ&ab_channel=EnterpriseDNA

但是,由于 RANKX 在我的示例中不适用,因此我无法复制此解决方案。使用 RANKX 创建度量会触发错误消息

A single value for column 'GrossMargeEUR' in table 'Table1' cannot be determined. This can happen when a measure formula refers to a column that contains many values without specifying an aggregation such as min, max, count, or sum to get a single result.

我不确定此消息的含义,因为我的第一列中没有遗漏任何值。为什么不能在这里引入一个合适的排名,然后可以用来创建一个累积总和列?有人可以帮忙吗?

RANKX 函数需要以下内容:

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])  

您传递的是列引用而不是表达式,因此首先创建您的排名度量,如下所示:

SalesRank = 
    RANKX(ALLSELECTED('Table'[Product]), 
        CALCULATE(SUM('Table'[Sales])) 
        + DIVIDE (
            RANKX (
                ALLSELECTED ( 'Table'[Product] ),
                    CALCULATE ( MIN ( 'Table'[Product] ) ),
                    ,DESC,DENSE
            ),
            100),,DESC)

当 2 个产品的销售额相同时,+ DIVIDE 可以打破平局。

一旦你有了上面的衡量标准,你就可以像这样计算你的累计总数:

Cumulative = 
  VAR crank = [SalesRank]
  RETURN SUMX(
      FILTER(
      SUMMARIZE(
          ALLSELECTED('Table'[Product]),
          'Table'[Product],
          "sales", SUM('Table'[TotalSales]),
          "rank", [SalesRank]
      ), [rank] <= crank), [sales])

所以您将该产品的排名保存在一个变量中,然后将 SUMX 与计算得出的 table 一起使用,其中包含达到该排名的所有产品。