Funzioni logiche
L'elenco seguente mostra le funzioni logiche utilizzabili nelle espressioni.
Funzione | Descrizione |
---|---|
Case | L'istruzione case presenta due diverse forme. Semplice: case Arg1 when Arg2 then Arg3 else Arg4 end L'espressione Arg1 viene valutata e se Arg1 è uguale ad Arg2, viene restituito Arg3. Possono essere inserite e valutate diverse espressioni when/then in ordine da sinistra e destra. Cercato: case when Arg1 then Arg2 else Arg3 end Restituisce Arg2 se Arg1=true e Arg3 se Arg1=false. Possono essere inserite diverse espressioni when/then che verranno valutate da sinistra e destra. Vedere di seguito per ulteriori informazioni. Esempio: case when 1 < 2 then "a" when 1 < 3 then "b" else "c" end case [Column] when 3 then "a" when 2 then "b" else "c" end Per ulteriori esempi, vedere Colonne calcolate basate sulle condizioni. |
If(Arg1,Arg2,Arg3) | Restituisce Arg2 se Arg1=true e Arg3 se Arg1=false. Arg1 è di tipo boolean, solitamente si tratta del risultato di un confronto. Arg2 e Arg3 possono essere di qualsiasi tipo, purché siano entrambi dello stesso tipo o null. Il secondo e il terzo argomento elaborano soltanto i subset delle righe e hanno effetto sui metodi basati su colonna e di accumulo. Vedere di seguito per ulteriori informazioni. Esempi: If([Count] > 3, "many", "few") If(true, null, null) -> (Vuoto) If(true, 1, null) -> 1 If(false, null, 2) -> 2 If(null, 1, 2) -> (Vuoto) If(1 < 2, "Small", "Big")-> Small If([Column] Is Null,"0","has value") Per ulteriori esempi, vedere Colonne calcolate basate sulle condizioni. |
Is Not Null | Utilizzato in un'istruzione If o Case per determinare se un'espressione genera o meno un valore vuoto (valore null). Esempio: If([Column] Is Not Null, "value was not null", "value was null") Se un'espressione contiene valori vuoti (valori null), è possibile utilizzare la funzione SN (vedere Funzioni di conversione) per sostituire i valori null con il valore specificato. |
Is Null |
Utilizzato in un'istruzione If o Case per determinare se un'espressione genera o meno un valore vuoto (valore null). Esempio: If([Column] Is Null, "value was null", "value was not null") Se un'espressione contiene valori vuoti (valori null), è possibile utilizzare la funzione SN (vedere Funzioni di conversione) per sostituire i valori null con il valore specificato. |
Ulteriori informazioni sull'utilizzo di if nelle espressioni:
Quando si utilizza un'istruzione if in un'espressione, la condizione nel primo argomento limita i valori da valutare nel terzo argomento. Per comprenderne il funzionamento, prendiamo come esempio una semplice colonna di numeri interi:
Inserire una colonna calcolata utilizzando la seguente espressione:
if(Col1 < 2, Max(Col1), Max(Col1))
Il risultato dell'espressione sarà una nuova colonna con due valori diversi: uno sarà il valore max per tutti i valori minori di 2 e l'altro sarà il valore max per i valori rimanenti (che è anche il valore max dell'intera colonna).
La funzione If è studiata per dividere la colonna in due gruppi e continuare quindi a valutare l'espressione sui nuovi gruppi.
Se si utilizza, invece, un'espressione Percentile, si otterranno risultati diversi sulla stessa espressione percentile a seconda del modo in cui la prima condizione ha diviso la colonna:
Inserire due colonne utilizzando la seguente espressione:
if (Col2 < 4, 0, Percentile(Col2, 70))
if (Col2 < 6, 0, Percentile(Col2, 70))
Si ottiene quindi il seguente risultato:
Come si può vedere, il valore del percentile cambierà a seconda del modo in cui "If" ha raggruppato i dati.Ulteriori informazioni sull'utilizzo di case nelle espressioni:
Quando si lavora con espressioni case, la condizione dopo "when" viene calcolata sull'intera colonna. L'argomento dopo "then" viene calcolato sulle righe definite dalla condizione "when". Se l'espressione include più coppie "when- then", un "then" è limitato da tutte le condizioni precedenti oltre che dall'ultima.
Un esempio che utilizza una semplice colonna di numeri interi:
Inserire due colonne calcolate, chiamate Case Min e Case Max, utilizzando le seguenti espressioni:
Case Min:
case when [Col1]<Avg([Col1]) then Min([Col1]) when [Col1]<(Avg([Col1]) + 1) then Min([Col1]) else Min([Col1]) end
Case Max:
case when [Col1] < Avg([Col1]) then Max([Col1]) when [Col1] < (Avg([Col1]) + 1) then Max([Col1]) else Max([Col1]) end
Il risultato sarà: