Power Query 中的数据类型

Power Query 中的数据类型用于对值进行分类,以获得更具结构化的数据集。 数据类型在字段级别定义 — 字段内的值设置为符合字段的数据类型。

列的数据类型显示在列标题的左侧,并带有表示该数据类型的图标。

显示数据预览窗格中表列标题左侧显示的常见数据类型图标。

注意

Power Query 基于列的数据类型提供一组上下文转换和选项。 例如,选择数据类型为 Date 的列时,将获得适用于该特定数据类型的转换和选项。 这些转换和选项贯穿于 Power Query 界面,例如转换添加列选项卡和智能筛选器选项。

下表列出了 Power Query 中使用的最常见数据类型。 尽管并非本文的介绍范围,但您可以在 Power Query M 公式语言类型文章中找到数据类型的完整列表。

数据类型 Icon 说明
文本 Text。 一个 Unicode 字符数据字符串。 可以是以文本格式表示的字符串、数字或日期。 最大字符串长度为 268,435,456 个 Unicode 字符(其中每个 Unicode 字符为两个字节)或 536,870,912 个字节。
True/False True/False。 布尔值(True 或 False)。
十进制数 十进制数。 表示 64 位(八字节)浮点数。 这是最常见的数字类型,与您通常认为的数字相对应。 虽然设计用于处理具有小数的数字,但也处理整数。 十进制数类型可以处理从 –1.79E +308 到 2.23E –308, 0, 之间的负值,以及从 2.23E –308 到 1.79E + 308 之间的正值。 例如,像 34、34.01 和 34.000367063 这样的数字是有效的十进制数。 可以用十进制数类型表示的最大精度为 15 位。 小数分隔符可出现在数字的任意位置。 十进制数字类型对应于 Excel 存储其数字的方式。 请注意:二进制浮点数不能以 100% 的精度表示其支持范围内的所有数字。 因此,在表示某些十进制数时,可能会出现精度上的微小差异。
定点小数 币种。 也称为 Currency 类型,此数据类型具有固定的十进制分隔符位置。 十进制分隔符的右边总是有四位数字,并可以表示有意义的 19 位数。 它能表示的最大值是 922,337,203,685,477.5807(正或负)。 与“十进制数”不同,“固定十进制数”类型始终精确,因此在浮点表示法不精确可能会导致错误的情况下非常有用。
整数 整数。 表示 64 位(八字节)整数值。 由于它是一个整数,因此其小数位数右侧没有数字。 它允许 19 位数字;介于 –9,223,372,036,854,775,807 (–2^63+1) 与 9,223,372,036,854,775,806 (2^63–2) 之间的正整数或负整数。 它可以表示各种数字数据类型的最大可能精度。 与“固定十进制数”类型一样,“整数”类型在需要控制舍入的情况下非常有用。
百分比 百分比。 从根本上来说与十进制数字类型相同,但它具有掩码,用于在 Power Query 编辑器窗口中将列中值的格式设置为百分比。
日期/时间 日期/时间。 表示日期和时间值。 在后台,日期/时间值存储为十进制数类型,因此您实际上可以在两者之间进行转换。 日期的时间部分以 1/300 秒(3.33 毫秒)的分数到整数倍的形式存储。 支持 1900 年到 9999 年之间的日期。
日期 日期。 仅表示日期(无时间部分)。 转换为模型时,Date 与日期/时间值相同,分数值为零。
时间 时间。 仅表示时间(无日期部分)。 转换为模型后,“时间”值与“日期/时间”值相同,小数点左侧没有数字。
日期/时间/时区 日期/时间/时区。 表示具有时区偏移量的 UTC 日期/时间。 加载到模型中时,它会转换为日期/时间。
Duration 持续时间。 表示时间长度,在加载到模型中时,该时间长度将转换为十进制数类型。 作为十进制数字类型,可以从“日期/时间”字段中加上或减去,并得到正确的结果。 因为它是十进制数字类型,因此可以轻松地在显示数量级的可视化效果中使用它。
二进制 二进制。 二进制数据类型可用于表示具有二进制格式的任何其他数据。
任意 任何。 Any 数据类型是提供给没有显式数据类型定义的列的状态。 Any 是对所有值进行分类的数据类型。 建议始终显式定义来自非结构化源的查询的列数据类型,并避免使用任何具有 Any 数据类型的列作为查询的输出。

