【Power Query】(表与列表的转换)Table.FromColumns & Table.ToColumns & Table.ToRows & Table.FromRows

Table.ToColumns【按列转列表】

语法很简单,Table.ToColumns(表名)
不局限于原表,每一个步骤也是一个表
结果是一个大列表。里面的每一个元素是一个小列表,每个列表对应原来表里的每一列~如图:
在这里插入图片描述

Table.FromColumns【表来自列】

Table.FromColumns({列表1,列表2},{“标题1”,“标题2”})
例如:= Table.FromColumns({{1,2,3},{4,5,6},{7,8,9,10}},{“A”,“B”,“C”})
在这里插入图片描述

包含 {两个大列表},每个参数都要用一个{}括起来
第一个是列表集,逗号隔开:{list1,list2,list3}
——列表集中元素的个数可以不相同,少的部分默认null补齐
第二个是标题 / 字段,一一对应,需要加"双引号",例如:{“姓名”,“学号”,“年龄”}
——标题如果不想手动加,也可以Table.ColumnNames(源)
如果不写标题,就默认是Column1、Column2…

Table.ToRows【按行转列表】

语法:Table.ToRows(表)
结果是一个列表里包含着n个list,每个list,对应每一行。不包含标题
在这里插入图片描述

Table.FromRows【表来自行】

语法:Table.FromRows(列表集,标题),标题可不写
要求:列表集中每个列表的元素个数必须一致
例如:= Table.FromRows({{1,2,3},{4,5,6},{7,8,9}},{“A”,“B”,“C”})
在这里插入图片描述

示例1:求行总计 & 列总计

在这里插入图片描述

(1)横向求合计

也就是求每个人这3个月的总和
思路:先新添一列,提取出每一行的record,将records 转成 list,再将列表中不是数值的元素剔除,这里可以直接skip 跳过。最后就可以直接求和了。
参考写法:
= Table.AddColumn(源,“合计”,each List.Sum(List.Skip(Record.ToList(_)))
注:Skip 默认跳过第一个元素,所以第2参数可以不写
在这里插入图片描述

(2)纵向求合计

在这里插入图片描述

思路:
将表Table 转成列表 Table.ToColumns,这样每一列都分别为一个列表。再直接在这个基础上遍历List.Transform,将每个列表都求和,当然第一列都是文本会出错,可以用 try…otherwise…来避免。正好我想把不能运算的第一列变成“总计”两个字。那么:try List.Sum(_) otherwise “合计”。这时候还是一个list,需要转表Table.FromRows。最后和原表连接起来。

一步写完:
= 源 & Table.FromRows({List.Transform(Table.ToColumns(源),each try List.Sum(_)
otherwise “合计”)},Table.ColumnNames(源))

分步骤:
(a)思路:表转列
表转列= Table.ToColumns(源)
(b)思路:遍历,报错返回:总计
遍历并合计= List.Transform(表转列,each try List.Sum(_) otherwise “合计”)
(c)思路:表来自行,并加上表头
表来自行= Table.FromRows({遍历并合计},Table.ColumnNames(源))
(d)两张表连接
合并= 源 & 表来自行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值