Qlik Sense仪表板中基于出生日期与出院日期计算患者年龄(年+月)的公式方案
解决方案:计算患者年龄(年+月)
针对你在Qlik Sense仪表板中需要计算「出生日期(YYYYMMDD)到出院日期(YYYYMMDD)」年龄的需求,我整理了两种实用方案,你可以根据场景选择:
方案1:加载脚本中预先计算(推荐多图表复用)
如果多个图表都需要用到这个年龄数据,建议在数据加载阶段就计算好相关字段,这样仪表盘里直接调用字段即可,效率更高。
LOAD // 保留原有原始字段 BirthDate, exitDate, // 先把字符串格式的日期转成Qlik可识别的日期类型 Date(BirthDate, 'YYYYMMDD') as BirthDate_Date, Date(exitDate, 'YYYYMMDD') as ExitDate_Date, // 计算从出生到出院的总月数(核心逻辑:处理日的边界情况) (Year(ExitDate_Date) - Year(BirthDate_Date))*12 + Month(ExitDate_Date) - Month(BirthDate_Date) - If(Day(ExitDate_Date) < Day(BirthDate_Date), 1, 0) as Total_Age_Months, // 提取年数 Floor(Total_Age_Months / 12) as Age_Years, // 提取剩余月数 Mod(Total_Age_Months, 12) as Age_Months, // 组合成友好的显示文本(处理0年0月的特殊情况) If(Total_Age_Months = 0, '0月', If(Age_Years > 0, Age_Years & '年', '') & If(Age_Months > 0, Age_Months & '月', '') ) as Age_Text FROM [你的数据源路径]; // 替换成实际的数据源路径
方案2:仪表盘表达式直接计算(适合临时单图表需求)
如果只是单个图表需要展示年龄,可以直接在图表的表达式中写计算逻辑,无需修改加载脚本:
= // 先定义临时变量存储转换后的日期 Let vBirthDate = Date(BirthDate, 'YYYYMMDD'); Let vExitDate = Date(exitDate, 'YYYYMMDD'); // 计算总月数 Let vTotalMonths = (Year(vExitDate) - Year(vBirthDate))*12 + Month(vExitDate) - Month(vBirthDate) - If(Day(vExitDate) < Day(vBirthDate), 1, 0); // 组合成最终显示文本 If(vTotalMonths = 0, '0月', If(Floor(vTotalMonths/12) > 0, Floor(vTotalMonths/12) & '年', '') & If(Mod(vTotalMonths,12) > 0, Mod(vTotalMonths,12) & '月', '') )
关键逻辑说明
为什么要额外判断「出院日是否小于出生日」?举个例子:
- 出生日期:20170925,出院日期:20180103
- 如果只按年份和月份差计算,会得到
(2018-2017)*12 +1-9=4个月,但实际上从9月25到12月25才满3个月,1月3日还没到下一个月,所以要减去1个月,最终得到3个月,这样结果更准确。
内容的提问来源于stack exchange,提问作者Pooneh.T
相关产品推荐
相关产品推荐

