我正在寻找一种方法,使用度量来根据另一列中的唯一值连接一列字符串值,以显示在数据透视表上,并进行适当的过滤。以下是我最近的尝试,目前返回错误。
我只能在 Excel 中使用 DAX,而不使用 PowerPivot,因为这需要与未安装 PowerPivot 的同事共享。
=VAR Var1 = SELECTCOLUMNS(DISTINCT(Range[Col1]), "UHD", Range[Col2])
Return
CONCATENATEX(SUMMARIZE(FILTER(Range, Range[Col2] IN Var1),Range[Col1]),Range[Col1],", ")
我尝试了各种过滤方法,但是当我抓住 Col2 进行连接时,行上下文似乎永远不会粘住,并且它总是在没有过滤器的情况下输出。
第 1 栏 | 第 2 栏 | 第 3 栏 | 第 4 栏 |
---|---|---|---|
5 | 5a 到 9 | 是的 | 姓名1 |
5 | 5b 到 9 | 没有 | 姓名1 |
5 | 5c 到 9 | 是的 | 姓名2 |
6 | 6a 到 9 | 是的 | 姓名2 |
6 | 6b 到 9 | 是的 | 姓名2 |
7 | 7a 到 9 | 没有 | 姓名3 |
7 | 7b 到 9 | 是的 | 姓名3 |
8 | 8a 到 9 | 没有 | 姓名3 |
输出枢轴
第 4 栏 | 测量输出 |
---|---|
姓名1 | “5a x 9” |
姓名2 | “5c x 9,6b x 9” |
姓名3 | “7b x 9” |
Col3上的过滤可以在pivot中完成
所以这是我在DAX中的想法,但在我看来我认为这种需求应该在Power Query中实现。我将在 DAX 和 Power Query 中提供解决方案。
使用DAX:
Measure Output =
VAR CurrentName = MAX('Range'[Col4])
VAR FilteredRange = FILTER(
'Range',
'Range'[Col4] = CurrentName && 'Range'[Col3] = "Yes"
)
VAR SummaryRange = SUMMARIZE(
FilteredRange,
'Range'[Col1],
'Range'[Col4],
"UniqueConcatCol2", CONCATENATEX(
DISTINCT(FILTER(FilteredRange, 'Range'[Col1] = EARLIER('Range'[Col1]))),
'Range'[Col2], ", "
)
)
RETURN
CONCATENATEX(
SummaryRange,
[UniqueConcatCol2],
", "
)
使用电源查询:
所以首先我过滤了数据 Col3 = Yes :
然后对于分组依据,我使用 Col4 作为按数据分组的列:
然后我选择“所有行”来创建共享相同 Col4 的所有行的子表。
然后我使用自定义列将新列添加到子表中:
我删除了原来的第 4 栏,然后删除了重复的行: