原表:
目标表:
案例模拟文件下载 http://gofile.me/4KHV7/SUo5ywXxC
我们来分享下不同思路的处理方式。
先展示一下网友蜗牛给的答案。
(一) 通过分组后逆透视后再用透视还原来完成。
1. 增加列判断归属,并向下填充。
Table.AddColumn(源, "自定义", each if Text.Contains([列1],"班") then [列1] else null) Table.FillDown(已添加自定义,{"自定义"})
2. 分组并进行内部计算
Table.Group(向下填充, {"自定义"}, {"计数", each Table.UnpivotOtherColumns( //逆透视 Table.PromoteHeaders( //提升标题 Table.TransformColumns( //转换 Table.Transpose( //转置 Table.RemoveColumns(_,"自定义") //去除标题 ), {"Column1",each try DateTime.ToText(_) otherwise "日期"} //判断是否为日期,非日期的改为标题日期 ) ), {"日期"}, "属性", "值" ) } )
我们对整个过程从内向外进行一下分解。针对单个分组我们来一步一步看。
A. 去除自定义列
Table.RemoveColumns(_,"自定义")
B. 表格转置
Table.Transpose([去除自定义])
C. 通过转换得到错误的值并用错误值替换的方式来命名日期列的标题。
Table.TransformColumns([转置],{"Column1",each try DateTime.ToText(_) otherwise "日期" } )
D. 提升标题
Table.PromoteHeaders([判断日期列并重命名])
E. 逆透视
Table.UnpivotOtherColumns([提升标题], {"日期"}, "属性", "值" )
到这一步,分组内的计算完成。
3. 展开,重命名,调整数据类型
4. 最后通过透视得到最终的结果
Table.Pivot(更改的类型, List.Distinct(更改的类型[属性]), "属性", "值"
再来看下简化的操作。
(二) 直接在分组表格里面修改标题进行合并
1. 到分割表格并转置这一步基本都一样
2. 提升标题
Table.PromoteHeaders([转置])
3. 更改包含"班"关键词的标题改为"时间"(最关键一步)
Table.TransformColumnNames([自定义.1], each if Text.Contains(_,"班") then Replacer.ReplaceText(_,_,"时间") else _)
4. 展开数据,筛选并调整后即可得到最终结果。
如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。