PowerBI中基于PIMS代码的月度原油成本加权平均计算需求
解决方案:按PIMS代码+月份计算原油加权平均成本
嘿,我来帮你搞定这个需求!核心是要按原油PIMS代码和对应月份分组,把所有重复条目(哪怕同一日期的相同PIMS行)都纳入加权平均计算,下面是具体的实现思路和代码示例:
核心逻辑
加权平均成本的计算公式很明确:加权平均成本 = Σ(单条成本 × 对应待加工数量) / Σ(该组总待加工数量)
我们需要确保同一PIMS代码+同一月份下的所有行(包括重复条目)都参与这个计算,同时要把日期转换成“年月”维度来分组,避免跨年的同月份数据混在一起。
步骤1:数据预处理
首先要把日期列转换成标准的日期格式,方便提取月份信息。这里以Python的pandas库为例(处理表格数据最常用的工具):
import pandas as pd # 读取你的表格数据(支持csv、excel等格式) df = pd.read_excel("crude_oil_data.xlsx") # 或者用pd.read_csv()读取csv文件 # 转换日期列为datetime类型,并提取“年月”作为分组键 df['当月首日日期'] = pd.to_datetime(df['当月首日日期']) df['年月'] = df['当月首日日期'].dt.to_period('M') # 生成类似"2024-05"的年月格式
步骤2:计算加权平均成本
用分组聚合的方式实现加权计算,代码如下:
# 按PIMS代码和年月分组,计算每组的加权平均成本 weighted_avg_result = df.groupby(['原油PIMS代码', '年月']).apply( lambda group: (group['成本(Rs/MT)'] * group['待加工数量(千吨)']).sum() / group['待加工数量(千吨)'].sum() ).reset_index(name='加权平均成本(Rs/MT)') # 输出结果 print(weighted_avg_result)
代码解释
groupby(['原油PIMS代码', '年月']):把数据按PIMS代码和月份分成独立的组,保证每个组是同一PIMS同一月份的所有数据;lambda group里的逻辑:对每个组,先计算每一行的「成本×数量」(即该批次的总成本),求和后除以组内的总数量,得到的就是该组的加权平均成本;- 不管同一日期下有多少条相同PIMS的重复行,都会被自动纳入组内计算,完全符合你的要求。
验证示例
举个简单例子验证逻辑:
假设PIMS代码为CRUDE001的2024-05数据:
- 行1:成本100 Rs/MT,数量5千吨
- 行2:成本120 Rs/MT,数量3千吨
手动计算加权平均:(100×5 + 120×3)/(5+3) = 860/8 = 107.5 Rs/MT
用上面的代码计算会得到完全一致的结果,哪怕这两行是同一日期的重复条目。
内容的提问来源于stack exchange,提问作者saurabh dhokale
相关产品推荐
相关产品推荐

