Expresiones, valores y expresión Let
Una consulta del lenguaje de fórmulas M de Power Query se compone de una serie de pasos de expresión de fórmula que crean una consulta de mashup. Una expresión de fórmula se puede evaluar (calcular), lo que produce un valor. La expresión let encapsula un conjunto de valores que se van a calcular, a los que se van a asignar nombres que y, por último, se van a usar en una expresión subsiguiente que sigue a la instrucción in. Por ejemplo, una expresión let podría contener una variable Source que es igual al valor de Text.Proper y produce un valor de texto en el caso adecuado.
Expresión let
let
Source = Text.Proper("hello world")
in
Source
En el ejemplo anterior, Text.Proper("hello world")
se evalúa como "Hello World"
.
En las siguientes secciones se describen los tipos de valor en el lenguaje.
Valor primitivo
Un valor primitivo es un valor de una sola parte, como un número, un valor lógico, texto o un valor null. Se puede usar un valor null para indicar la ausencia de datos.
Tipo | Valor de ejemplo |
---|---|
Binary | 00 00 00 02 // número de puntos (2) |
Date | 23/5/2015 |
DateTime | 23/5/2015 12:00:00 a.m. |
Fecha, hora y zona horaria | 23/5/2015 12:00:00 a.m. - 08:00 |
Duration | 15:35:00 |
Lógicos | true y false |
Null | null |
Número | 0, 1, -1, 1.5, y 2.3e-5 |
Texto | "abc" |
Hora | 12:34:12 p.m. |
Valor de función
Una función es un valor que, cuando se invoca con argumentos, genera un nuevo valor. Las funciones se escriben mediante la enumeración de los parámetros de la función en cuestión entre paréntesis, seguidos del signo igual =>, seguido de la expresión que define la función. Por ejemplo, para crear una función llamada MyFunction que tiene dos parámetros y realiza un cálculo en parameter1 y parameter2:
let
MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
MyFunction
Al llamar a MyFunction se devuelve el resultado:
let
Source = MyFunction(2, 4)
in
Source
Este código genera un valor de 3.
Valores de datos estructurados
El lenguaje M admite los siguientes valores de datos estructurados:
Nota
Los datos estructurados pueden contener cualquier valor de M. Para ver un par de ejemplos, vaya a Ejemplos de datos estructurados adicionales.
List
Una lista es una secuencia ordenada de base cero de valores delimitados por caracteres de llave { }. Los caracteres de llave { } también se usan para recuperar un elemento de una lista por su posición de índice. Para obtener más información, vaya a Valores de lista.
Nota
M de Power Query admite un tamaño de lista infinito, pero si una lista se escribe como un literal, debe tener una longitud fija. Por ejemplo, {1, 2, 3} tiene una longitud fija de 3.
Estos son algunos ejemplos de listas.
Valor | Tipo |
---|---|
{123, true, "A"} | Lista que contiene un número, un valor lógico y un texto. |
{1, 2, 3} | Lista de números. |
{ {1, 2, 3}, {4, 5, 6} } |
Lista de una lista de números. |
{ [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"] } |
Lista de registros. |
{123, true, "A"}{0} | Obtiene el valor del primer elemento de una lista. Esta expresión devuelve el valor 123. |
{ {1, 2, 3}, {4, 5, 6} }{0}{1} |
Obtiene el valor del segundo elemento del primer elemento de lista. Esta expresión devuelve el valor 2. |
Registro
Un registro es un conjunto de campos. Un campo es un par nombre-valor en el que el nombre es un valor de texto único dentro del registro del campo. La sintaxis de los valores de registro permite escribir los nombres sin comillas, formato que también se conoce como identificadores. Un identificador puede tener las dos formas siguientes:
nombre_identificador, como OrderID.
#"nombre del identificador", como #"Today's data is:".
Aquí mostramos un registro que contiene los campos "OrderID", "CustomerID", "Item" y "Price" con los valores 1, 1, "Fishing rod" y 100.00. Los caracteres de corchete [ ] señalan el principio y el final de una expresión de registro, y se usan para obtener un valor de campo de un registro. En los siguientes ejemplos se muestra un registro y cómo obtener el valor del campo Item.
Este es un registro de ejemplo:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source
Para obtener el valor de Item, use corchetes, como, por ejemplo, Source[Item]
:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source[Item] //equals "Fishing rod"
Tabla
Una tabla es un conjunto de valores organizados en columnas y filas con nombre. El tipo de columna puede ser implícito o explícito. Puede usar #table para crear una lista de nombres de columna y una lista de filas. Una tabla de valores es una lista dentro de una lista. Los caracteres de llave { } también se usan para recuperar una fila de una tabla por su posición de índice (vaya al Ejemplo 3: obtener una fila de una tabla por su posición de índice).
Ejemplo 1: crear una tabla con tipos de columna implícitos
let
Source = #table(
{"OrderID", "CustomerID", "Item", "Price"},
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
})
in
Source
Ejemplo 2: crear una tabla con tipos de columna explícitos
let
Source = #table(
type table [OrderID = number, CustomerID = number, Item = text, Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
}
)
in
Source
En los dos ejemplos anteriores se crea una tabla con la siguiente forma:
OrderID | CustomerID | Elemento | Precio |
---|---|---|---|
1 | 1 | Fishing rod | 100,00 |
2 | 1 | 1 lb. worms | 5.00 |
Ejemplo 3: obtener una fila de una tabla por su posición de índice
let
Source = #table(
type table [OrderID = number, CustomerID = number, Item = text, Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
}
)
in
Source{1}
Esta expresión devuelve el siguiente registro:
Campo | Valor |
---|---|
OrderID | 2 |
CustomerID | 1 |
Elemento | 1 lb. worms |
Precio | 5 |
Otros ejemplos de datos estructurados
Los datos estructurados pueden contener cualquier valor de M. A continuación se muestran algunos ejemplos:
Ejemplo 1: lista con valores [Primitive](#_Primitive_value_1), [Function](#_Function_value) y [Record](#_Record_value)
let
Source =
{
1,
"Bob",
DateTime.ToText(DateTime.LocalNow(), "yyyy-MM-dd"),
[OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0]
}
in
Source
La evaluación de esta expresión se puede visualizar del siguiente modo:
Ejemplo 2: registro que contiene valores primitivos y registros anidados
let
Source = [CustomerID = 1, Name = "Bob", Phone = "123-4567", Orders =
{
[OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0],
[OrderID = 2, CustomerID = 1, Item = "1 lb. worms", Price = 5.0]
}]
in
Source
La evaluación de esta expresión se puede visualizar del siguiente modo:
Nota
Aunque muchos valores se pueden escribir literalmente como una expresión, un valor no es una expresión. Por ejemplo, la expresión 1 se evalúa como el valor 1, mientras que la expresión 1 + 1 se evalúa como el valor 2. Esta distinción es sutil, pero importante. Las expresiones son las recetas de evaluación y los valores, los resultados de esa evaluación.
Expresión if
La expresión if opta por una de dos expresiones posibles en función de una condición lógica. Por ejemplo:
if 2 > 1 then
2 + 2
else
1 + 1
Se seleccionará la primera expresión (2 + 2) si la expresión lógica (2 > 1) es true, y se seleccionará la segunda (1 + 1) si es false. La expresión seleccionada (en este caso, 2 + 2) se evalúa y se convierte en el resultado de la expresión if (4).