将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_id | status | timestamp |
|---|---|---|
| A | PAUSED | 2022-08-02T21:09:13 |
| A | UNPAUSED | 2022-08-02T21:09:13 |
| B | PAUSED | 2022-08-10T21:09:15 |
| B | PAUSED | 2022-07-20T21:09:13 |
| A | PAUSED | 2022-08-12T21:09:13 |
| C | PAUSED | 2022-08-01T21:07:19 |
| C | PAUSED | 2022-08-01T21:07:19 |
| C | UNPAUSED | 2022-08-03T21:07:19 |
| B | UNPAUSED | 2022-07-20T21:09:13 |
| A | UNPAUSED | 2022-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
相关产品推荐
相关产品推荐

