按每日每个Faultid筛选最后记录的DAX度量值实现问询
DAX解决方案:统计符合条件的工单最新记录行数并支持钻取
核心逻辑
先定位每个Faultid在所选日期范围内每日的最新FromDateTime记录,再匹配切片器指定的Agent/Team条件,最终统计符合条件的行数,同时保留原始表行上下文以支持钻取。
度量值实现
主统计度量值
符合条件的行数 = VAR 所选日期 = VALUES('切片器表'[日期]) VAR 所选Agent = VALUES('切片器表'[Agent]) VAR 所选Team = VALUES('切片器表'[Team]) VAR 每日Fault最新时间 = ADDCOLUMNS( SUMMARIZE( '工单分配表', '工单分配表'[Faultid], // 提取FromDateTime的日期部分,若表已有日期列可直接替换 "当日", DATEVALUE('工单分配表'[FromDateTime]) ), "@最新时间", CALCULATE(MAX('工单分配表'[FromDateTime])) ) VAR 过滤后记录 = FILTER( '工单分配表', // 匹配日期范围 DATEVALUE('工单分配表'[FromDateTime]) IN 所选日期 && // 匹配该Fault当日最新时间 '工单分配表'[FromDateTime] = LOOKUPVALUE( [@最新时间], '工单分配表'[Faultid], '工单分配表'[Faultid], [当日], DATEVALUE('工单分配表'[FromDateTime]) ) && // 匹配Agent条件(空则不限制) (ISBLANK(所选Agent) || '工单分配表'[Agent] IN 所选Agent) && // 匹配Team条件(空则不限制) (ISBLANK(所选Team) || '工单分配表'[Team] IN 所选Team) ) RETURN COUNTROWS(过滤后记录)
钻取支持补充
若需直接在视觉对象中标记符合条件的记录(方便筛选或展示),可使用以下度量值:
是否为有效记录 = VAR 所选日期 = VALUES('切片器表'[日期]) VAR 所选Agent = VALUES('切片器表'[Agent]) VAR 所选Team = VALUES('切片器表'[Team]) VAR 当日最新时间 = CALCULATE( MAX('工单分配表'[FromDateTime]), ALLEXCEPT('工单分配表', '工单分配表'[Faultid], '工单分配表'[日期]) ) RETURN IF( DATEVALUE('工单分配表'[FromDateTime]) IN 所选日期 && '工单分配表'[FromDateTime] = 当日最新时间 && (ISBLANK(所选Agent) || '工单分配表'[Agent] IN 所选Agent) && (ISBLANK(所选Team) || '工单分配表'[Team] IN 所选Team), 1, 0 )
注意事项
- 若工单表已存在单独的日期列,可替换掉
DATEVALUE('工单分配表'[FromDateTime]),提升计算效率。 - 断开连接的切片器表无需与工单表建立关系,度量值通过
VALUES直接读取筛选上下文。 - 钻取功能默认支持:在使用上述度量值的视觉对象上启用钻取后,点击数值即可查看对应的
Faultid明细。
内容的提问来源于stack exchange,提问作者Adrian lock
相关产品推荐
相关产品推荐

