Expressões, valores e let expression

Uma consulta de linguagem de fórmula do Power Query M é composta por etapas de expressão de fórmula que criam uma consulta mashup. Uma expressão de fórmula pode ser avaliada (calculada), produzindo um valor. A expressão let encapsula um conjunto de valores a serem calculados, atribuídos nomes e, em seguida, usados em uma expressão subsequente que segue a instrução in . Por exemplo, uma expressão let pode conter uma variável Source que é igual ao valor de Text.Proper e produz um valor de texto em maiúsculas e minúsculas.

Deixe a expressão

let
    Source = Text.Proper("hello world")
in
    Source

No exemplo acima, Text.Proper("hello world") é avaliado a "Hello World".

As próximas seções descrevem os tipos de valor no idioma.

Valor primitivo

Um valor primitivo é um valor de parte única, como um número, lógico, texto ou nulo. Um valor nulo pode ser usado para indicar a ausência de quaisquer dados.

Type Valor de exemplo
Binário 00 00 00 02 // Número de pontos (2)
Date 5/23/2015
DateTime 23/05/2015 12:00:00
DateTimeZone 23/05/2015 12:00:00 -08:00
Duração 15:35:00
Lógico verdadeiro e falso
Nulo nulo
Número 0, 1, -1, 1.5 e 2.3e-5
Texto "ABC"
Hora 12:34:12

Valor da função

Uma Função é um valor que, quando invocado com argumentos, produz um novo valor. As funções são escritas listando os parâmetros da função entre parênteses, seguido pelo símbolo goes-to =>, seguido pela expressão que define a função. Por exemplo, para criar uma função chamada MyFunction que tem dois parâmetros e executa um cálculo em parameter1 e parameter2:

let
    MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
    MyFunction

Chamar MyFunction retorna o resultado:

let
    Source = MyFunction(2, 4)
in
    Source

Este código produz o valor de 3.

Valores de dados estruturados

A linguagem M suporta os seguintes valores de dados estruturados:

Nota

Os dados estruturados podem conter qualquer valor M. Para ver alguns exemplos, vá para Exemplos adicionais de dados estruturados.

Listagem

Uma Lista é uma sequência ordenada baseada em zero de valores entre caracteres de chave { }. Os caracteres de chave { } também são usados para recuperar um item de uma Lista por posição de índice. Para obter mais informações, vá para Listar valores.

Nota

O Power Query M suporta um tamanho de lista infinito, mas se uma lista for escrita como literal, a lista tem um comprimento fixo. Por exemplo, {1, 2, 3} tem um comprimento fixo de 3.

Seguem-se alguns exemplos de listas.

Value Type
{123, verdadeiro, "A"} Lista contendo um número, uma lógica e um texto.
{1, 2, 3} Lista de números
{
    {1, 2, 3},
    {4, 5, 6}
}
Lista de números
{
    [CustomerID = 1, Nome = "Bob", Telefone = "123-4567"],
    [ID do Cliente = 2, Nome = "Jim", Telefone = "987-6543"]
}
Lista de Registos
{123, verdadeiro, "A"}{0} Obtenha o valor do primeiro item de uma Lista. Esta expressão retorna o valor 123.
{
    {1, 2, 3},
    {4, 5, 6}
}{0}{1}
Obtenha o valor do segundo item do primeiro elemento List. Esta expressão retorna o valor 2.

Registo

Um Registro é um conjunto de campos. Um campo é um par nome/valor em que o nome é um valor de texto exclusivo dentro do registro do campo. A sintaxe para valores de registro permite que os nomes sejam escritos sem aspas, uma forma também conhecida como identificadores. Um identificador pode assumir as duas formas seguintes:

  • identifier_name como OrderID.

  • #"nome do identificador", como #"Os dados de hoje são: ".

A seguir está um registro contendo campos chamados "OrderID", "CustomerID", "Item" e "Price" com os valores 1, 1, "Vara de pesca" e 100,00. Caracteres de chave quadrada [ ] denotam o início e o fim de uma expressão de registro e são usados para obter um valor de campo de um registro. Os exemplos a seguir mostram um registro e como obter o valor do campo Item.

Aqui está um exemplo de registro:

let Source =
        [
              OrderID = 1,
              CustomerID = 1,
              Item = "Fishing rod",
              Price = 100.00
        ]
in Source

Para obter o valor de um Item, use colchetes como Source[Item]:

let Source =
    [
          OrderID = 1,
          CustomerID = 1,
          Item = "Fishing rod",
          Price = 100.00
    ]
in Source[Item] //equals "Fishing rod"

Tabela

Uma Tabela é um conjunto de valores organizados em colunas e linhas nomeadas. O tipo de coluna pode ser implícito ou explícito. Você pode usar #table para criar uma lista de nomes de colunas e uma lista de linhas. Uma Tabela de valores é uma Lista em uma Lista. Os caracteres de chave { } também são usados para recuperar uma linha de uma Tabela por posição de índice (vá para o Exemplo 3 - Obter uma linha de uma tabela por posição de índice).

Exemplo 1 - Criar uma tabela com tipos de coluna implícitos

let
  Source = #table(
    {"OrderID", "CustomerID", "Item", "Price"},
      {
          {1, 1, "Fishing rod", 100.00},
          {2, 1, "1 lb. worms", 5.00}
      })
in
    Source

Exemplo 2 - Criar uma tabela com tipos de coluna 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

Ambos os exemplos anteriores criam uma tabela com a seguinte forma:

OrderID IDDeCliente Item Preço
1 1 Vara de pesca 100.00
2 1 Vermes de 1 lb 5.00

Exemplo 3 - Obter uma linha de uma tabela por posição 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 expressão retorna o seguinte registro:

Campo Value
ID do Pedido 2
ID do Cliente 1
Item Vermes de 1 lb
Preço 5

Exemplos adicionais de dados estruturados

Os dados estruturados podem conter qualquer valor M. Seguem-se alguns exemplos:

Exemplo 1 - Lista com valores [Primitivo](#_Primitive_value_1), [Function](#_Function_value) e [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

A avaliação desta expressão pode ser visualizada como:

Diagrama de uma tabela que visualiza a expressão com um valor primitivo, uma função e um registro.

Exemplo 2 - Registro contendo valores primitivos e registros aninhados

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

A avaliação desta expressão pode ser visualizada como:

Diagrama de uma tabela que visualiza a expressão com vários valores primitivos e registros aninhados.

Nota

Embora muitos valores possam ser escritos literalmente como uma expressão, um valor não é uma expressão. Por exemplo, a expressão 1 avalia o valor 1; A expressão 1+1 avalia o valor 2. Esta distinção é subtil, mas importante. As expressões são receitas para avaliação; Os valores são os resultados da avaliação.

Se expressão

A expressão if seleciona entre duas expressões com base em uma condição lógica. Por exemplo:

if 2 > 1 then
    2 + 2
else
    1 + 1

A primeira expressão (2 + 2) é selecionada se a expressão lógica (2 > 1) for verdadeira, e a segunda expressão (1 + 1) é selecionada se for falsa. A expressão selecionada (neste caso 2 + 2) é avaliada e torna-se o resultado da expressão if (4).