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

如何编写DAX函数获取满足21天未出现后首次触发Intrusion的camera_id列表

用DAX实现符合要求的摄像头ID分组列表

先标记符合条件的首次入侵记录

给数据表添加一个计算列,用来标记每条Intrusion记录是否为该摄像头**第一次满足“前21天未出现过入侵”**的条目:

IsQualifiedFirstIntrusion = 
VAR 当前摄像头 = 'Table'[camera_id]
VAR 当前日期 = 'Table'[date]
// 提取该摄像头所有更早的入侵记录日期
VAR 更早的入侵日期 = 
    CALCULATETABLE(
        VALUES('Table'[date]),
        ALLEXCEPT('Table', 'Table'[camera_id]),
        'Table'[action] = "Intrusion",
        'Table'[date] < 当前日期
    )
// 获取最近的一次更早入侵日期
VAR 上一次入侵日期 = MAXX(更早的入侵日期, [date])
// 判断当前记录是否有效:要么是首次入侵,要么与上一次入侵间隔超过21天
VAR 是否有效 = 
    IF(
        'Table'[action] = "Intrusion" &&
        (ISBLANK(上一次入侵日期) || 当前日期 - 上一次入侵日期 > 21),
        TRUE(),
        FALSE()
    )
// 找到该摄像头第一条有效记录的日期
VAR 第一个有效日期 = 
    CALCULATE(
        MIN('Table'[date]),
        ALLEXCEPT('Table', 'Table'[camera_id]),
        是否有效 = TRUE()
    )
// 仅当当前日期为第一条有效日期时,标记为符合条件
RETURN
    IF(当前日期 = 第一个有效日期, TRUE(), FALSE())

按日期分组生成摄像头ID列表

创建计算表,自动按日期分组汇总当天符合条件的摄像头ID:

合格摄像头按日期分组 = 
SUMMARIZECOLUMNS(
    'Table'[date],
    FILTER('Table', 'Table'[IsQualifiedFirstIntrusion] = TRUE()),
    "符合条件的摄像头ID", CONCATENATEX(VALUES('Table'[camera_id]), [camera_id], ", ")
)

如果是在报表可视化场景中使用,也可以编写度量值,在矩阵/表格中展示每个日期对应的摄像头列表:

度量值_合格摄像头列表 = 
VAR 当前日期 = MAX('Table'[date])
VAR 合格摄像头 = 
    CALCULATETABLE(
        VALUES('Table'[camera_id]),
        'Table'[date] = 当前日期,
        'Table'[IsQualifiedFirstIntrusion] = TRUE()
    )
RETURN
    CONCATENATEX(合格摄像头, [camera_id], ", ")

逻辑说明

  1. 计算列先对每条入侵记录做有效性判断:要么是该摄像头首次触发入侵,要么与上一次入侵的间隔超过21天。
  2. 从中筛选出每个摄像头的第一条有效记录,确保是首次满足条件的出现。
  3. 最后按日期分组,将当天的合格摄像头ID汇总成列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:55:35