You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power BI的DAX SWITCH度量值中添加行上下文?

解决方案:利用矩阵行上下文+DAX度量值实现31天类甘特图

1. 准备维度表

先创建一个包含1-31日的维度表,作为矩阵的列字段:

DayOfMonth = GENERATESERIES(1, 31)

2. 编写核心度量值(替代31个单独度量值)

无需手动创建31个度量值,写一个通用度量值即可自动适配所有日期列:

Gantt_Marker = 
VAR Current_Day = SELECTEDVALUE(DayOfMonth[Value])
// 提取当前行事件的开始日、结束日(矩阵行上下文自动锁定当前Title对应的记录)
VAR Event_Start_Day = DAY(SELECTEDVALUE(Test_Table[StartDate]))
VAR Event_End_Day = DAY(SELECTEDVALUE(Test_Table[EndDate]))
RETURN
// 根据日期范围判断返回标记字符串或空值
SWITCH(
    TRUE(),
    // 日期在事件范围内显示标记
    Current_Day >= Event_Start_Day && Current_Day <= Event_End_Day, "■",
    // 可选:单独标记开始/结束日
    Current_Day = Event_Start_Day, "【开始】",
    Current_Day = Event_End_Day, "【结束】",
    BLANK()
)

3. 配置矩阵可视化

  • 行字段:添加Test_Table[Title]
  • 列字段:添加DayOfMonth[Value]
  • 值字段:添加Gantt_Marker

关键问题说明

  • 解决"无法确定单一值"报错:矩阵的行上下文会自动锁定当前Title对应的记录,SELECTEDVALUE能精准提取该行的StartDate和EndDate日部分,避免多值冲突。
  • 多日期范围适配:如果单个Title对应多个日期区间,将SELECTEDVALUE替换为MIN(Test_Table[StartDate])和MAX(Test_Table[EndDate]),取事件的最早开始日和最晚结束日。
  • 性能优势:相比M代码生成31个计算列,度量值仅在矩阵渲染时计算当前可见单元格,性能大幅提升。

内容的提问来源于stack exchange,提问作者OPLost4Ages

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:56:23