You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现基于vSelectedDate的表达式过滤:按组织聚合最新符合条件记录的Score*Revenue

Qlik表达式修复:按组织筛选指定日期前最新记录并计算乘积和

问题回顾

需要实现:Load脚本执行后,基于DatePicker组件的变量vSelectedDate,筛选所有日期≤该变量的记录,取每个组织的最新一条记录,计算Score * Revenue的总和。

示例数据中,当vSelectedDate=30/12/2023时,需筛选Apple的2023-06-02记录、Banana的2023-01-01记录,最终求和结果为200*4 +70*10=1500。

原表达式存在逻辑错误:

Sum(
  Aggr(
    If(
      Rank(Max(Date)) = 1 and Date <= $(vSelectedDate),
      Score * Revenue
    ),
    [Organisation Name]
  )
)

错误原因:Max(Date)未应用Date<=vSelectedDate的筛选,导致组织存在超期日期时,Max(Date)会取超期值,后续Date<=vSelectedDate条件无法匹配到有效记录;同时Rank(Max(Date))=1属于冗余逻辑,每个组织的Max(Date)本身就是唯一的最大值。

可行解决方案

方案1:Set分析+Aggr匹配最大日期

Sum(
  Aggr(
    If(Date = Max({<Date={"<=$(vSelectedDate)"}>} Date),
      Score * Revenue
    ),
    [Organisation Name], Date
  )
)
  • 逻辑说明:
    1. 按Organisation Name和Date聚合,在每个组织的上下文里,用Max({<Date={"<=$(vSelectedDate)"}>} Date)计算该组织符合日期条件的最大日期。
    2. 通过If(Date = 上述最大日期)匹配到每个组织的目标记录,计算Score*Revenue。
    3. 最后用Sum汇总所有组织的计算结果。

方案2:FirstSortedValue简化实现

Sum(
  Aggr(
    FirstSortedValue({<Date={"<=$(vSelectedDate)"}>} Score * Revenue, -Date)
    , [Organisation Name]
  )
)
  • 逻辑说明:
    1. FirstSortedValue({<Date={"<=$(vSelectedDate)"}>} Score * Revenue, -Date)会在每个组织的筛选后数据里,按Date降序取第一个值(即最新日期对应的Score*Revenue)。
    2. 按Organisation Name聚合后,用Sum直接汇总所有组织的结果,写法更简洁。

验证结果

两种方案在vSelectedDate=30/12/2023的场景下,均能正确计算出800+700=1500的结果,符合需求。

内容的提问来源于stack exchange,提问作者Shuyuan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:55:55