提问人:Stephan_Rossi 提问时间:10/27/2023 最后编辑:IkeStephan_Rossi 更新时间:10/28/2023 访问量:82
如何计算仅减少或增加部分总和
How to calculate only decrease or increase part of the sum
问:
如何计算仅减少或增加部分总和? 例如:
编号 | 月 | 价值 |
---|---|---|
1 | 2019 年 1 月 | 100 |
2 | 2019 年 1 月 | 120 |
3 | 2019 年 1 月 | 90 |
4 | 2019 年 1 月 | 60 |
1 | 2020 年 1 月 | 150 |
2 | 2020 年 1 月 | 90 |
3 | 2020 年 1 月 | 130 |
4 | 2020 年 1 月 | 40 |
增值 | 价值降低 |
---|---|
90 | 50 |
当然,在真实数据文件中,有数千个不同的ID。
在数据透视表中尝试过公式:
=IF(FILTER(Value, Month = "January 2019") > FILTER(Value, Month = "January 2020"), FILTER(Value, Data = "January 2019")-FILTER(Value, Data = "January 2020"), FILTER(Value, Data = "January 2020")-FILTER(Value, Data = "January 2019"))
在数据透视表中移动变量。 我得到的最接近的是将 ID 放在行中,将日期放在列中,将日期放在“差异”日期中,但我无法删除正/负值。
答:
1赞
Scott Craner
10/28/2023
#1
使用 LET:
阳性:
=LET(
ID,A2:A9,
m,B2:B9,
v,C2:C9,
u,UNIQUE(ID),
vl,BYROW(u,LAMBDA(z,SUMIFS(v,ID,z,m,"January 2020")-SUMIFS(v,ID,z,m,"January 2019"))),
ABS(SUM(FILTER(vl,vl>0))))
阴性:
=LET(
ID,A2:A9,
m,B2:B9,
v,C2:C9,
u,UNIQUE(ID),
vl,BYROW(u,LAMBDA(z,SUMIFS(v,ID,z,m,"January 2020")-SUMIFS(v,ID,z,m,"January 2019"))),
ABS(SUM(FILTER(vl,vl<0))))
评论
1赞
Mayukh Bhattacharya
10/28/2023
先生,您只能从一个公式中返回值ABS(SUM(FILTER(vl,vl>0)))
HSTACK(ABS(SUM(FILTER(vl,vl>0))),ABS(SUM(FILTER(vl,vl<0)))))
1赞
Scott Craner
10/28/2023
是的,如果他们愿意,我会让他们这样做。我想展示其中的区别。
2赞
P.b
10/28/2023
#2
=LET(i,A2:A9,m,B2:B9,v,C2:C9,
a,WRAPROWS(SORTBY(v,i,,m,),2),
d,DROP(a,,1),
t,TAKE(a,,1),
VSTACK("Value "&{"In","De"}&"creased",
HSTACK(SUM(IF(t<d,d-t,0)),
SUM(IF(t>d,d-t,0)))))
注意:此公式假定每个 ID 有两个值,一个用于旧年,一个用于新年。如果没有,则计算将关闭。
评论
1赞
Mayukh Bhattacharya
10/28/2023
啊,看起来我们也是以同样的方式思考的=)刚刚在Scott Sir的帖子中发表了评论WRAPCOLS()
1赞
Scott Craner
10/28/2023
这是否假设有 4 个唯一 ID?它是否假设它已排序?可能想解释一下公式中需要改变什么来处理Of Course in real data file there is thousands of different ID.
1赞
P.b
10/28/2023
我把它读成季度(每年 4 个),但对于这个评论,我怀疑这是一个好的假设。感谢您指出这一点。
1赞
P.b
10/28/2023
@ScottCraner,由于他正在比较 2 年,我将其从 wraprows 更改为 wrapcols(按 ID 排序,然后按月排序)。仅当所有 ID 都有 2 个值时,此解决方案才有效,否则会中断。
1赞
VBasic2008
10/28/2023
#3
拆分增加和减少
- 这假定每个月/年都具有相同的 ID。
- 不需要对数据进行排序(第一行按照屏幕截图中显示的方式对其进行排序:按 ID,然后按月)。
=LET(data,A2:C21,icol,1,mcol,2,vcol,3,
ds,SORT(data,HSTACK(icol,mcol),1),
m,CHOOSECOLS(ds,mcol),
mu,UNIQUE(m),
ms,DROP(mu,-1),
me,DROP(mu,1),
v,CHOOSECOLS(ds,vcol),
dr,DROP(REDUCE("",SEQUENCE(ROWS(ms)),LAMBDA(rr,r,LET(
vw,WRAPROWS(FILTER(v,(m=INDEX(ms,r))+(m=INDEX(me,r))),2),
cs,CHOOSECOLS(vw,1)-CHOOSECOLS(vw,2),
VSTACK(rr,HSTACK(SUM(IF(cs>0,cs,)),SUM(IF(cs<0,ABS(cs),))))))),1),
HSTACK(ms,me,dr))
评论