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 igual al valor de Text.Proper() y generar un valor de texto en mayúsculas o minúsculas, según proceda.

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 enumerando 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, vea 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. Vea [List value](#_List_value).

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:

List Example 1

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:

List Example 2

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).