假设我有一个表如下:
TableA =
DATATABLE (
    "Year", INTEGER,
    "Group", STRING,
    "Value", DOUBLE,
    {
        { 2015, "A", 2 },
        { 2015, "B", 8 },
        { 2016, "A", 9 },
        { 2016, "B", 3 },
        { 2016, "C", 7 },
        { 2017, "B", 5 },
        { 2018, "B", 6 },
        { 2018, "D", 7 }
    }
)
我想要一个Group基于它Value在Year过滤器上下文内部或外部工作的返回顶部的度量。也就是说,它可以在这样的矩阵视觉中使用(包括 Total 行):
使用 DAX 不难找到最大值:
MaxValue = MAX(TableA[Value])
或者
MaxValue = MAXX(TableA, TableA[Value])
但是,查找Group与该值对应的 的最佳方法是什么?
我试过这个:
Top Group = LOOKUPVALUE(TableA[Group],
                TableA[Year], MAX(TableA[Year]),
                TableA[Value], MAX(TableA[Value]))
但是,这对 Total 行不起作用,Year如果可能的话,我宁愿不必在度量中使用 the (在实际场景中可能还有其他列需要担心)。
注意:我在下面的答案中提供了几个解决方案,但我也很想看到任何其他方法。
理想情况下,如果函数中有一个额外的参数MAXX来指定在找到最大值后返回哪一列,这会很好,就像MAXIFS Excel 函数所具有的那样。
另一种方法是通过使用该TOPN函数。
该TOPN函数返回整行而不是单个值。例如,代码
TOPN(1, TableA, TableA[Value])
返回TableAordered by的前1 行TableA[Value]。Group与顶部关联的值Value在行中,但我们需要能够访问它。有几种可能性。
使用MAXX:
Top Group = MAXX(TOPN(1, TableA, TableA[Value]), TableA[Group])
这将在第一个参数Group的TOPN表中找到最大值。(只有一个Group值,但这允许我们将表转换为单个值。)
使用SELECTCOLUMNS:
Top Group = SELECTCOLUMNS(TOPN(1, TableA, TableA[Value]), "Group", TableA[Group])
此函数通常返回一个表(具有指定的列),但在这种情况下,它是一个单行单列的表,这意味着 DAX 将其解释为一个常规值。
另一种方法是使用 DAX 系列的最新成员:窗口函数,在本例中我们将使用 INDEX() 函数。
   CALCULATE ( 
        MAX(TableA[Group] ), 
            INDEX ( 
                1,   
                ORDERBY (TableA[Value] , DESC), 
                 PARTITIONBY ( TableA[Year] )
            ) 
    )
| 归档时间: | 
 | 
| 查看次数: | 3646 次 | 
| 最近记录: |