首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

M函数轻松学:庖丁解牛

泉鸣知水急,云来觉山近。

本文节选自即将出版的新书

对于数据处理而言,M函数最大的改革就是数据扁平化。也就是通过丰富的M函数体系及结构化数据之间的转换,将我们接触的最频繁的表格,像庖丁解牛一样拆成记录、列表、值。

拆散后的数据可以再次按要求通过M函数转换,或者说“组装”。让数据处理就像“搭积木”一样,轻松自如。本文这个例子就很好的展示了M函数的灵活自如。

我们需要将左表转换成更加适合分析的一维表数据

一、加载分析数据

使用「自表格/区域」的方式,将数据加载到Power Query编辑器,在弹出的创建表对话框中,取消勾选表包含标题。

将加载到Power Query编辑器的数据分成三大部分,表的第一行和第二行代表着部门和标题两个部分,剩下的是表格内容。

数据表在Power Query中分为三大部分

二、获取关键信息

先通过表格的深化获取部门,部门在数据表的第0行,单击公式编辑栏的fx输入公式:= 源{0},返回的是包含部门信息的记录。为了更好的进行后续操作将它转换成列表,同时删除列表中的null值。

最终公式为:

= List.RemoveNulls(Record.ToList(源{0}))

获取部门信息

通过表格深化获取列标题,列标题在源数据表的第1行,直接获取的标题列是重复的,需要删除重复。

单击公式编辑栏输入公式:

= List.Distinct(Record.ToList(源{1}))

获取表格内容是此次任务中比较困难的部分。既然已经将部门及列名保存在两个列表中了,那么可以将表的前两行删除,使用Table.Skip()函数

删除标题行

三、转换组合数据

此时表的内容是成对的出现,列1、列2是一组,列3、列4是一组,以此类推

我们可以用Table.ToColumns()函数将删除标题后的表转换成列表,然后再用List.Split()将列表两两拆分。

将表格内容转换成列表

此时的三个列表中都保存着两个列表,而列表中的内容正是姓名、年龄的组合。使用Table.FromColumns()函数,将列表中每一个列表转换成表。

将列表转换成表

从预览中可以看到,列正确的组合在一起了,可是列名是默认的。

Table.FromColumns()函数第二个参数可以直接提供列名,前面的步骤列名可以直接作为它的第二个参数,修改M代码为:

=List.Transform(转换成列表,each Table.FromColumns(_, 列名))

预览中的列已经被正确命名了。

直接引用步骤作为参数

现在正确包含标题的数据表已经包含在列表中了,但是还缺少了部门信息。部门也是一个列表,一样地使用Table.FromColumns()函数将它们组合成表格即可。

添加部门信息

最后将数据展开就可以了。

百余篇优质原创文章练习文件;

365天不限次数答疑;

持续更新的杂志级图表制作方法及源文件;

历次分享的优秀可视化仪表板模板。

…………

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O8_BYiDma1d3n2xPhzjloeNg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券