ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1091|回复: 12

[求助] 按产品编号,拆分发生额问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-3 13:45 | 显示全部楼层 |阅读模式
本帖最后由 ljxxw 于 2023-5-3 13:47 编辑

请教各位老师:



不同产品的发生明细,想用某个固定数拆分列式如下:
详见附件


用函数公式、或者Power Query实现都行。

固定金额拆分.png

拆分1.zip

9.79 KB, 下载次数: 19

TA的精华主题

TA的得分主题

发表于 2023-5-3 14:49 | 显示全部楼层
本帖最后由 静听溪流 于 2023-5-3 14:52 编辑

=MIN(C2,E2-SUMIF(A$1:A1,A2,G$1:G1))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-3 16:34 | 显示全部楼层
这种涉及相邻行(更准确的说是递归)计算的问题,还是公式更为简洁易懂。

PQ写出来就比较难看了
  1. let
  2.     Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZY1LDoAgDETv0jVJP3yEpXoMwv2vYauCGDaTaV8yr1bYwQEjBRQSsU6kWQiaq3BolYjkjdrfW0ieaEISpVzsWHFGSoazHmGm5+ONw3vvc/ioiaWLy0LTu1z68o+qd+tejgO3Cw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Code = _t, Date = _t, Qty = _t, Split = _t]),
  3.     #"Changed Type" = Table.TransformColumnTypes(Source,{{"Code", type text}, {"Date", type date}, {"Qty", Int64.Type}, {"Split", Int64.Type}}),
  4.    
  5.     #"Split by Code" = Table.Group(
  6.             #"Changed Type",
  7.             "Code",
  8.             {"Grp", each
  9.                 let
  10.                     split = [Qty],
  11.                     total = [Split]{0},
  12.                     arr = List.Accumulate({0..Table.RowCount(_)-1}, {}, (s,c) => let remain = total-(List.Sum(s)??0)
  13.                 in
  14.                     if remain >= split{c} then s&{split{c}} else s&{remain}) in Table.FromColumns(Table.ToColumns(_) & {arr}, Table.ColumnNames(Source) & {"Arrangement"})
  15.             }
  16.     ),
  17.     #"Expanded Grp" = Table.ExpandTableColumn(#"Split by Code", "Grp", {"Date", "Qty", "Split", "Arrangement"})
  18. in
  19.     #"Expanded Grp"
复制代码
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-3 17:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ljxxw 于 2023-5-3 19:03 编辑
静听溪流 发表于 2023-5-3 14:49
=MIN(C2,E2-SUMIF(A$1:A1,A2,G$1:G1))

谢谢 静听溪流 老师  答复!

G列是没有的,是我演示的效果,=MIN(C2,E2-SUMIF(A$1:A1,A2,G$1:G1))里不用G列,公式该怎么写呢?

哦对的,不好意思,是我理解错了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-3 23:20 | 显示全部楼层
本帖最后由 ljxxw 于 2023-5-4 21:13 编辑
ThxAlot 发表于 2023-5-3 16:34
这种涉及相邻行(更准确的说是递归)计算的问题,还是公式更为简洁易懂。

PQ写出来就比较难看了

非常谢谢  ThxAlot  老师答复!!
日期都正常,为何PQ里有6处提示:
DataFormat.Error: 无法分析提供给 Date 值的输入。
详细信息:  25/03/2020

ThxAlot  老师在吗?
日期.png

TA的精华主题

TA的得分主题

发表于 2023-5-7 14:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ljxxw 发表于 2023-5-3 23:20
非常谢谢  ThxAlot  老师答复!!
日期都正常,为何PQ里有6处提示:
DataFormat.Error: 无法分析提供给 ...

修改为: {"Date", type text}就不会报错了。

TA的精华主题

TA的得分主题

发表于 2023-5-7 15:28 | 显示全部楼层
仅用最终截图的前三列。我遇事不决Acc,不过对于初学者来说,光看这花括号都容易看花了,仅供参考:


B.jpg

代码如下:

  1. = #table(Table.ColumnNames(源)&{"拆分后"},List.Accumulate(Table.ToRows(源),{{},0},(x,y)=>if y{0}<>List.Last(x{0}){0}? then {x{0}&{y&{List.Min(List.LastN(y,2))}},y{3}-y{2}} else if x{1}-y{2}>=0 then {x{0}&{y&{y{2}}},x{1}-y{2}} else {x{0}&{y&{List.Max({x{1},0})}},x{1}-y{2}}){0})
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-8 21:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
14820103 发表于 2023-5-7 14:39
修改为: {"Date", type text}就不会报错了。

修改为:{"Date", type text}会变成文本格式,不再是日期了,
可以加一条语句:= Table.TransformColumns(Source,{"Date",each Date.FromText(_,[Format="d/MM/yyyy",Culture="cn-zh"])})

TA的精华主题

TA的得分主题

发表于 2023-5-8 23:00 | 显示全部楼层
ljxxw 发表于 2023-5-8 21:43
修改为:{"Date", type text}会变成文本格式,不再是日期了,
可以加一条语句:= Table.TransformColum ...

请教,为啥再更改类型已经是日期还会出错。还需后续再做一次定义。

TA的精华主题

TA的得分主题

发表于 2023-5-9 09:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 19:55 , Processed in 0.052431 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表