在Qlik Sense中实现当年排名与上年排名差值的动态计算
实现动态计算(当年排名 - 上年排名)的方案
下面针对不同使用场景,给出能自动更新的实现方法,加载新数据后可自动重新计算结果:
Excel 场景
- 先把数据整理成规范列(公司、排名、财年),选中数据区域按
Ctrl+T创建超级表,开启数据自动扩展功能。 - 添加辅助列提取对应公司的上年排名,公式示例:
=XLOOKUP([@Company]&([@Financial_Year]-1), [Company]&[Financial_Year], [RANK], 0) - 新增差值列,用当年排名减去辅助列的上年排名,公式示例:
=[@RANK] - 辅助列对应单元格 - 用数据透视表汇总结果:把「公司」拖入行区域,「差值」拖入值区域(取最新年份的差值),右键点击透视表选择「刷新」即可同步新数据的计算结果。
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
相关产品推荐
相关产品推荐

