【发布时间】: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