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

基于DAX度量值筛选符合连续日期特定事件条件的表

DAX度量值实现特定条件筛选需求

需求概述

针对每个唯一的UserID,需筛选满足以下全部条件的行:

  • 用户的首日活动(最早日期的Activity)为Run
  • 首日之后存在连续多天的Run记录
  • 在连续Run记录之后,出现非Run的Activity且Hobby为Garden
  • 保留该用户从首日连续Run开始,直到首次出现符合要求的非Run+Garden记录的所有行

示例数据表格

DateUserIDActivityHobby
2020/01/0501ARunStamps
2020/01/0601ARunStamps
2020/01/0701AWalkGarden
2020/01/0502BRunStamps
2020/01/0602BRunStamps
2020/01/0702BRunGarden
2020/01/0802BRunGarden
2020/01/0503CRunStamps
2020/01/0603CRunStamps
2020/01/0703CWalkGarden
2020/01/0803CWalkGarden
2020/01/0504ARunStamps
2020/01/0604BRunStamps
2020/01/0504ARunGarden
2020/01/0804BRunGarden
2022/01/0804BRunGarden

筛选规则说明

  • 01A的前3行保留:用户连续2天Run,后续出现Walk且Hobby为Garden,符合全部条件
  • 02B的4行全部排除:始终是Run活动,未出现非Run的Activity,不满足条件
  • 03C仅前3行保留:第4天的Walk之前没有连续Run记录(前一天已经是Walk),因此该行排除
  • 04A、04B的5行全部排除:活动日期不连续,且未出现符合要求的非Run+Garden后续记录

DAX度量值实现

核心筛选度量值

Keep Row = 
VAR CurrentUser = 'Table'[UserID]
VAR CurrentDate = 'Table'[Date]
-- 获取用户最早活动日期
VAR UserFirstDate = CALCULATE(MIN('Table'[Date]), ALLEXCEPT('Table', 'Table'[UserID]))
-- 验证首日活动是否为Run
VAR FirstActivityIsRun = CALCULATE(MAX('Table'[Activity]), ALLEXCEPT('Table', 'Table'[UserID]), 'Table'[Date] = UserFirstDate) = "Run"

IF(NOT(FirstActivityIsRun), 0,
    -- 查找首次出现非Run且Hobby为Garden的日期
    VAR TargetDate = CALCULATE(MIN('Table'[Date]), ALLEXCEPT('Table', 'Table'[UserID]), 'Table'[Activity] <> "Run", 'Table'[Hobby] = "Garden")
    IF(ISBLANK(TargetDate), 0,
        -- 检查从首日到TargetDate的所有日期中,除TargetDate外均为Run
        VAR DatesUpToTarget = FILTER(VALUES('Table'[Date]), 'Table'[Date] <= TargetDate)
        VAR ConsecutiveRunValid = 
            COUNTROWS(
                FILTER(DatesUpToTarget, 
                    CALCULATE(MAX('Table'[Activity]), ALLEXCEPT('Table', 'Table'[UserID]), 'Table'[Date] = [Date]) = "Run"
                    || [Date] = TargetDate
                )
            ) = COUNTROWS(DatesUpToTarget)
        -- 满足条件则标记为保留
        IF(ConsecutiveRunValid && CurrentDate <= TargetDate, 1, 0)
    )
)

应用方式

在表格或可视化组件中添加筛选条件:Keep Row = 1,即可得到符合要求的行。

度量值逻辑说明

  1. 先校验用户首日活动是否为Run,不满足直接排除所有相关行
  2. 定位该用户首次出现非Run且Hobby为Garden的日期,若无此日期则排除所有行
  3. 验证从首日到目标日期的区间内,除目标日期外所有记录的Activity均为Run,确保连续Run的完整性
  4. 最终标记符合区间要求且连续Run有效的行

内容的提问来源于stack exchange,提问作者Aleister Tanek Javas Mraz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:23:11