专栏名称: PowerBI星球
海量干货,帮你轻松上手 Power BI
51好读  ›  专栏  ›  PowerBI星球

掌握这个M函数,轻松利用PowerQuery批量处理多列数据

PowerBI星球  · 公众号  ·  · 2024-04-07 11:54

正文

在PowerQuery处理数据时,很多场景是通过添加自定义列来实现的,不过如果你需要的是转换表中的某一列或者多列,并不需要添加自定义列再删除原有列,还可以在原表的基础上一次性实现。
这里要用到的M函数是Table.TransformColumns,该函数返回对原表的指定列转换后的表。
先来看一下这个函数的语法:
Table.TransformColumns(
要转换的表,
对指定列执行操作的列表,
对除第二参数的其他列的转换,//可选
缺失字段处理  //可选



下面通过一个简单的数据处理为例,来看看这个函数的主要用法。
这是模拟的一个表,有5列,第一个是类别,其他4列是4个指标数据:

如果想对类别列添加个前缀“产品”,使用自定义列的方式也很简单,这里我们不用添加列的方式,而是直接对这个表操作,添加步骤,在编辑栏输入:
= Table.TransformColumns(
源,
{"类别",each "产品"&_}
)

这样第一列的每行的字符前面都添加上了“产品”字符。

如果不仅打算为第一列添加前缀,还想让第二行指标1的数据乘以100,可以这样写:
= Table.TransformColumns(
源,
{{"类别",each "产品"&_},{"指标1",each _*100}}
)

这样就一次性处理了两列:

如果不仅是指标1,而是除类别列以外的4个指标列都乘以100,就可以用到第三个参数,这样写更简单:
= Table.TransformColumns(
源,
{"类别",each "产品"&_},
each _*100
)

这样就一次性 把所有的列都转换好了:

如果在公式中输入表中不存在的列名,将会报错,比如你把“类别”错写成了“名称”,它将会报错并提示:找不到表的"名称"列:
输入公式时最好仔细检查,不过如果输入的并没有错,但是之后刷新时数据源的列名被更改了,也会导致报错,如果不想出现报错的情况,就可以利用Table.TransformColumns的第四参数来规避。

第四参数可以用下面两个值:

MissingField.UseNull:为不存在的列创建一个空值列

MissingField.Ignore:忽略不存在的列,其他列正常操作


对于上面的情况,可以写入第四参数忽略不存在的列:
= Table.TransformColumns(
源,
{{"名称",each "产品"&_},{"指标1",each _*100}},
null,
MissingField.Ignore
)

如果你想对某些特定列执行同样的操作,除了将这些列按照上面的方式一个个写出来,还可以结合List.Transform函数更快捷地实现。
假如打算对指标1、指标3、指标4这三列分别乘以100,可以先创建个这三个列名的列表,命名为指标:
然后添加步骤输入公式:
= Table.TransformColumns(
源,
List.Transform(指标, each {_, each _*100})
)






请到「今天看啥」查看全文