如何得到明细列之和于合计列的新列

Power Query Levyna ⋅ 于 2018-08-28 22:51:44 ⋅ 最后回复由 wdx223 2018-10-13 08:38:55 ⋅ 3429 阅读

file
file

本帖已被设为精华帖!
本帖由 Alex 于 6年前 加精
成为第一个点赞的人吧 :bowtie:
最佳答案
  • 大海 公众号【Excel到PowerBI】
    2018-08-29 08:39:50

    其实,问题中描述的条件在一定程度上把问题给复杂化了,经沟通确认,该问题的需求只是将明细数据从小往大用于凑成合计数的过程,当某一个明细数参与累计达到或超过合计数后,仅取其中满足合计数的差额。在Excel中解法如下:

    file

    用同样的思路在Power Query中实现也比较简单,关键步骤如下:

    1、两表合并查询并排序后,分组添加各Id的索引(按后面算法也可不分组直接添加索引)

    file

    2、添加自定义列计算各Id累计到当前行的和

    file

    3、添加自定义列计算得到结果

    file

回复数量: 5
  • 大海 公众号【Excel到PowerBI】
    2018-08-29 08:39:50

    其实,问题中描述的条件在一定程度上把问题给复杂化了,经沟通确认,该问题的需求只是将明细数据从小往大用于凑成合计数的过程,当某一个明细数参与累计达到或超过合计数后,仅取其中满足合计数的差额。在Excel中解法如下:

    file

    用同样的思路在Power Query中实现也比较简单,关键步骤如下:

    1、两表合并查询并排序后,分组添加各Id的索引(按后面算法也可不分组直接添加索引)

    file

    2、添加自定义列计算各Id累计到当前行的和

    file

    3、添加自定义列计算得到结果

    file

  • Levyna
    2018-08-29 09:21:10

    我发现在求累计和的时候,一旦一个Id中一旦有重复值,累计和就不对了

    file

  • 大海 公众号【Excel到PowerBI】
    2018-08-29 09:44:07

    @Levyna 加索引做判断,不要直接利用原数据的大小判断。

  • Levyna
    2018-08-29 10:58:34

    谢谢大海老师引导,已解决
    this is code
    let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    更改的类型 = Table.TransformColumnTypes(源,{{"Id", type text}, {"明细", Int64.Type}}),
    合并的查询1 = Table.NestedJoin(更改的类型,{"Id"},表2,{"Id"},"表2",JoinKind.LeftOuter),
    a = Table.ExpandTableColumn(合并的查询1, "表2", {"合计"}, {"合计"}),
    排序的行 = Table.Sort(a,{{"Id", Order.Ascending}, {"明细", Order.Ascending}}),
    已添加自定义1 = Table.Group(排序的行, "Id", {{"计数",each Table.AddIndexColumn(_,"Index",1),type table}}),

    "展开的“计数”" = Table.ExpandTableColumn(已添加自定义1, "计数", List.RemoveItems(Table.ColumnNames(已添加自定义1{0}[计数]),{"Id"})),

    已添加自定义 = Table.AddColumn(#"展开的“计数”", "累计明细", each List.Sum(Table.SelectRows(#"展开的“计数”",(x)=> x[Index]<=[Index] and x[Id]=[Id])[明细])),
    已添加条件列 = Table.AddColumn(已添加自定义, "结果", each if [累计明细] <= [合计] then [明细] else if [明细]-([累计明细]-[合计]) < 0 then 0 else [明细]-([累计明细]-[合计]))

    in
    已添加条件列

  • wdx223
    2018-10-13 08:38:55

    let
    HJ = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
    MX = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    Custom1 = Table.Group(MX,"ld",{"n",each List.Accumulate(List.Sort([明细],1),{},(x,y)=>x&{List.Min({Table.SelectRows(HJ,(h)=>h[ld]=[ld]{0})[合计]{0}-List.Sum(x),y})})}),

    "Expanded {0}" = Table.ExpandListColumn(Custom1, "n")

    in

    "Expanded {0}"

暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter