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
Step2let
Source = Csv.Document(File.Contents("C:\Data\sales_flat.csv"), [Delimiter = ",", Encoding = 65001]),
Promoted = Table.PromoteHeaders(Source, [PromoteAllScalars = true])
in
Promotedeach / _
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 (_) => expressionList.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 value2Table.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 fallbackTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.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 tableTable.FillDown(Source, {"region"})Table.PromoteHeaders
Usa la primera fila como nombres de columna.
Table.PromoteHeaders(table as table, optional options as nullable record) as tableTable.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 textText.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 textText.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 textText.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 anyText.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 numberDate.Year(#date(2025, 3, 14)) // 2025Date.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 anyDate.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 anyList.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 numberNumber.Round(2.5, 0, RoundingMode.AwayFromZero) // 3 (default mode gives 2)