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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:52:28