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")
viene valutato in "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, andare a 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. Per altre informazioni, andare a Elencare i valori.
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:
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:
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).