M table 每列使用预定义类型

M table using a predefined type per column

在以下 M 查询中:

let
    #"My Source" = Table.FromRecords({
        [Name="Jared Smith", Age=24],
        [Name = "Tom Brady", Age=44],
        [Name="Hello Tom", Age = null],
        [Name = "asdf", Age = "abc"]
    })
in
    #"My Source"

为什么 "abc" 不产生错误?除非明确定义类型,否则 PowerPivot 是否使用 "any" 类型?

您可以使用 #table 函数指定每一列的类型:

let
    Source = #table(
        type table
            [
                #"Name"=text,
                #"Age"=number
            ], 
            {
                {"Jared Smith", 24},
                {"Tom Brady", 4},
                {"Hello Tom", null},
                {"asdf", "abc"}
            }
        )
in
    Source

正如我在评论中提到的:Power Query 确实使用 ANY 数据类型,除非您专门指定一个数据类型。

在某些情况下,例如当您从 Excel Table 获取数据时,它会根据列中的所有条目是否相同来自动检测数据类型类型。有时它做错了——例如总是将 Date 转换为 Date/Time,而您可能真的只需要 Date。

您可以使用 Table.TransformColumnTypes 来执行此操作。您甚至可以编写自己的例程来检测和分配数据类型。

您会注意到,如果将 Age 列的 DataType 更改为 Whole Numberabc 单元格将显示 Error

您还可以编写例程来处理单列中的混合数据类型,例如,将它们拆分到它们自己的列中。