既然是excel,楼主可有听说过power query?
power query可以将操作的步骤保留下来,相当于编程,以后可以自动处理。
表1、表2都是多维表,我们可以把多维表逆透视成一维表,再转化为多维表。
虽然下面的内容多,但实际上基本鼠标点点就可以,如果做不下来,可以按照文末的方法把代码粘贴进去。
步骤如下截图:
选中数据区域,切换到“数据”选项卡,点“来自表格/区域”,
弹出窗口“创建表”,不要勾选“表包含标题”,点确定后进入power query编辑器。
现在开始第一步,把多维表还原成一维表。
切换到“转换”选项卡,点左边“转置”,这样列Column1是日期,Column2是类型。
还是在“转换”选项卡,左边第二个按钮是“将第一行用作标题”,点完之后姓名变成了标题。
选中列Column1和列Column2,点击“逆透视列”右边的小三角,点击“逆透视其他列”,到这个步骤,已经把多维表转换为一维表。
在现在这个阶段把Column1转化为日期格式,选中列Column1,还是在“转换”选项卡,点击右侧“日期”右边的小三角,点击“仅日期”
从现在的步骤开始,我们把一维表转换为多维表。
选中列Column1,点击“转换”选项卡下,任意列的“透视列”,弹出的窗口,值列选择数字所在的列,点确定。
如果点完之后,像我一样姓名列在第二列,直接把姓名列拖到前面。如果想改变列名称,双击列名改名
然后点列右边的小三角,升序排序,现在已经是我们想要的多维表。
是不是觉得上面的步骤太琐碎了?没关系,你可以复制我的步骤,在打开power query页面后,切换到“主页”选项卡,点击高级编辑器。开始改代码。
你的代码应该是这样的:
```m
let
源 = Excel.CurrentWorkbook(){[Name="表3"]}[Content]
in
源
```
前面两行不要动,从in开始(包括in),把我的代码从转置表 = Table.Transpose(源),这一行(包括这一行)复制并覆盖过去。
```m
let
源 = Excel.CurrentWorkbook(){[Name="表5"]}[Content],
转置表 = Table.Transpose(源),
提升的标题 = Table.PromoteHeaders(转置表, [PromoteAllScalars=true]),
逆透视的其他列 = Table.UnpivotOtherColumns(提升的标题, {"Column1", "Column2"}, "属性", "值"),
提取的日期 = Table.TransformColumns(逆透视的其他列,{{"Column1", DateTime.Date, type date}}),
重排序的列 = Table.ReorderColumns(提取的日期,{"Column1", "属性", "Column2", "值"}),
已透视列 = Table.Pivot(Table.TransformColumnTypes(重排序的列, {{"Column1", type text}}, "zh-CN"), List.Distinct(Table.TransformColumnTypes(重排序的列, {{"Column1", type text}}, "zh-CN")[Column1]), "Column1", "值", List.Sum),
重命名的列 = Table.RenameColumns(已透视列,{{"属性", "姓名"}}),
排序的行 = Table.Sort(重命名的列,{{"姓名", Order.Ascending}, {"Column2", Order.Descending}})
in
排序的行
``` |