Qlikview表达式中如何获取选中日期对应的最近前序有效日期
QlikView 非连续日期匹配前序有效日期解决方案
方案1:脚本预计算(性能最优,推荐大数据量使用)
在数据加载阶段提前为每个有效日期绑定对应的最近前序有效日期,前端调用无需重复计算:
- 首先提取所有去重有效日期并按升序排序,通过
Peek函数获取上一行的日期作为当前日期的前序日期 - 把生成的前序日期字段关联回原业务表即可
示例加载脚本:
// 提取去重有效日期并生成前序日期映射表 DateMapping: LOAD DISTINCT Date(Date#(原始日期字段, 'DD/MM/YYYY')) as 日期, Date(Peek('日期')) as 前序有效日期 RESIDENT 你的原业务表名 ORDER BY 日期 ASC; // 关联前序日期到原表 LEFT JOIN (你的原业务表名) LOAD 日期, 前序有效日期 RESIDENT DateMapping; DROP TABLE DateMapping;
前端计算变动的表达式可直接写为:sum(数值字段) - sum({<日期=P(前序有效日期)>} 数值字段)
方案2:前端动态计算(无需修改加载脚本)
如果不想调整数据加载逻辑,可直接在透视表表达式中通过集合分析实现,适配单选有效日期的场景:
sum(数值字段) - sum({<日期={"=$(=Max({<日期={"<$(=Max(日期))"}>} 日期))"}>} 数值字段)
逻辑说明:
- 内层
Max(日期)获取当前选中的有效日期 - 外层
Max({<日期={"<$(=Max(日期))"}>} 日期)筛选所有小于当前选中日期的有效日期的最大值,也就是最近的前序有效日期,不受日期间隔、日期不连续的影响 - 集合分析限定日期为前序有效日期后求和,与当前日期数值做差即可得到变动值
注意事项
- 需确保使用的日期字段是QlikView可识别的日期类型,若原始日期为文本格式,需先用
Date(Date#(原始日期文本, 'DD/MM/YYYY'))转换为日期类型再进行计算 - 上述表达式默认适配单选有效日期的场景,若需支持多选日期可调整集合分析的筛选逻辑即可
内容的提问来源于stack exchange,提问作者JonJon
相关产品推荐
相关产品推荐

