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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:03