如何在Qlik Sense中合并日期重叠的客户问题记录
在Qlik Sense中合并重叠日期的记录
作为Qlik Sense新手,发现它不支持PostgreSQL中的部分常规函数,现在需要实现将多个日期重叠的记录合并(压缩)为单条的功能。
原始数据
| id_client | id_question | date_open | date_close |
|---|---|---|---|
| YZIYR00R | 14534534 | 11.01.2022 | 11.01.2022 |
| YZIYR00R | 14786543 | 11.01.2022 | 11.01.2022 |
| YZIYR00R | 87634957 | 11.01.2022 | 11.01.2022 |
| YZIYR00R | 12398750 | 11.01.2022 | 12.01.2022 |
| YZIYR00R | 36485023 | 13.01.2022 | 13.01.2022 |
| YZIYR00R | 09748361 | 13.01.2022 | 14.01.2022 |
| YZIYR00R | 56419453 | 13.01.2022 | 13.01.2022 |
| YZIYR00R | 64324123 | 13.01.2022 | 15.01.2022 |
逻辑规则
同一客户的问题日期若存在重叠或连续,需合并为一条记录:取该组最早的date_open、最晚的date_close,保留组内第一条记录的id_question。
曾尝试用窗口函数判断下一条记录的date_open <= 当前记录的date_close识别重叠,但未实现完整压缩效果。
期望输出
| id_client | id_question | date_open | date_close |
|---|---|---|---|
| YZIYR00R | 14534534 | 11.01.2022 | 12.01.2022 |
| YZIYR00R | 36485023 | 13.01.2022 | 15.01.2022 |
解决方案(Qlik Sense加载脚本实现)
通过加载脚本的累积计算完成分组,具体步骤如下:
加载并转换日期格式
将字符串日期转为Qlik可识别的日期类型,确保计算准确性:RawData: Load id_client, id_question, Date(Date#(date_open, 'DD.MM.YYYY')) as date_open, Date(Date#(date_close, 'DD.MM.YYYY')) as date_close From [你的数据源路径]; // 替换为实际数据源(Excel、数据库连接等)按客户和日期排序并创建分组
对每个客户的记录按date_open升序排列,通过累积判断生成分组标识:GroupedData: Load *, // 当前记录日期与上一组重叠则沿用分组,否则新建分组 If(Peek('max_close') >= date_open, Peek('group_id'), Peek('group_id') + 1) as group_id, // 维护当前分组的最晚结束日期 If(Peek('max_close') >= date_open, Max(Peek('max_close'), date_close), date_close) as max_close Resident RawData Order By id_client, date_open;聚合分组得到最终结果
按客户和分组聚合,提取所需字段:FinalData: Load id_client, FirstSortedValue(id_question, date_open) as id_question, Min(date_open) as date_open, Max(date_close) as date_close Resident GroupedData Group By id_client, group_id;清理中间表(可选)
删除不需要的中间表节省内存:Drop Tables RawData, GroupedData;
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

