如何在Power BI/Excel中从聚合数据计算每日销售额列
从Sales YTD反向计算每日销售额
核心逻辑
每日销售额 = 当日Sales YTD - 该人员上一日Sales YTD;如果是该人员的首次记录,直接取当日Sales YTD值。
示例数据
| Date | Person | Sales YTD | Calculated Daily Sales |
|---|---|---|---|
| 1/1/2023 | John | 1,000 | 1,000 |
| 1/1/2023 | Mark | 2,000 | 2,000 |
| 1/2/2023 | John | 1,000 | 0 |
| 1/2/2023 | Mark | 2,500 | 500 |
| 1/3/2023 | John | 1,000 | 0 |
| 1/3/2023 | Mark | 3,000 | 500 |
| 1/4/2023 | John | 2,500 | 1,500 |
| 1/4/2023 | Mark | 3,000 | 0 |
| 1/5/2023 | John | 3,000 | 500 |
| 1/5/2023 | Mark | 4,000 | 1,000 |
Excel 实现方法
假设数据在A2:C11区域(A列=日期,B列=人员,C列=Sales YTD),在D2单元格输入公式后下拉填充:
适用于Excel 365/2021的公式
=IF(COUNTIFS($B$2:B2,B2,$A$2:A2,"<"&A2)=0,C2,C2-XLOOKUP(1,($B$2:B1=B2)*($A$2:A1<A2),$C$2:C1,0,0,-1))
- 先判断当前行是否为该人员的第一条记录,是则直接取C列值;
- 若不是,用XLOOKUP定位该人员上一日的Sales YTD,用当前值减去它得到当日销售额。
适用于旧版Excel的数组公式
=IF(COUNTIFS($B$2:B2,B2,$A$2:A2,"<"&A2)=0,C2,C2-INDEX($C$2:C1,MATCH(1,($B$2:B1=B2)*($A$2:A1<A2),0)))
注意:输入后需按
Ctrl+Shift+Enter完成数组公式录入,Excel 365及以后版本无需此操作。
Power BI 实现方法
在数据视图中新建计算列,使用DAX公式:
Calculated Daily Sales = VAR PreviousYTD = CALCULATE( MAX('Table'[Sales YTD]), ALLEXCEPT('Table','Table'[Person]), 'Table'[Date] < EARLIER('Table'[Date]) ) RETURN IF(ISBLANK(PreviousYTD), 'Table'[Sales YTD], 'Table'[Sales YTD] - PreviousYTD)
- 用
VAR定义变量PreviousYTD,筛选出当前人员上一日的Sales YTD; - 如果没有上一日数据(即首次记录),返回当前Sales YTD,否则返回差值。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

