Power BI中CONCATENATEX()不响应Data Segmentation筛选的问题咨询
问题分析与解决方案
核心问题
- 原DAX中
FILTER(Tasks, [cr8a4_ticket] = Tasks[GUIDTicket])的写法属于在Tasks表内部自关联,会忽略外部的筛选上下文(比如Data Segmentation视觉对象的日期筛选),导致所有日期都被保留。 - 如果当前是计算列,计算列仅在数据刷新时生成,不会响应报表视觉对象的动态交互筛选,这也是筛选失效的关键原因之一。
推荐方案:改用度量值(支持交互筛选)
要让Data Segmentation的筛选生效,必须使用度量值(而非计算列),利用已有的一对多关系自动继承筛选上下文:
Attention Dates = CONCATENATEX ( // 自动继承主表行关联关系+外部筛选,同时去重日期 VALUES ( Tasks[DateTask] ), " - " & FORMAT ( Tasks[DateTask], "dd/mm/yyyy" ), UNICHAR(10) // 用换行符实现列表格式 )
代码说明
VALUES(Tasks[DateTask])替代原有的SUMMARIZE+FILTER,既保留日期去重的效果,又能自动适配主表行上下文的关联,同时尊重外部的日期筛选。FORMAT函数替代手动拼接日/月/年,格式更简洁可靠。UNICHAR(10)作为分隔符,实现你需要的换行列表样式。
备选方案:计算列(仅支持模型级筛选)
如果必须在主表创建计算列,只能响应模型级/报表级筛选(无法支持视觉对象的交互筛选),修正后的DAX如下:
Attention Dates = VAR CurrentTicket = [GUIDTicket] RETURN CONCATENATEX ( FILTER ( ALLSELECTED(Tasks), // 保留模型级筛选上下文 Tasks[cr8a4_ticket] = CurrentTicket ), " - " & FORMAT ( Tasks[DateTask], "dd/mm/yyyy" ), UNICHAR(10) )
注意
计算列不会随视觉对象的交互动态更新,因此如果需要Data Segmentation的实时筛选效果,必须使用度量值方案。
内容的提问来源于stack exchange,提问作者Rodrigo Laos
相关产品推荐
相关产品推荐

