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

将SQL查询转换为Power BI的DAX查询以统计PAUSED状态job_id

问题:将统计PAUSED状态Job的SQL转换为DAX(Power BI卡片视觉对象用)

我有一张名为table1的表,需要统计处于PAUSED状态的job_id数量。规则是:如果同一job_id在同一时间戳下同时存在PAUSED和UNPAUSED状态,该job_id也需要被计入统计。我已经写好了对应的SQL查询,现在需要将其转换成DAX查询,用于Power BI的卡片视觉对象展示,求帮助。

表结构及数据

job_idstatustimestamp
APAUSED2022-08-02T21:09:13
AUNPAUSED2022-08-02T21:09:13
BPAUSED2022-08-10T21:09:15
BPAUSED2022-07-20T21:09:13
APAUSED2022-08-12T21:09:13
CPAUSED2022-08-01T21:07:19
CPAUSED2022-08-01T21:07:19
CUNPAUSED2022-08-03T21:07:19
BUNPAUSED2022-07-20T21:09:13
AUNPAUSED2022-08-04T21:09:13

已编写的SQL查询

SELECT count(job_id) FROM (SELECT distinct job_id,status,DENSE_RANK over(partition by job_id order by timestamp desc) AS rn FROM table1) t2 WHERE t2.rn = 1 and t2.status = "PAUSED"

DAX解决方案

方案1:分步逻辑清晰版

PAUSED Job Count = 
VAR MaxTimestamps = 
    SUMMARIZE(
        table1,
        table1[job_id],
        "MaxTimestamp", MAX(table1[timestamp])
    )
VAR LatestStatusJobs = 
    NATURALINNERJOIN(
        MaxTimestamps,
        SELECTCOLUMNS(
            FILTER(table1, table1[status] = "PAUSED"),
            "job_id", table1[job_id],
            "MaxTimestamp", table1[timestamp]
        )
    )
RETURN
    COUNTROWS(DISTINCT(LatestStatusJobs[job_id]))

逻辑说明:

  • MaxTimestamps:先获取每个job_id对应的最新时间戳
  • LatestStatusJobs:将最新时间戳的集合与PAUSED状态的记录关联,筛选出在最新时间点有PAUSED状态的job
  • 最后对符合条件的job_id去重计数,避免同一job在同一时间戳下多条PAUSED记录重复统计

方案2:简洁版

PAUSED Job Count = 
COUNTROWS(
    DISTINCT(
        SELECTCOLUMNS(
            FILTER(
                table1,
                table1[timestamp] = CALCULATE(MAX(table1[timestamp]), ALLEXCEPT(table1, table1[job_id]))
                && table1[status] = "PAUSED"
            ),
            "job_id", table1[job_id]
        )
    )
)

逻辑说明:

  • 对每条记录判断:当前时间戳是否是该job_id的最新时间戳,且状态为PAUSED
  • 提取符合条件的job_id并去重,最后统计数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:45:30