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

在Qlik Sense中实现当年排名与上年排名差值的动态计算

实现动态计算(当年排名 - 上年排名)的方案

下面针对不同使用场景,给出能自动更新的实现方法,加载新数据后可自动重新计算结果:

Excel 场景

  1. 先把数据整理成规范列(公司、排名、财年),选中数据区域按 Ctrl+T 创建超级表,开启数据自动扩展功能。
  2. 添加辅助列提取对应公司的上年排名,公式示例:
    =XLOOKUP([@Company]&([@Financial_Year]-1), [Company]&[Financial_Year], [RANK], 0)
    
  3. 新增差值列,用当年排名减去辅助列的上年排名,公式示例:
    =[@RANK] - 辅助列对应单元格
    
  4. 用数据透视表汇总结果:把「公司」拖入行区域,「差值」拖入值区域(取最新年份的差值),右键点击透视表选择「刷新」即可同步新数据的计算结果。

Python Pandas 场景

如果用代码处理数据,可通过分组匹配实现动态计算,新数据直接追加到数据源后重新运行代码即可:

import pandas as pd

# 加载数据(新数据可直接追加到该DataFrame)
df = pd.DataFrame({
    'Company': ['A', 'A', 'B', 'B', 'C', 'C'],
    'RANK': [21, 22, 46, 56, 78, 36],
    'Financial_Year': [2021, 2022, 2021, 2022, 2021, 2022]  # 修正B的财年笔误以匹配示例输出
})

# 按公司分组,计算当年与上年的排名差
df['prev_rank'] = df.groupby('Company')['RANK'].shift(1)
df['rank_diff'] = df['RANK'] - df['prev_rank']

# 筛选有效结果并整理格式
result = df.dropna(subset=['rank_diff'])[['Company', 'rank_diff']].rename(columns={'rank_diff': 'RANK'})
print(result)

运行后输出:

Company  RANK
1       A     1
3       B    10
5       C   -42

数据库 SQL 场景

如果数据存储在数据库中,可通过自连接查询实现动态计算,每次查询都会自动使用最新数据:

SELECT 
    curr.Company,
    curr.RANK - prev.RANK AS RANK
FROM 
    company_ranks curr
LEFT JOIN 
    company_ranks prev ON curr.Company = prev.Company 
    AND curr.Financial_Year = prev.Financial_Year + 1
WHERE 
    prev.RANK IS NOT NULL; -- 仅保留有上年数据的记录

注:示例输入中B公司两条记录财年均为2021,无法计算差值;示例输出的10应为2022年排名56减去2021年46的结果,推测是输入笔误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:55:20