Hoja de referencia de Power Query M

30 elementos esenciales con sintaxis y ejemplos. Busca o filtra por grupo.

let … in

Toda consulta es un bloque let: cada línea es un paso con nombre que puede usar pasos anteriores, e in indica qué paso es el resultado.

let Step1 = expression, Step2 = expression in Step2
let
    Source = Csv.Document(File.Contents("C:\Data\sales_flat.csv"), [Delimiter = ",", Encoding = 65001]),
    Promoted = Table.PromoteHeaders(Source, [PromoteAllScalars = true])
in
    Promoted

each / _

each crea una función de un argumento; _ es el elemento actual. Dentro de una fila, [columna] es la forma corta de _[columna].

each expression // same as (_) => expression
List.Transform({1, 2, 3}, each _ * 10)   // {10, 20, 30}

if … then … else

Expresión condicional. Las palabras clave van en minúscula; se encadena con else if. No existe la palabra end.

if condition then value1 else value2
Table.AddColumn(Source, "size", each if [net_sales] >= 50 then "High" else if [net_sales] >= 20 then "Medium" else "Low", type text)

try … otherwise

Evalúa una expresión y devuelve el valor alternativo si produce un error, como SI.ERROR en Excel.

try expression otherwise fallback
Table.AddColumn(Source, "qty", each try Number.From([quantity]) otherwise null, type nullable number)

Table.SelectRows

Conserva solo las filas donde la condición es verdadera (el paso Filtrar filas).

Table.SelectRows(table as table, condition as function) as table
Table.SelectRows(Source, each [region] = "South" and [net_sales] > 20)

Table.AddColumn

Agrega una columna calculada. Indica el tipo en el cuarto argumento para que no quede como Any.

Table.AddColumn(table as table, newColumnName as text, columnGenerator as function, optional columnType as nullable type) as table
Table.AddColumn(Source, "gross_margin", each [net_sales] - [cost], type number)

Table.TransformColumnTypes

Define el tipo de datos de las columnas. La referencia cultural opcional controla cómo se leen fechas y números en texto (por ejemplo "en-US" para MM/DD/YYYY).

Table.TransformColumnTypes(table as table, typeTransformations as list, optional culture as nullable text) as table
Table.TransformColumnTypes(Source, {{"order_date", type date}, {"quantity", Int64.Type}, {"net_sales", type number}}, "en-US")

Table.RenameColumns

Cambia el nombre de columnas con una lista de pares {anterior, nuevo}.

Table.RenameColumns(table as table, renames as list, optional missingField as nullable number) as table
Table.RenameColumns(Source, {{"net_sales", "Net Sales"}, {"store_name", "Store"}})

Table.RemoveColumns

Elimina las columnas indicadas.

Table.RemoveColumns(table as table, columns as any, optional missingField as nullable number) as table
Table.RemoveColumns(Source, {"cost", "segment"})

Table.SelectColumns

Conserva solo las columnas indicadas, en ese orden. Es más seguro que eliminar cuando pueden aparecer columnas nuevas.

Table.SelectColumns(table as table, columns as any, optional missingField as nullable number) as table
Table.SelectColumns(Source, {"order_date", "store_name", "net_sales"})

Table.TransformColumns

Aplica una función a los valores de columnas existentes sin agregar columnas nuevas.

Table.TransformColumns(table as table, transformOperations as list, optional defaultTransformation as nullable function, optional missingField as nullable number) as table
Table.TransformColumns(Source, {{"store_name", each Text.Proper(Text.Trim(_)), type text}, {"category", Text.Proper, type text}})

Table.ReplaceValue

Reemplaza valores en columnas. Replacer.ReplaceText cambia parte de un texto; Replacer.ReplaceValue cambia el valor completo.

Table.ReplaceValue(table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list) as table
Table.ReplaceValue(Source, "$", "", Replacer.ReplaceText, {"net_sales"})

Table.Group

Agrupa filas por columnas clave y agrega cada grupo (el paso Agrupar por).

Table.Group(table as table, key as any, aggregatedColumns as list, optional groupKind as nullable number, optional comparer as nullable function) as table
Table.Group(Source, {"region"}, {{"Total Sales", each List.Sum([net_sales]), type number}, {"Rows", each Table.RowCount(_), Int64.Type}})

Table.Sort

Ordena las filas por una o más columnas.

Table.Sort(table as table, comparisonCriteria as any) as table
Table.Sort(Source, {{"region", Order.Ascending}, {"net_sales", Order.Descending}})

