Wyrażenia warunkowe

Wyrażenia warunkowe służą do przekształcania wartości.

Wyrażenia warunkowe opisane w tej sekcji są blokami konstrukcyjnymi służącymi do tworzenia wyrażeń, które przekształcają wartość z jednej postaci w inną.

Należy przestrzegać następujących reguł:

  • W instrukcjach CASE operator AND ma pierwszeństwo przed operatorem OR.
  • Napisy muszą być ujęte w apostrofy.
Wyrażenie Przykład Opis Składnia

CASE (If)

CASE

WHEN score-par < 0 THEN 'Under Par'

WHEN score-par = 0 THEN 'Par'

WHEN score-par = 1 THEN 'Bogey'

WHEN score-par = 2 THEN 'Double Bogey'

ELSE 'Triple Bogey or Worse'

END

Ta forma instrukcji CASE oblicza każdy warunek WHEN i - jeśli dany warunek jest spełniony - przypisuje wartość z odpowiadającego mu wyrażenia THEN.

Jeśli nie jest spełniony żaden z warunków WHEN, to jest przypisywana wartość domyślna określona w wyrażeniu ELSE. Jeśli nie podano wyrażenia ELSE, to system automatycznie doda wyrażenie ELSE NULL.

Uwaga: Zob. Najlepsze praktyki w zakresie używania instrukcji CASE w analizach i wizualizacjach.

CASE WHEN request_condition1 THEN expr1 ELSE expr2 END

CASE (Switch)

CASE Score-par

WHEN -5 THEN 'Birdie on Par 6'

WHEN -4 THEN 'Must be Tiger'

WHEN -3 THEN 'Three under par'

WHEN -2 THEN 'Two under par'

WHEN -1 THEN 'Birdie'

WHEN 0 THEN 'Par'

WHEN 1 THEN 'Bogey'

WHEN 2 THEN 'Double Bogey'

ELSE 'Triple Bogey or Worse'

END

Ta forma jest także określana jako forma CASE (Lookup). Najpierw jest obliczana wartość pierwszego wyrażenia, a następnie - wyrażeń WHEN. Jeśli pierwsze wyrażenie jest zgodne z którymkolwiek z wyrażeń WHEN, to jest przypisywana wartość z odpowiadającego mu wyrażenia THEN.

Jeśli żadne z wyrażeń WHEN nie jest zgodne, to jest przypisywana wartość domyślna określona w wyrażeniu ELSE. Jeśli nie podano wyrażenia ELSE, to system automatycznie doda wyrażenie ELSE NULL.

Jeśli pierwsze wyrażenie jest zgodne z wyrażeniem z więcej niż jednej klauzuli WHEN, to jest przypisywane wyrażenie występujące z pierwszym zgodnym wyrażeniem.

Uwaga: Zob. Najlepsze praktyki w zakresie używania instrukcji CASE w analizach i wizualizacjach.

CASE expr1 WHEN expr2 THEN expr3 ELSE expr4 END

IfCase > ELSE

-

-

ELSE [expr]

IfCase > IFNULL

-

-

IFNULL([expr], [value])

IfCase > NULLIF

-

-

NULLIF([expr], [expr])

IfCase > WHEN

-

-

WHEN [Condition] THEN [expr]

IfCase > CASE

-

-

CASE WHEN [Condition] THEN [expr] END

SwitchCase > ELSE

-

-

ELSE [expr]

SwitchCase >IFNULL

-

-

IFNULL([expr], [value])

SwitchCase > NULLIF

-

-

NULLIF([expr], [expr])

SwitchCase > WHEN

-

-

WHEN [Condition] THEN [expr]

Najlepsze praktyki w zakresie używania instrukcji CASE w analizach i wizualizacjach

Używając instrukcji CASE w raportach i skoroszytach, należy brać pod uwagę kolumny raportu i kolejność agregacji, gdyż ma to wpływ na sposób obliczania wyrażeń i podsumowań częściowych.

  • Generalnie, gdy są używane instrukcje CASE, należy się upewnić, że wszystkie kolumny, które występują w wyrażeniu, zostały zawarte w raporcie.

  • Jeśli kolejność agregacji ma znaczenie, należy zmienić regułę agregacji dla raportu z "Domyślne" na "Suma".
  • Jeśli przed agregacją trzeba obliczyć warunek (na przykład, gdy filtrowana kolumna nie jest wyświetlana w raporcie), należy użyć funkcji FILTER.

Przykład

W tym przykładzie są używane dane z kolumn Brand, Product Type i Revenue.
Opis "GUID-5837A210-154F-4FAC-922D-EBF0A21C349A-default.png" znajduje się poniżej
.png"

Aby zastosować do danych Camera warunek "przychód = 0", należy utworzyć następujące wyrażenie warunkowe: CASE WHEN Product_Type = 'Camera' THEN 0 ELSE Revenue END.

Jeśli w raporcie nie ma kolumny Product_Type, brakuje danych do obliczenia wyrażenia, ponieważ występuje w nim kolumna Product_Type. Są wówczas uzyskiwane następujące wyniki:
Opis "GUID-22873F41-3679-45DF-821D-4167594FE069-default.png" znajduje się poniżej
.png"

Jeśli do raportu zostanie dodana kolumna PRODUCT_TYPE i agregacja raportu zostanie ustawiona na SUM, wynik będzie agregowany po obliczeniu wartości poziomu podstawowego:
Opis "GUID-0BEEE7E1-73CE-4BAA-98A2-683830E18E12-default.png" znajduje się poniżej
.png"

Alternatywą użycia instrukcji CASE jest użycie wyrażenia filtrującego: FILTER(Revenue using Product_Type != 'Camera'). Wyrażenie jest obliczane niezależnie od kolumn występujących w raporcie, a agregacje są stosowane dopiero po obliczeniu:
Opis "GUID-F428B1A7-A9FF-425B-80F1-BB709769CE5C-default.png" znajduje się poniżej
.png"