八、 如果实现多维数据转换成一维数据?
原始表:
原始表目标表:
目标表项目和时间在行列的顺序是互换的,这个肯定会涉及到转置功能。
我们看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. 最后展开后筛选,调整,重命名标题即可。
(二) 使用自定义函数
之前我们有做过一个关于多列数据组合的自定义函数。
多列数据组合
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...函数来进行处理。
网友评论