问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Power Query中的List.Sum函数详解

创作时间:
作者:
@小白创作中心

Power Query中的List.Sum函数详解

引用
CSDN
1.
https://blog.csdn.net/WealthLucky/article/details/142600213

本文主要介绍了Power Query中的M函数List.Sum的使用方法,包括横向求和、列求和、求总和以及求部分占总体比重等应用场景。通过具体的代码示例和步骤说明,帮助读者理解List.Sum函数在不同情况下的使用方式。

M函数-List

列表求和(List.Sum)

List.Sum({里面必须是一整个列表,不是零碎的})

返回列表中非空的所有值的总和

例如:List.Sum({1,2,3}) 表示求{1,2,3}这样一个列表的和,也就是6

通常嵌套使用

1)横向求和

这是直接选项卡添加自定义列来求和的写法:

直接语数英相加

用M函数的话:

= Table.AddColumn
(
    提升的标题,
    "总分",
    each List.Sum({[Chinese],[Math],[English]})
)

同样的字段,但是要多加两层括号

2)列求和

思路

  1. 首先对列求和要提取出这一列:表[字段],再用 List.Sum(表[字段]) 对列求和。本身已经是列表了,不需要再加{}大括号

  2. 再用 [键值对] 的形式写出 记录。[字段1=List.Sum(表[字段1]),[字段2=List.Sum(表[字段2])]。不需要求和的记录直接赋值:例,姓名="各科总分"

  3. 接着是将记录转成表。用 Table.FromRecords({记录})。记录要先转 列表 ,再转表,所以外面要先加{}大括号

  4. 最后将现今的表 和 转成的表 合并。用 & 连接就可以了。注意先后顺序

实操

假设我要 求 语数英 各科目的总分

利用高级编译器来写,位置如下:

在结束之前,每一步后面都跟上一个逗号,输出结果写在 in 后面

源=Excel.CurrentWorkbook(){[Name="表10"]}[Content],
列求和记录= [NAME="各科总分",
Chinese=List.Sum(源[Chinese]),
Math=List.Sum(源[Math]),
English=List.Sum(源[English])],
转表 =Table.FromRecords({列求和记录}),
合并表 =源&转表

相当于是把每一步拆开,逻辑更加清晰,结果如下:

3)求总和

其实也就是同时求多列的和, 因为 List.Sum 里只包含一个列表, 所以要把它们整合成一个列表可以用&来连接 ,例如:

=List.Sum(更改的类型[北京] & 更改的类型[上海] & 更改的类型[深圳])

4)求部分占总体的比重

横向

也就是用横向求和 去除以总和 单单这么做只会得出一个数字,要每一列都用上的话,那就需要【添加列】AddColumn

横向的和:List.Sum({[A],[B],[C]})

总和:List.Sum(更改的类型[A] & 更改的类型[B] & 更改的类型[C])

= Table.AddColumn(更改的类型,"占比",each List.Sum({[A],[B],[C]})/List.Sum(更改的类型[A] & 更改的类型[B] & 更改的类型[C]),Percentage.Type)

Percentage.Type 是用来更改新增这列的类型为【百分比】的,不加它,就默认是小数喽~

竖向

步骤如下:缺点是占比不是百分比的形式

生成新记录 = [Month="占比",A=List.Sum(更改的类型[A])/List.Sum(更改的类型[A] & 更改的类型[B] & 更改的类型[C]),B=List.Sum(更改的类型[B])/List.Sum(更改的类型[A] & 更改的类型[B] & 更改的类型[C]),C=List.Sum(更改的类型[C])/List.Sum(更改的类型[A] & 更改的类型[B] & 更改的类型[C])],
转表 = Table.FromRecords({生成新记录}),
合并表 = 更改的类型 & 转表
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号