Espressioni, valori ed espressione let

Una query con il linguaggio delle formule M di Power Query è costituita da vari passaggi dell'espressione della formula che creano una query mashup. Un'espressione della formula può essere valutata (calcolata), restituendo un valore. L'espressione let incapsula un set di valori da calcolare, a cui assegnare nomi e poi da usare in un'espressione successiva che segue l'istruzione in. Un'espressione let può ad esempio contenere una variabile Source che equivale al valore di Text.Proper() e restituisce un valore di testo con la combinazione di maiuscole/minuscole appropriata.

Espressione let

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

Nell'esempio precedente, Text.Proper("hello world") restituisce "Hello World".

Nelle sezioni successive vengono descritti i tipi di valore nel linguaggio.

Valore primitivo

Un valore primitivo è un valore in una sola parte, ad esempio un valore number, logical, text o null. È possibile usare un valore Null per indicare l'assenza di dati.

Digita Valore di esempio
Binario 00 00 00 02 // numero di punti (2)
Data 23/5/2015
Data/Ora 23/5/2015 00:00:00
DateTimeZone 23/5/2015 00:00:00 -08:00
Durata 15:35:00
Logico true e false
Null Null
Numero 0, 1, -1, 1.5 e 2.3e-5
Testo "abc"
Time 12:34:12

Valore funzione

Una funzione è un valore che, se richiamato con argomenti, produce un nuovo valore. Le funzioni vengono scritte elencando i parametri della funzione tra parentesi, seguiti dal simbolo vai-a =>, seguito dall'espressione che definisce la funzione. Ad esempio, per creare una funzione denominata "MyFunction" che ha due parametri ed esegue un calcolo su parameter1 e parameter2:

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

La chiamata a MyFunction() restituisce il risultato:

let
    Source = MyFunction(2, 4)
in
    Source

Questo codice produce il valore 3.

Valori di dati strutturati

Il linguaggio M supporta i valori di dati strutturati seguenti:

Nota

I dati strutturati possono contenere qualsiasi valore M. Per visualizzare alcuni esempi, vedere Altri esempi di dati strutturati.

List

Un elenco è una sequenza ordinata in base zero di valori racchiusi tra parentesi graffe { }. I caratteri parentesi graffe { } vengono usati anche per recuperare un elemento da un elenco in base alla posizione di indice. Vedere [List value](#_List_value).

Nota

Il linguaggio M di Power Query supporta dimensioni di elenco infinite, ma se un elenco viene scritto come valore letterale, l'elenco ha una lunghezza fissa. Ad esempio, {1, 2, 3} ha una lunghezza fissa di 3.

Di seguito sono riportati alcuni esempi di elenco.

Valore Digita
{123, true, "A"} Elenco contenente un numero, un valore logico e un testo.
{1, 2, 3} Elenco di numeri
{
    {1, 2, 3},
    {4, 5, 6}
}
Elenco di elenco di numeri
{
    [CustomerID = 1, Name = "Bob", Phone = "123-4567"],
    [CustomerID = 2, Name = "Jim", Phone = "987-6543"]
}
Elenco di record
{123, true, "A"}{0} Ottiene il valore del primo elemento in un elenco. Questa espressione restituisce il valore 123.
{
    {1, 2, 3},
    {4, 5, 6}
}{0}{1}
Ottiene il valore del secondo elemento dal primo elemento dell'elenco. Questa espressione restituisce il valore 2.

Registra

Un record è un set di campi. Un campo è una coppia nome/valore in cui il nome è un valore di testo univoco all'interno del record del campo. La sintassi per i valori dei record consente di scrivere i nomi senza virgolette, con un formato noto anche come identificatori. Un identificatore può assumere le due forme seguenti:

  • nome_identificatore ad esempio OrderID.

  • #"nome identificatore", ad esempio #"I dati di oggi sono: ".

Di seguito è riportato un record contenente i campi denominati "OrderID", "CustomerID", "Item" e "Price" con i valori 1, 1, "Fishing Rod" e 100.00. I caratteri parentesi quadre [] indicano l'inizio e la fine di un'espressione di record e vengono usati per ottenere un valore di campo da un record. Gli esempi seguenti mostrano un record e come ottenere il valore del campo Item.

Ecco un record di esempio:

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

Per ottenere il valore di un Item, è possibile usare le parentesi quadre come Source[Item]:

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

Tabella

Una tabella è un set di valori organizzati in colonne e righe denominate. Il tipo di colonna può essere implicito o esplicito. È possibile usare #table per creare un elenco di nomi di colonna e un elenco di righe. Una tabella di valori è un elenco in un elenco. I caratteri parentesi graffe { } vengono usati anche per recuperare una riga da una tabella in base alla posizione di indice (vedere Esempio 3 - Ottenere una riga da una tabella in base alla posizione di indice).

Esempio 1 - Creare una tabella con tipi di colonna impliciti

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

Esempio 2 - Creare una tabella con tipi di colonna espliciti

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

Entrambi gli esempi precedenti creano una tabella con la forma seguente:

OrderID IDCliente Articolo Prezzo
1 1 Fishing rod 100.00
2 1 1 lb. worms 5.00

Esempio 3 - Ottenere una riga da una tabella in base alla posizione di indice

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}

Questa espressione restituisce il record seguente:

Campo Valore
OrderID 2
CustomerID 1
Articolo 1 lb. worms
Price 5

Altri esempi di dati strutturati

I dati strutturati possono contenere qualsiasi valore M. Di seguito sono riportati alcuni esempi.

Esempio 1 - Elenco con valori [Primitive](#_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

La valutazione di questa espressione può essere visualizzata come segue:

List Example 1

Esempio 2 - Record contenente valori primitivi e record annidati

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 valutazione di questa espressione può essere visualizzata come segue:

List Example 2

Nota

Sebbene molti valori possano essere scritti letteralmente come espressione, un valore non è un'espressione. Ad esempio, l'espressione 1 restituisce il valore 1, mentre l'espressione 1+1 restituisce il valore 2. La distinzione è sottile, ma importante. Le espressioni sono ricette per la valutazione, mentre i valori sono i risultati della valutazione.

Espressione if

L'espressione if effettua una selezione tra due espressioni in base a una condizione logica. Ad esempio:

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

La prima espressione (2 + 2) viene selezionata se l'espressione logica (2 > 1) è true e la seconda espressione (1 + 1) viene selezionata se è false. L'espressione selezionata (in questo caso 2 + 2) viene valutata e diventa il risultato dell'espressione if (4).