原始表:
目标表:
项目和时间在行列的顺序是互换的,这个肯定会涉及到转置功能。 我们看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的列表。
Table.Partition(被用整数除的列,"索引",3, each _)
解释:
被用整数除的列
代表之前的过程表;索引
代表根据内容进行的分组列名,需要文本格式,所以用"";3
代表分组的数量;each _
代表之前的整个表。
这样我们得到3个独立的表。因为返回的结果是list格式,所以我们还需要转成Table格式。
Table.AddColumn(转换为表, "自定义", each
Table.Transpose(
Table.RemoveColumns([Column1],"索引")
)
)
因为索引列我们已经不需要了,所以在转置前把索引列给去除,然后在进行转置。
Table.AddColumn(删除的其他列, "自定义.1", each [自定义][Column1]{0})
添加列并取自定义表的Column1列的第1行值作为表的说明。
之前我们有做过一个关于多列数据组合的自定义函数。
批量多列合并(转置表,Table.ColumnCount(转置表)/7,7,0)
解释: 第1参数代表需要处理的表,转置表代表上个过程的表 第2参数代表是循环次数,这里实际转换是3,代表3组数据进行合并,我们这里使用了函数可以相对自动化的获取循环次数。 第3参数是多少列作为一组进行转换,这里是7个列进行。 第4参数是代表是否需要固定列,这不存在固定列,所以用0代表。
try if Text.Contains([Column1],"班") then [Column1] else null otherwise null
解释: 因为归属的字段里面都有个"班"字,所以以这个为条件进行判断,但是第1列当中既有文本格式,又有日期格式,所以直接使用文本函数,在判断日期的时候会出错,所以这里使用了try...otherwise...函数来进行处理。