如何在Qlik Sense中计算阈值日期(Threshold Date)?
在Qlik Sense中计算首次达到阈值的日期(Threshold Date)
需求说明
现有包含Order ID、Order Date、Order Qty、Threshold Qty、Cummulative Sum字段的数据(示例中Threshold Qty为9),需要新增Threshold Date列:
- 当
Cummulative Sum首次超过Threshold Qty时,该列值为对应的Order Date - 所有在首次达标日期之后的行,
Threshold Date都沿用这个首次日期 - 未达标的行(所有
Cummulative Sum都没超过阈值),该列值为Null
方法一:加载脚本中计算(推荐,性能更优)
脚本处理可提前完成计算,避免前端重复运算,适合大数据量场景。
全局阈值(所有行共用同一个首次达标日期)
// 加载原始数据并按日期排序 Orders: LOAD [Order ID], [Order Date], [Order Qty], [Threshold Qty], [Cummulative Sum] FROM [你的数据源路径] // 替换为实际数据源,如Excel、数据库连接等 ORDER BY [Order Date] ASC; // 计算首次达到阈值的日期 ThresholdCalc: LOAD MIN(IF([Cummulative Sum] > [Threshold Qty], [Order Date], Null())) AS [Threshold Date] RESIDENT Orders; // 将阈值日期关联回原表 Left Join(Orders) LOAD * RESIDENT ThresholdCalc; // 清理临时表 DROP TABLE ThresholdCalc;
按分组计算(如每个Order ID单独计算首次达标日期)
如果需要按Order ID分组,每个订单单独判断首次达标日期,修改脚本为:
Orders: LOAD [Order ID], [Order Date], [Order Qty], [Threshold Qty], [Cummulative Sum] FROM [你的数据源路径] ORDER BY [Order ID], [Order Date] ASC; ThresholdCalc: LOAD [Order ID], MIN(IF([Cummulative Sum] > [Threshold Qty], [Order Date], Null())) AS [Threshold Date] RESIDENT Orders GROUP BY [Order ID]; Left Join(Orders) LOAD * RESIDENT ThresholdCalc; DROP TABLE ThresholdCalc;
方法二:前端图表/表格中直接用表达式
如果不需要修改原始数据集,也可以在前端表格的度量中直接写表达式生成Threshold Date:
=FirstSortedValue({<[Cummulative Sum] = {"$(>=$(=Max([Threshold Qty])))"}>} [Order Date], [Order Date])
- 表达式逻辑:筛选出
Cummulative Sum超过阈值的行,取最早的Order Date;无达标行时自动返回Null - 若为分组场景(如按
Order ID分组),确保图表维度包含Order ID,表达式会自动适配分组上下文
内容的提问来源于stack exchange,提问作者Debi Prasad
相关产品推荐
相关产品推荐

