Power BI DAX:动态计算最新值<9的患者去重计数及占比
DAX度量值解决方案
需求回顾
基于选定会计月,动态计算过去12个月内:
- 有A1C记录的去重患者总数
- 最新A1C值小于9的去重患者数
- 上述两者的占比
前提条件
数据模型已包含日历表,且日历表与A1C表通过Result_Date和日历表日期列建立关联关系。
完整DAX度量值
1. 总A1C患者数
总A1C患者数 = VAR 过去12个月范围 = DATESINPERIOD('日历表'[日期], MAX('日历表'[日期]), -12, MONTH) RETURN CALCULATE( DISTINCTCOUNT(A1c[patientID]), A1c[Result_Date] IN 过去12个月范围 )
- 用
DATESINPERIOD生成选定会计月最后一天往前推12个月的日期范围 - 统计该范围内有A1C记录的唯一患者数
2. A1C<9的患者数
A1C<9的患者数 = VAR 过去12个月范围 = DATESINPERIOD('日历表'[日期], MAX('日历表'[日期]), -12, MONTH) VAR 患者最新A1C记录 = ADDCOLUMNS( VALUES(A1c[patientID]), -- 获取所有有记录的患者ID "@最新检测日期", CALCULATE(MAX(A1c[Result_Date]), A1c[Result_Date] IN 过去12个月范围), "@最新A1C值", CALCULATE(MAX(A1c[Value]), A1c[Result_Date] = [@最新检测日期]) ) VAR 符合条件患者集 = FILTER(患者最新A1C记录, [@最新A1C值] < 9 && NOT ISBLANK([@最新检测日期])) RETURN COUNTROWS(符合条件患者集)
- 逐行计算每个患者在过去12个月内的最新检测日期
- 基于最新日期匹配对应的A1C值
- 筛选出最新值小于9且有有效记录的患者,统计数量
3. A1C<9患者占比
A1C<9患者占比 = DIVIDE( [A1C<9的患者数], [总A1C患者数], 0 -- 当总患者数为0时返回0,避免错误 )
- 使用
DIVIDE处理除法,自动处理分母为0的异常情况
原代码问题分析
- 语法错误:
CALCULATETABLE语句缺少闭合括号,导致代码无法运行 - 表值与单值混淆:
VALUES(A1c[patientID])返回表对象,不能直接用A1c[patientID] = patientID比较,需通过ADDCOLUMNS逐行遍历处理 - 日期格式不匹配:用
FORMAT将日期转为文本后,与原表日期类型字段无法匹配,导致LOOKUPVALUE无法找到对应值
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