Table.Distinct

Quita filas duplicadas, comparando todas las columnas o solo las que indiques.

Table.Distinct(table as table, optional equationCriteria as any) as table
Table.Distinct(Source)

Table.NestedJoin

Combina dos consultas por columnas clave; las coincidencias llegan como una columna de tablas anidadas (Combinar consultas).

Table.NestedJoin(table1 as table, key1 as any, table2 as any, key2 as any, newColumnName as text, optional joinKind as nullable number, optional keyEqualityComparers as nullable list) as table
Table.NestedJoin(Orders, {"store_id"}, Stores, {"store_id"}, "Stores", JoinKind.LeftOuter)

Table.ExpandTableColumn

Expande una columna de tablas anidadas (normalmente después de combinar) en columnas normales.

Table.ExpandTableColumn(table as table, column as text, columnNames as list, optional newColumnNames as nullable list) as table
Table.ExpandTableColumn(Merged, "Stores", {"region", "store_type"})

Table.Combine

Anexa tablas una debajo de otra (Anexar consultas). Las columnas se emparejan por nombre.

Table.Combine(tables as list, optional columns as any) as table
Table.Combine({Sales2024, Sales2025})

Table.UnpivotOtherColumns

Convierte muchas columnas en filas de atributo/valor, manteniendo fijas las columnas indicadas. Ideal para reportes con un mes por columna.

Table.UnpivotOtherColumns(table as table, pivotColumns as list, attributeColumn as text, valueColumn as text) as table
Table.UnpivotOtherColumns(Source, {"store_name"}, "Month", "Sales")

Table.Pivot

Convierte los valores de una columna en columnas nuevas, agregando otra columna.

Table.Pivot(table as table, pivotValues as list, attributeColumn as text, valueColumn as text, optional aggregationFunction as nullable function) as table
Table.Pivot(Source, List.Distinct(Source[channel]), "channel", "net_sales", List.Sum)

Table.FillDown

Copia el último valor no nulo hacia abajo en las celdas nulas.

Table.FillDown(table as table, columns as list) as table
Table.FillDown(Source, {"region"})

Table.PromoteHeaders

Usa la primera fila como nombres de columna.

Table.PromoteHeaders(table as table, optional options as nullable record) as table
Table.PromoteHeaders(Source, [PromoteAllScalars = true])

Text.Trim

Quita los espacios al inicio y al final. A diferencia de SUPRESP en Excel, no reduce los espacios dobles del medio.

Text.Trim(text as nullable text, optional trim as any) as nullable text
Text.Trim("  Sunshine Miami  ")   // "Sunshine Miami"

Text.Proper

Pone en mayúscula la primera letra de cada palabra. Text.Upper y Text.Lower cambian todo el texto.

Text.Proper(text as nullable text, optional culture as nullable text) as nullable text
Text.Proper("SUNSHINE MIAMI")   // "Sunshine Miami"

Text.Replace

Reemplaza todas las apariciones de un texto.

Text.Replace(text as nullable text, old as text, new as text) as nullable text
Text.Replace("$12.50", "$", "")   // "12.50"

Text.BeforeDelimiter

Devuelve el texto antes de un delimitador. Text.AfterDelimiter devuelve la parte que va después.

Text.BeforeDelimiter(text as nullable text, delimiter as text, optional index as any) as any
Text.BeforeDelimiter("3 units", " ")   // "3"

Date.Year

Devuelve el año de una fecha. Date.Month y Date.Day devuelven el mes y el día.

Date.Year(dateTime as any) as nullable number
Date.Year(#date(2025, 3, 14))   // 2025

Date.StartOfMonth

Devuelve el primer día del mes, útil para agrupar por mes. Date.EndOfMonth devuelve el último día.

Date.StartOfMonth(dateTime as any) as any
Date.StartOfMonth(#date(2025, 3, 14))   // #date(2025, 3, 1)

List.Sum

Suma los números de una lista. Tabla[columna] devuelve una columna como lista.

List.Sum(list as list, optional precision as nullable number) as any
List.Sum(Source[net_sales])

Number.Round

Redondea a los decimales indicados. Por defecto redondea los .5 al par más cercano; usa RoundingMode.AwayFromZero para igualar a Excel.

Number.Round(number as nullable number, optional digits as nullable number, optional roundingMode as nullable number) as nullable number
Number.Round(2.5, 0, RoundingMode.AwayFromZero)   // 3 (default mode gives 2)