Power BI中根据Action列判断同日期打卡状态并生成完成列的方法
Power BI 实现「Complete or Not」判断列方案
方案1:DAX 计算列实现(无需修改原始数据加载逻辑,适合可视化阶段快速添加)
你可以直接在数据视图中新建计算列,使用如下DAX代码:
Complete or Not = VAR CurrentDate = '你的表名'[日期列] // 若需要按用户区分判断,可新增变量存储当前行用户ID:VAR CurrentUser = '你的表名'[用户ID列] VAR HasSignIn = CALCULATE( COUNTROWS('你的表名'), FILTER( ALL('你的表名'), '你的表名'[日期列] = CurrentDate // 若按用户区分,新增判断条件:&& '你的表名'[用户ID列] = CurrentUser && '你的表名'[Action] = "sign_in" ) ) > 0 VAR HasSignOut = CALCULATE( COUNTROWS('你的表名'), FILTER( ALL('你的表名'), '你的表名'[日期列] = CurrentDate // 若按用户区分,新增判断条件:&& '你的表名'[用户ID列] = CurrentUser && '你的表名'[Action] = "sign_out" ) ) > 0 RETURN IF(HasSignIn && HasSignOut, "Complete", "未完成")
注意:如果你的日期列包含时分秒,需要先转成纯日期格式,将
CurrentDate定义修改为VAR CurrentDate = DATEVALUE('你的表名'[日期时间列]),筛选条件中的日期也对应使用DATEVALUE转换即可。
方案2:Power Query M 语言实现(适合数据清洗阶段统一处理)
如果你希望在数据加载时就完成该字段的计算,可按如下步骤操作:
- 打开Power Query编辑器,选中目标数据表
- 点击「转换」选项卡中的「分组依据」,按「日期列」分组,新列名填
ActionGroup,操作选择「所有行」 - 新增自定义列,输入如下M代码判断当日是否同时有签到签出记录:
= if List.Contains([ActionGroup][Action], "sign_in") and List.Contains([ActionGroup][Action], "sign_out") then "Complete" else "未完成"
- 展开
ActionGroup列的所有原始字段,删除多余的临时分组列后,将数据加载回Power BI数据模型即可 - 若需要按用户区分判断,分组时新增「用户ID列」作为分组条件即可
通用注意事项
- 两种方案均要求
Action列的取值为严格的sign_in、sign_out,如果存在大小写、拼写差异,可在判断时统一转换大小写:DAX使用LOWER([Action])、M语言使用Text.Lower([Action])处理 - 如果单日内同一用户存在多组签到签出记录,两种方案都可以通过新增用户ID匹配条件适配需求
内容的提问来源于stack exchange,提问作者Phyo Min Thu
相关产品推荐
相关产品推荐

