Table.TransformColumns

语法

Table.TransformColumns(
    table as table,
    transformOperations as list,
    optional defaultTransformation as nullable function,
    optional missingField as nullable number
) as table

简介

通过对列表中的每个列操作,转换指定的表。

  • table:要转换的表。
  • transformOperations:要对表进行转换。 此参数的格式为 { 列名称、 转换 } 或 { 列名称, 转换, 新列类型 }。
  • defaultTransformation:(可选) 应用于未列出的 transformOperations所有列的默认转换。
  • missingField:(可选)指定缺失值的预期操作。 如果列 transformOperations 不存在,除非此参数指定了替代项,否则将引发异常(MissingField.Error)。 使用以下值之一:
    • MissingField.UseNull:任何缺失的字段都会作为null 值包含在内。
    • MissingField.Ignore:忽略任何缺失的字段。

示例 1

将列 [A] 中的文本值转换为数字值,将列 [B] 中的数字值转换为文本值。

使用情况

Table.TransformColumns(
    Table.FromRecords({
        [A = "1", B = 2],
        [A = "5", B = 10]
    }),
    {
        {"A", Number.FromText},
        {"B", Text.From}
    }
)

输出

Table.FromRecords({
    [A = 1, B = "2"],
    [A = 5, B = "10"]
})

示例 2

将缺失列 [X] 中的数字值转换为文本值,不存在的列默认为 null

使用情况

Table.TransformColumns(
    Table.FromRecords({
        [A = "1", B = 2],
        [A = "5", B = 10]
    }),
    {"X", Number.FromText},
    null,
    MissingField.UseNull
)

输出

Table.FromRecords({
    [A = "1", B = 2, X = null],
    [A = "5", B = 10, X = null]
})

示例 3

递增列 [B] 中的数字值,并将其转换为文本值,并将所有其他列转换为数字。

使用情况

Table.TransformColumns(
    Table.FromRecords({
        [A = "1", B = 2],
        [A = "5", B = 10]
    }),
    {"B", each Text.From(_ + 1), type text},
    Number.FromText
)

输出

Table.FromRecords({
    [A = 1, B = "3"],
    [A = 5, B = "11"]
})

示例 4

将美国假日发生的计划性维护任务移到第二天,或者(如果假日发生在星期五)移到下一个星期一。

使用情况

let
    MaintenanceSchedule = #table(type table [Task = text, Date = date],
    {
        {"HVAC Check", #date(2025, 7, 10)},         // Not a holiday
        {"Window Washing", #date(2025, 9, 1)},      // Labor Day
        {"Fire Drill", #date(2025, 9, 17)},         // Not a holiday
        {"Light Replacement", #date(2025, 11, 27)}  // Thanksgiving
    }),
    USHolidays = {
        #date(2025, 1, 1),   // New Year's Day
        #date(2025, 7, 4),   // Independence Day
        #date(2025, 9, 1),   // Labor Day
        #date(2025, 11, 27), // Thanksgiving
        #date(2025, 12, 25)  // Christmas
    },
    AdjustedSchedule = Table.TransformColumns(
        MaintenanceSchedule,
        {{"Date", each if List.Contains(USHolidays, _) then
            if Date.DayOfWeek(_, Day.Sunday) = 5 then
                Date.AddDays(_, 3)     // Friday to Monday
            else 
                Date.AddDays(_, 1)     // Other to next day
        else _, type date}}
    )
in
    AdjustedSchedule

输出

#table(type table[Task = text, Date = date],
{
    {"HVAC Check", #date(2025, 7, 10)},
    {"Window Washing", #date(2025, 9, 2)},
    {"Fire Drill", #date(2025, 9, 17)},
    {"Light Replacement", #date(2025, 11, 28)}
})