表格 “” 数字 “” 列尝试将单元格数字拆分为单个数字 求和

Power Query txb ⋅ 于 2018-11-19 17:31:50 ⋅ 最后回复由 txb 2018-11-21 11:41:51 ⋅ 2989 阅读

学习中,想将数字列里的数字单个相加求和,结果出错,求原因

filefile

最佳答案
  • 飞天篮球 Talk is cheap, show me your code.
    2018-11-19 21:29:14

    出错原因施阳大神已经分析了,以下语句供参考:

    Solution 1:

    = Table.AddColumn(源,"合计",each List.Sum(List.Transform(Text.ToList(Text.From([数字])),Number.From)))

    Solution 2:

    = Table.AddColumn(源,"合计",each Expression.Evaluate(Number.ToText([数字],Text.Repeat("+0",11))))

    Solution 3:

    = let fx=(x,y)=>if x<10 then x+y 
                   else @fx(Number.IntegerDivide(x,10),Number.Mod(x,10)+y) 
       in fx(123456789,0)
回复数量: 6
  • Alex MOD 社区清洁工
    2018-11-19 21:02:44

    语法问题,List.Transform 第一参数类型是 list,加上 each 就成了 function 了,所以要去掉。
    另外括号的位置不对,Number.FromList.Transform 的参数,前面那个括号放到最后去。

  • 飞天篮球 Talk is cheap, show me your code.
    2018-11-19 21:29:14

    出错原因施阳大神已经分析了,以下语句供参考:

    Solution 1:

    = Table.AddColumn(源,"合计",each List.Sum(List.Transform(Text.ToList(Text.From([数字])),Number.From)))

    Solution 2:

    = Table.AddColumn(源,"合计",each Expression.Evaluate(Number.ToText([数字],Text.Repeat("+0",11))))

    Solution 3:

    = let fx=(x,y)=>if x<10 then x+y 
                   else @fx(Number.IntegerDivide(x,10),Number.Mod(x,10)+y) 
       in fx(123456789,0)
  • RICH
    2018-11-20 14:12:41

    学习一下,解2与解3看不懂,能讲解一下吗

  • 飞天篮球 Talk is cheap, show me your code.
    2018-11-20 14:48:57

    @RICH

    法2中:
    Number.ToText([数字],Text.Repeat("+0",11))
    这部分你把它拆开来就知道怎么回事了,比如,Number.ToText(123,"+0+0+0") 结果就是数字123变成了+1+2+3,如果后边格式中的+0的个数比数字位数要多,就会在前边用+0补足。Text.Repeat("+0",11)就是重复11次“+0”。这里取值11次,是因为数字超过11位就变成科学计数了,再相加就没啥意义了,所以取了个临界值。最外层Expression.Evaluate的作用是对表达式返回计算结果。关于Expression.Evaluate,可参考施阳的文章:https://pqfans.com/1232.html

    法3叫递归,我也是写着玩的。fx=(x,y)=>if x<10 then x+y else @fx(商,余数相加), 意思就是把数字除以10,得到的商再除以10,只要商大于等于10就不停地把商除以10,直到商小于10了就跳出循环,然后每一次所得的余数就是各个位置上的数字,相加就得到结果了。关于递归,可以参考施阳的文章:https://pqfans.com/2196.html

    Abv fyi.

  • RICH
    2018-11-20 15:10:21

    太神奇了,谢谢。

  • txb
    2018-11-21 11:41:51

    感谢大神,刚刚学习,好多概念没弄清楚,在继续研究大神的指点和代码!!

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