Power Query 中用于数据整理的转换函数

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

使用 Azure 数据工厂中的数据整理,可以通过将 Power Query M 脚本转换为数据流脚本,进行云规模的无代码敏捷数据准备和整理。 ADF 与 Power Query Online 集成,并通过执行 Spark 使用数据流 Spark 基础结构,使 Power Query M 函数可用于数据整理。

目前,尽管在创作过程中可以使用 Power Query M 函数,但并非所有的 Power Query M 函数都支持用于数据处理。 在构建 Power Query 混合时,如果函数不受支持,系统将提示以下错误消息:

UserQuery : Expression.Error: The transformation logic is not supported as it requires dynamic access to rows of data, which cannot be scaled out.

下面列出了支持的 Power Query M 函数。

列管理

行筛选

使用 M 函数 Table.SelectRows 根据以下条件进行筛选:

添加和转换列

以下 M 函数添加或转换列:Table.AddColumnTable.TransformColumnsTable.ReplaceValueTable.DuplicateColumn。 下面是支持的转换函数。

合并/联接表

  • Power Query 将生成嵌套联接(Table.NestedJoin;用户还可以手动写入 Table.AddJoinColumn)。 然后,用户必须将嵌套联接列扩展为非嵌套联接(Table.ExpandTableColumn,在任何其他上下文中不受支持)。
  • 可以直接写入 M 函数 Table.Join,以避免执行额外的扩展步骤,但用户必须确保联接表中没有重复的列名
  • 支持的联接类型:Inner、LeftOuter、RightOuter、FullOuter
  • Value.EqualsValue.NullableEquals 都支持用作键值等同性比较器

Group by

使用 Table.Group 聚合值。

排序

使用 Table.Sort 对值进行排序。

减少行

保留和删除前几行,保留范围(对应的 M 函数,仅支持计数,而不支持条件:Table.FirstNTable.SkipTable.RemoveFirstNTable.RangeTable.MinNTable.MaxN

不支持的已知函数

函数 状态
Table.PromoteHeaders 不支持。 可以通过在数据集中设置“第一行作为页眉”来实现相同的结果。
Table.CombineColumns 这是一个不直接支持的常见方案,但可通过添加一个连接两个给定列的新列来实现。 例如,Table.AddColumn(RemoveEmailColumn、"Name"、each [FirstName] & " " & [LastName])
Table.TransformColumnTypes 大多数情况下都支持此项。 不支持以下方案:将字符串转换为货币类型,将字符串转换为时间类型,将字符串转换为百分比类型,以及用区域设置进行转换。
Table.NestedJoin 仅执行联接将导致验证错误。 必须对列进行扩展,才能使其正常工作。
Table.RemoveLastN 不支持删除最后几行。
Table.RowCount 不支持,但可通过添加包含值 1 的自定义列,然后使用 List.Sum 聚合该列来实现。 支持 Table.Group。
行级别错误处理 当前不支持行级别错误处理。 例如,若要筛选出列中的非数字值,一种方法是将文本列转换为数字。 无法转换的每个单元都将处于错误状态,需要对其进行筛选。 此方案在向外扩展的 M 中无法进行。
Table.Transpose 不支持

M 脚本解决方法

SplitColumn

下面列出了一个备用项,用于按长度和位置拆分

  • Table.AddColumn(Source, "First characters", each Text.Start([Email], 7), type text)
  • Table.AddColumn(#"Inserted first characters", "Text range", each Text.Middle([Email], 4, 9), type text)

可从功能区中的“提取”选项访问此选项

Power Query Add Column

Table.CombineColumns

  • Table.AddColumn(RemoveEmailColumn, "Name", each [FirstName] & " " & [LastName])

透视

  • 从 PQ 编辑器中选择“透视转换”,然后选择透视列

Power Query Pivot Common

  • 接下来,选择值列和聚合函数

Power Query Pivot Selector

  • 单击“确定”时,将看到编辑器中数据已使用透视值进行更新
  • 还会看到一条警告消息,指出转换可能不受支持
  • 若要修复此警告,使用 PQ 编辑器手动展开透视列表
  • 从功能区中选择“高级编辑器”选项
  • 手动展开透视值列表
  • 将 List.Distinct() 替换为值列表,如下所示:
#"Pivoted column" = Table.Pivot(Table.TransformColumnTypes(#"Changed column type 1", {{"genres", type text}}), {"Drama", "Horror", "Comedy", "Musical", "Documentary"}, "genres", "Rating", List.Average)
in
  #"Pivoted column"

设置日期/时间列的格式

要在使用 Power Query ADF 时设置日期/时间格式,请按照以下设定来设置格式。

Power Query Change Type

  1. 在 Power Query UI 中选择列,然后选择“更改类型”>“日期/时间”
  2. 你将看到一条警告消息
  3. 打开高级编辑器,并将 TransformColumnTypes 更改为 TransformColumns。 根据输入数据指定格式和区域性。

Power Query Editor

#"Changed column type 1" = Table.TransformColumns(#"Duplicated column", {{"start - Copy", each DateTime.FromText(_, [Format = "yyyy-MM-dd HH:mm:ss", Culture = "en-us"]), type datetime}})

了解如何在 ADF 中创建数据整理 Power Query