Qlik Sense如何筛选指定时间范围内处于就绪状态的OWNER_ID
Qlik Sense 透视表时间范围患者就绪状态匹配解决方案
核心逻辑梳理
要展示选定时间范围内(如6-8点)处于就绪状态的患者,本质是筛选就绪时间段[START_TIME, END_TIME]与选定时间范围[筛选起始小时, 筛选结束小时]存在重叠的患者,判断条件为:START_TIME ≤ 筛选结束小时 AND END_TIME ≥ 筛选起始小时
同时需满足STATUS='ready'。
具体解决方法
方法1:在度量中用集合分析过滤
直接在透视表的度量表达式中加入集合分析,精准筛选符合条件的患者:
Count({< STATUS={'ready'}, START_TIME={"<=$(=max(提取的筛选结束小时))"}, END_TIME={">=$(=min(提取的筛选起始小时))"} >} DISTINCT OWNER_ID)
- 若你的筛选字段是类似
TimeRange(值为“0-2点”“6-8点”),需先提取起始/结束小时数值,示例提取函数:- 起始小时:
min(Left(TimeRange, Index(TimeRange, '-')-1)) - 结束小时:
max(Mid(TimeRange, Index(TimeRange, '-')+1, Len(TimeRange)-Index(TimeRange, '-')-1))(根据实际字符串格式调整)
- 起始小时:
方法2:创建计算维度
若需在维度中仅展示符合条件的OWNER_ID,可创建计算维度:
=If(STATUS='ready' AND START_TIME <= $(=max(提取的筛选结束小时)) AND END_TIME >= $(=min(提取的筛选起始小时)), OWNER_ID)
- 勾选维度设置中的「排除空值」,确保仅显示符合条件的患者ID。
原方法无效原因说明
你之前使用的aggr()表达式仅判断了END_TIME大于筛选的最小小时,未覆盖时间段重叠的完整逻辑,且aggr()的分组维度写错(END-TIME应为END_TIME),导致无法正确匹配目标患者。
内容的提问来源于stack exchange,提问作者palsilee
相关产品推荐
相关产品推荐

