【问题标题】:Return the largest category as an extra column or measure in DAX based on calculation and with criteria根据计算和条件将最大类别作为额外列或 DAX 度量返回
【发布时间】:2021-05-24 23:35:30
【问题描述】:

我是 DAX 初学者,在 Excel 中的数据模型上下文中使用它。我有一个包含数万行的大型数据集,分为不同的组,包括记录编号、类别、年份、组名称、位置、状态和许多其他类别的数据。

我想为特定的关键过滤器添加一些特定的计算列,例如每个组中源仍然存在的销售额最大的位置,并且有一个适用于我带入数据透视表的任何字段的度量 (例如,如果我添加了年份、来源、州或任何组合等)

例如,在下面的简化表中,我想计算一个列,该列返回每个按销售额分组的主要位置,但仅包括实时记录。因此,对于 A 组,我会将状态为有效的美国和加拿大的所有销售额相加,然后取最大的类别(A 组为加拿大,B 组为美国)并将其添加为主导位置,如下所示:

Group Location Status Sales Dominant Location
Group A USA Live 500 Canada
Group A USA Disc 250 Canada
Group A USA Disc 290 Canada
Group A Canada Live 875 Canada
Group A Canada Live 115 Canada
Group A USA Live 310 Canada
Group B USA Live 310 USA
Group B UK Live 285 USA
Group B UK Live 705 USA
Group B USA Live 430 USA
Group B USA Live 670 USA

我最初的想法是使用 GroupBy 按位置返回每个组的实时销售表,然后使用 topn 通过实时销售选择最大的位置,然后使用 SelectColumns 返回位置,尽管这似乎不起作用(或编码错误)。以下示例失败尝试:

=SELECTCOLUMNS( TOPN(1, GROUPBY('Table',[Location],"Live Sales",SUMX(CURRENTGROUP(),[Sales]* IF([Status]="Live",1,0)) ),[Live GNWP]) ,"Location",[Live GNWP] )

我已设法使用以下方法将此列与中间计算列添加:

Intermediate=CALCULATE(SUM([Sales]), FILTER('Table', EARLIER([Group]) = [Group] && [Status]="Live" && EARLIER([Location] = [Location])))

然后

=CALCULATE (
    FIRSTNONBLANK (
        TOPN ( 1,
            VALUES ('Table'[Location] ),
            CALCULATE ( MAX ( [Intermediate]) )
        ), 0 ),  ALLEXCEPT ( 'Table','Table'[Group] ) )

这确实可以用作计算列,但是我的实际数据在行数和字段数方面太大,每次我想要一个选择最大类别的新标准时都无法添加额外的中间计算字段。我也无法将此作为衡量标准进行复制,因此希望了解为什么我的初始方法不起作用,以及是否可以一步将此字段生成为计算列,然后再如何使其作为衡量标准发挥作用。

【问题讨论】:

    标签: dax


    【解决方案1】:

    以下是一种无需中间计算列即可编写相应度量的方法:

    Dominant Location = 
    VAR Summary =
        SUMMARIZE (
            FILTER ( ALLEXCEPT ( 'Table', 'Table'[Group] ), 'Table'[Status] = "Live" ),
            'Table'[Location],
            "@SumSales", SUM ( 'Table'[Sales] )
        )
    RETURN
        SELECTCOLUMNS (
            TOPN ( 1, Summary, [@SumSales], DESC ),
            "Location", 'Table'[Location]
        )
    

    【讨论】:

    • 谢谢,就这样!仅针对使用它的人的一点是,它会引发一个错误,其中我包含该组没有实时业务记录的组-尽管一旦我将返回部分包装在 IFERROR 中,它就可以正常工作
    • 这很好用,虽然已经推出了它,但我需要一些额外的错误捕获,这就是方法错误输出的两个类别之间存在确切联系的地方。同样有可能使它动态返回主要位置受应用的任何过滤器 - 例如我有一个年份和一个 Group 类型字段,可以在不为每个组合构建特定字段的情况下添加它
    • 1.尝试使用here 中的 MAXX 方法,而不是 SELECTCOLUMNS。 2. 使用 ALLSELECTED 函数可以做到这一点,但具体细节略超出本文的范围。
    • 谢谢,使用 MAXX 解决了我正在处理的问题。
    猜你喜欢
    • 2021-02-22
    • 2023-02-08
    • 1970-01-01
    • 2021-04-04
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多