使用DAX度量值筛选数据透视表并拼接指定列内容
Excel DAX度量值实现带筛选的字符串拼接
需求
在Excel中仅使用DAX创建度量值,基于Col1的唯一值拼接Col2的内容,且该度量值能配合数据透视表的筛选(如Col3的筛选)生效,无需依赖PowerPivot。
尝试的错误DAX代码
=VAR Var1 = SELECTCOLUMNS(DISTINCT(Range[Col1]), "UHD", Range[Col2]) Return CONCATENATEX(SUMMARIZE(FILTER(Range, Range[Col2] IN Var1),Range[Col1]),Range[Col1],", ")
源数据
| Col1 | Col2 | Col3 | Col4 |
|---|---|---|---|
| 5 | 5a By 9 | Yes | Name 1 |
| 5 | 5b By 9 | No | Name 1 |
| 5 | 5c By 9 | Yes | Name 2 |
| 6 | 6a By 9 | Yes | Name 2 |
| 6 | 6b By 9 | Yes | Name 2 |
| 7 | 7a By 9 | No | Name 3 |
| 7 | 7b By 9 | Yes | Name 3 |
| 8 | 8a By 9 | No | Name 3 |
期望数据透视表输出(Col3筛选为"Yes"时)
| Col4 | Measure Output |
|---|---|
| Name 1 | "5a by 9" |
| Name 2 | "5c by 9, 6b by 9" |
| Name 3 | "7b by 9" |
正确DAX度量值
带筛选的拼接度量值 = VAR 筛选后数据 = FILTER(ALLSELECTED(Range), Range[Col3] = "Yes") VAR 唯一Col1列表 = DISTINCT(SELECTCOLUMNS(筛选后数据, "Col1", Range[Col1])) RETURN CONCATENATEX( ADDCOLUMNS(唯一Col1列表, "对应Col2", CALCULATE(MAX(Range[Col2]), 筛选后数据, Range[Col1] = [Col1]) ), [对应Col2], ", " )
逻辑说明
ALLSELECTED(Range)保留数据透视表当前的筛选上下文(包括Col4的行分组和Col3的筛选),再筛选出Col3="Yes"的行;- 提取筛选后数据中
Col1的唯一值,确保每个Col1只参与一次拼接; - 对每个唯一
Col1,用CALCULATE(MAX(Range[Col2]))获取对应符合条件的Col2值(若一个Col1对应多个符合条件的Col2,MAX会取最后一个,可根据需求替换为MIN或其他聚合函数); - 最后用
CONCATENATEX完成字符串拼接。
内容的提问来源于stack exchange,提问作者Ben Ford
相关产品推荐
相关产品推荐

