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

Qlikview基于数据中distinct日期循环实现各产品每日累计销量展示

该需求完全可以在QlikView中实现,无需手动遍历日期做循环计算,可通过脚本预处理或前端表达式两种方式完成,具体实现逻辑如下:

实现方式1:脚本预处理生成结果表

适合需要将累计结果固化到数据模型、供后续多处调用的场景,代码示例如下:

// 1. 加载原始销售数据,注意将字符串格式的日期转换为QlikView可识别的日期类型
Sales:
LOAD
    Date#(Date, 'DD/MM/YYYY') AS Date, // 日期格式请根据实际数据源调整
    Product,
    Sold
FROM [你的实际数据源文件路径];

// 2. 提取所有业务日期并按升序排序
AllDates:
LOAD DISTINCT Date
RESIDENT Sales
ORDER BY Date ASC;

// 3. 生成每个日期节点对应的所有已出现产品的累计销量
FinalResult:
LOAD
    Date,
    Product,
    Rangesum(Above(Sum(Sold), 0, RowNo())) AS CumulativeSold
RESIDENT (
    // 关联得到「每个日期 + 所有在该日期前已上线的产品」组合,无销量则补0
    SELECT
        a.Date,
        b.Product,
        If(IsNull(c.Sold), 0, c.Sold) AS Sold
    FROM AllDates a
    LEFT JOIN (SELECT DISTINCT Product, Min(Date) AS FirstAppearDate FROM Sales GROUP BY Product) b
    ON a.Date >= b.FirstAppearDate
    LEFT JOIN Sales c
    ON a.Date = c.Date AND b.Product = c.Product
)
GROUP BY Date, Product
ORDER BY Product, Date ASC;

// 清理临时表释放内存
DROP TABLE Sales, AllDates;
实现方式2:前端图表直接计算

适合灵活查询、不需要固化累计结果的场景,操作步骤如下:

  • 新建直表对象,添加2个维度:
    • Date:设置按升序排序
    • Product:设置按升序排序,勾选维度配置项中的「显示所有值」
  • 添加度量表达式:
Rangesum(Above(total <Product> Sum(Sold), 0, RowNo(total <Product>)))

两种实现方式输出的结果均和你提供的期望输出完全匹配,每个日期节点会自动补全所有已出现过的产品,销量为截止到当前日期的累计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:39:02