Power Query 实战案例第 5 期 元数据:请求参战

处理前:file
处理模板:file
处理后:file
获取对应姓名对应日期的工作班次

先说下思路,将表1里面每一个日期行中每一个姓名赋值对应的班次,然后将姓名当做表的标题,赋值的班次作为对应姓名列的内容,然后合并起来再与模板表的姓名标题合并,实现按模板表的姓名获取对应的班次。
但是要实现必须在不修改每个姓名的前提下,增加对应的班次,这不就是元数据吗????

先上载进入PQ,筛选掉多余行,只保留班次行与日期行,并且删除多余列。
file
之后转置表格,将Column1列使用Table.FillDown向下填充,之后使用Table.ToRows将每行转换成List。
file
List里面第一个值就是要添加进姓名的元数据里面的内容,使用List.Transform循环外面的List,再使用一次List.Transform
对里面的List进行循环添加元数据,注意这里第二层的List要使用List.Skip跳过第一个值,因为第一个值是不需要保留的元数据,每个姓名使用Text.Trim去除首尾的空格,添加进的元数据为固定的第二层List的第一个值。
最后使用List.Zip重新组合List,成为每行List对应一个日期行的姓名。
file
下面就对经过List.Zip重新组合之后的List进行循环使用#table创建表,注意需要先使用List.RemoveNulls去除每个List里面的null,#table第一参数为去除null的List,第二参数需要再使用List.Transform利用Value.Metadata显示每个姓名的元数据。
file
然后将表格合并Table.Combine
file
然后使用模板表的姓名标题表连接本表。
file
file
之后上载进入表,然后取消标题行,修改表格样式,拖到对应位置。
file
file
OK
END
ლ(╹◡╹ლ)
id=59216719
file

Ntt.Docomo