数据类型检测

连接到以下情况时,会自动进行数据类型检测:

  • 结构化数据源(如数据库),Power Query 从数据源读取表架构,并通过为每列使用正确的数据类型自动显示数据。

  • 非结构化源(如 Excel、CSV 和文本文件),Power Query 通过检查表中的值自动检测数据类型。 默认情况下,在 Power Query 中为非结构化源启用了自动数据类型检测。

您还可以使用转换选项卡中任何列组中的检测数据类型命令自动检测表中列的数据类型。

“转换”选项卡上的“检测数据类型”命令。

如何定义列数据类型

可以在以下四个位置中的任意一个位置定义或更改列的数据类型:

  • 主页选项卡上的转换组中的数据类型下拉菜单中。

    “主页”选项卡上的“数据类型”菜单。

  • 转换选项卡上的任何列组中的数据类型下拉菜单中。

    “转换”选项卡上的“数据类型”菜单。

  • 选择列标题左侧的图标。

    列标题中的“数据类型”菜单。

  • 在列快捷菜单上,于更改类型下。

    列快捷键菜单上的“更改类型”命令。

自动检测列数据类型和标题

此设置专门用于非结构化源。 它可以帮助您根据表的前 200 行自动检查和检测列类型和标题。 启用此设置后,Power Query 会自动向查询添加两个步骤:

  • 提升列标题:将表的第一行提升为列标题。
  • 已更改的类型:根据对每列值的检查,将来自 Any 数据类型的值转换为另一种数据类型。

默认情况下,此设置为启用。 若要禁用或启用此设置,请按照适用于 Power Query 体验的步骤操作。

在 Power Query Online 中配置自动数据类型检测

主页选项卡上,选择选项,然后选择项目选项。 在项目选项窗口中,选择自动检测未结构化源的列类型和标题复选框。

自动检测项目选项中的数据类型选项。

在 Power Query for Desktop 中配置自动数据类型检测

可以在选项窗口(在 Power Query 编辑器中,在文件选项卡中,选择选项和设置>选项)在全局级别和每文件级别定义此行为。

  • 全局:在左窗格中,于全局下,选择数据加载。 在右窗格中,于类型检测下,选择三种类型检测配置中的任何一种,这些配置将应用于应用程序中创建的每个新文件:

    • 始终检测未结构化源的列类型和标题
    • 根据每个文件的设置检测未结构化源的列类型和标题
    • 从不检测未结构化源的列类型和标题

    全局类型检测。

  • 当前文件:在左窗格中,于当前文件下,选择数据加载。 在右窗格中,于类型检测下,选择要为当前文件启用还是禁用类型检测。

    自动检测 Power Query for Desktop 中的数据类型选项。

文档或项目区域设置

Power Query 处理两个不同的组件,它们管理事物的外观和解释方式:

  • 本地化:该组件告诉 Power Query 应以哪种语言显示。
  • 全球化:该组件除了解释文本值外,还处理值的格式化。

区域设置是包含本地化和全球化两个组件的单个值。 区域设置用于解释文本值,并将其转换为其他数据类型。 例如,区域设置英语(美国)表示本地化采用美国英语;而全球化或值格式则基于美国使用的标准。

当 Power Query 定义列数据类型或从一种数据类型转换为另一种数据类型时,必须解释要转换的值,然后才能将其转换为其他数据类型。

  • 在 Power Query Online 中,此解释在项目选项区域设置下定义。

    Power Query Online 中的区域设置。

  • 在 Power Query for Desktop 中,Power Query 会自动识别操作系统区域格式,并使用该格式来解释数据类型转换的值。 若要覆盖此区域设置配置,请打开查询选项窗口,在左窗格中,于当前文件下选择区域设置。 在此处,可以将区域设置更改为所需的设置。

    Power Query for Desktop 中的区域设置。

