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

在Cognos中计算当日与前一日数值差异并生成目标透视表

解决方案:计算当日与前一日数值差异并生成透视表

第一步:先汇总每日数值

原始数据中同一天可能存在多条同Description的记录(比如2023-01-05的XXX有两个Value),所以首先需要按Description和Snapshot - Date做每日总Value的汇总。

SQL 汇总语句

WITH daily_summary AS (
    SELECT
        Description,
        "Snapchot - Date" AS snapshot_date,
        SUM(Value) AS daily_value
    FROM your_table_name
    GROUP BY Description, "Snapchot - Date"
)

第二步:获取前一日数值并计算差异

根据使用工具的不同,提供三种常用实现方式:

场景1:SQL实现

使用LAG()窗口函数,按Description分组、日期排序,直接获取前一日的汇总值:

SELECT
    Description,
    snapshot_date,
    daily_value,
    COALESCE(daily_value - LAG(daily_value) OVER (PARTITION BY Description ORDER BY snapshot_date), 0) AS diff
FROM daily_summary
ORDER BY Description, snapshot_date;
  • LAG()函数会提取同一分组内上一行的daily_value
  • COALESCE()用于处理首日差异(无前置日期时差异设为0,匹配你的预期效果)

执行后得到结构化结果:

Descriptionsnapshot_datedaily_valuediff
XXX2023-01-052500
XXX2023-01-06350100
XXX2023-01-07200-150

场景2:Power BI实现

  1. 创建每日汇总度量值:
    Daily Value = SUM('YourTable'[Value])
    
  2. 创建前一日数值度量值:
    Previous Day Value = CALCULATE(
        [Daily Value],
        DATEADD('YourTable'[Snapchot - Date], -1, DAY)
    )
    
  3. 计算差异度量值:
    Daily Diff = COALESCE([Daily Value] - [Previous Day Value], 0)
    

将Description设为行、Snapchot - Date设为列,拖入两个度量值调整布局,即可得到目标透视表。

场景3:Excel实现

  1. 制作基础透视表:行选Description,列选Snapchot - Date,值选Value并设置为求和。
  2. 添加差异计算:比如2023-01-06的差异公式为=C2-B2(B2为2023-01-05的汇总值,C2为2023-01-06的汇总值),首日差异直接填0。
  3. 调整透视表布局,将Value和Diff对应到每个日期下方即可。

你之前方法出错的原因

直接用add_days([Snapchot - Date]; -1)关联时,未先做每日汇总,导致原始数据中同一天的多条记录与前一日的多条记录形成多对多匹配,最终出现数值匹配错误。必须先按日期和Description汇总,再做日期关联才能保证匹配准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:50