原始表:
目标表:
项目和时间在行列的顺序是互换的,这个肯定会涉及到转置功能。
我们看2种解法:
(一) 通过函数分割后转置合并。
我们看一个新函数Table.Partition。
Table.Partition(table as table, column as text, group as number, hash as function) as list
位置参数描述第1参数Table需要操作的表第2参数Text列名,文本形式第3参数Group分组的数量,数字格式第4参数Hash应用以获取哈希值的函数
解释:此作用主要是把表根据哈希值及制定分组数进行分割成单个table的列表。
1. 添加索引列并整除
2. 转换成3个独立的表,使用到Table.Partition函数
Table.Partition(被用整数除的列,"索引",3, each _)
解释:被用整数除的列代表之前的过程表; 索引代表根据内容进行的分组列名,需要文本格式,所以用""; 3代表分组的数量; each _代表之前的整个表。
这样我们得到3个独立的表。因为返回的结果是list格式,所以我们还需要转成Table格式。
3. 把这3个table里面的行列进行转置。
Table.AddColumn(转换为表, "自定义", each Table.Transpose( Table.RemoveColumns([Column1],"索引") ) )
因为索引列我们已经不需要了,所以在转置前把索引列给去除,然后在进行转置。
4. 对每一个表用表格里的第一列的第一个值作为表的说明。
Table.AddColumn(删除的其他列, "自定义.1", each [自定义][Column1]{0})
添加列并取自定义表的Column1列的第1行值作为表的说明。
5. 最后展开后筛选,调整,重命名标题即可。
(二) 使用自定义函数
之前我们有做过一个关于多列数据组合的自定义函数。
Power Query中如何把多列数据合并?
Power Query中如何把多列数据合并?升级篇
1. 先进行转置
2. 使用自定义函数进行多列合并
批量多列合并(转置表,Table.ColumnCount(转置表)/7,7,0)
解释:
第1参数代表需要处理的表,转置表代表上个过程的表
第2参数代表是循环次数,这里实际转换是3,代表3组数据进行合并,我们这里使用了函数可以相对自动化的获取循环次数。
第3参数是多少列作为一组进行转换,这里是7个列进行。
第4参数是代表是否需要固定列,这不存在固定列,所以用0代表。
3. 添加自定义列标注数据归属
try if Text.Contains([Column1],"班") then [Column1] else null otherwise null
解释:
因为归属的字段里面都有个"班"字,所以以这个为条件进行判断,但是第1列当中既有文本格式,又有日期格式,所以直接使用文本函数,在判断日期的时候会出错,所以这里使用了try...otherwise...函数来进行处理。
4. 最后通过提升标题,筛选数据,重命名列名等整理数据即可