此区域设置对于将文本值解释为特定数据类型非常重要。 例如,假设区域设置设置为英语(美国),但其中一个 CSV 文件中列的日期采用英国日期/月/年格式。

示例原始表,其中“Date”列中的日期设置为英国的日/月/年格式。

在尝试将 Date 列的数据类型设置为 Date 时,收到错误值。

数据类型转换错误。

出现这些错误是因为所使用的区域设置试图以英语(美国)格式(即月/日/年)解释日期。 由于日历中没有第 22 个月,因此导致错误。

可以右键单击列标题,选择更改类型,然后选择使用区域设置,而不是只是选择“日期”数据类型。

列快捷键菜单上的“使用区域设置”。

使用区域设置更改列类型对话框中,选择需要设置的数据类型,同时也选择要使用的区域设置,本例中需要是英语(英国)

使用区域设置更改列类型。

使用此区域设置,Power Query 将能够正确解释值,并将这些值转换为正确的数据类型。

使用区域设置后显示的最终表,其中“Date”列中的日期设置为美国的月/日/年格式。

验证最终日期值

值的格式由全球化值驱动。 如果对 Power Query 显示的值有任何疑问,可以通过为值中的日期、月和年份添加新列来验证日期值的转换。 为此,请选择日期列,然后转到功能区上的添加列选项卡。 在日期和时间列组中,将显示日期列的选项。

选择要放入新列中的日期列值的部分。

在此处,可以提取日期值的各个部分,例如年号、月号、日数,或者从 Date 列中提取的更多列。

日期部分。

通过使用这些列,可以验证日期值是否已正确转换。

数据类型转换矩阵

下面的矩阵旨在让您快速了解将一个值从一种数据类型转换为另一种数据类型的可行性。

注意

此矩阵中的转换从数据类型列中的原始数据类型开始。 转换为新类型的每个结果都显示在原始数据类型的行中。

数据类型 十进制数。 货币 整数 百分比 日期/时间 日期 时间 日期/时间/时区 持续时间 文本 True/False
十进制数。 十进制数 有可能,但会截断原始值 有可能,但会截断原始值 可能。 可能 有可能,但会截断原始值 不可能。 有可能,但会在原始值的基础上增加值。 可能 可能 可能
币种。 货币 可能 有可能,但会截断原始值 可能 可能 有可能,但会截断原始值 不可用 有可能,但会在原始值的基础上增加值 可能 可能 可能
整数。 整数 可能 可能 可能 可能 可能 不可用 有可能,但会在原始值的基础上增加值 可能 可能 可能
百分比。 百分比 可能 有可能,但会截断原始值 有可能,但会截断原始值 可能 可能 不可用 有可能,但会在原始值的基础上增加值 可能 可能 可能
日期/时间。 日期/时间 可能 有可能,但会截断原始值 有可能,但会截断原始值 可能 有可能,但会截断原始值 有可能,但会截断原始值 有可能,但会在原始值的基础上增加值 不可用 可能 不可用
日期。 日期 可能 可能 可能 可能 可能 不可用 有可能,但会在原始值的基础上增加值 不可用 可能 不可用
时间。 时间 可能 可能 可能 可能 有可能,但会在原始值的基础上增加值 不可用 有可能,但会在原始值的基础上增加值 不可用 可能 不可用
日期/时间/时区。 日期/时间/时区 可能 有可能,但会截断原始值 有可能,但会截断原始值 可能 有可能,但会截断原始值 有可能,但会截断原始值 有可能,但会截断原始值 不可用 可能 不可用
持续时间。 Duration 可能 有可能,但会截断原始值 有可能,但会截断原始值 可能 不可用 不可用 不可用 不可用 可能 不可用
Text。文本 可能 可能 可能 可能 可能 可能 可能 可能 可能 可能
True/False。 True/False 可能 可能 可能 可能 不可用 不可用 不可用 不可用 不可用 可能
Icon 说明
可能 可能
不可用 不可用
有可能,但会在原始值的基础上增加值 有可能,但会在原始值的基础上增加值
有可能,但会截断原始值。 有可能,但会截断原始值