Power BI中使用IF函数按小时划分时段的错误排查与修正
解决DAX时段划分逻辑错误的问题
你的DAX代码存在两个核心问题:
- 列名混用:代码里交替使用
'cmu_viagens_dw cmu_vgm'[time]和'cmu_viagens_dw cmu_vgm'[hour],必须统一使用存储小时数的列(假设是[hour],如果实际是[time]就替换成对应列名) - 条件逻辑顺序错误:第一个IF判断
>=6就直接返回"Morning Period",导致所有大于等于6的小时都会被归类为上午,后续的下午、夜间条件永远不会执行
正确的嵌套IF写法
Periods = IF( 'cmu_viagens_dw cmu_vgm'[hour] >= 6 && 'cmu_viagens_dw cmu_vgm'[hour] < 12, "Morning Period", IF( 'cmu_viagens_dw cmu_vgm'[hour] >= 12 && 'cmu_viagens_dw cmu_vgm'[hour] < 18, "Afternoon Period", IF( 'cmu_viagens_dw cmu_vgm'[hour] >= 18 && 'cmu_viagens_dw cmu_vgm'[hour] <= 23, "Night Period", "Early morning Period" ) ) )
更简洁的SWITCH写法(推荐)
多分支判断用SWITCH比嵌套IF更易读维护:
Periods = SWITCH( TRUE(), 'cmu_viagens_dw cmu_vgm'[hour] >= 6 && 'cmu_viagens_dw cmu_vgm'[hour] < 12, "Morning Period", 'cmu_viagens_dw cmu_vgm'[hour] >= 12 && 'cmu_viagens_dw cmu_vgm'[hour] < 18, "Afternoon Period", 'cmu_viagens_dw cmu_vgm'[hour] >= 18 && 'cmu_viagens_dw cmu_vgm'[hour] <= 23, "Night Period", "Early morning Period" )
注意:确保代码里的列名和你表中实际存储小时数的列完全一致,比如如果你的列是[time]就把所有[hour]替换成[time]。
内容的提问来源于stack exchange,提问作者Michelle Marques
相关产品推荐
相关产品推荐

