この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

case

foreach ステートメント内で SAQL case 演算子を使用して、複数の条件の中から選択するロジックを作成します。case 演算子では、検索 case 式と単純な case 式の 2 つの構文形式がサポートされています。

構文 — 検索 case 式

1case
2      when search_condition then result_expr    
3      [ when search_condition2 then result_expr2 … ]    
4      [ else default_expr ]
5end
case...end
式は、case キーワードで始まり、end キーワードで終わります。
when...then
when キーワードと then キーワードで条件ステートメントを定義します。case 式には、1 つ以上の条件ステートメントを含めることができます。
  • search_conditiontrue または false に評価される任意の論理式。この式は、SAQL でサポートされている任意の値、識別子、論理演算子、比較演算子、スカラー関数 (日付関数や算術関数を含む) を使用して構成できます。有効な search_condition 構文の例を次に示します。
    • xInt < 5
    • price > 1000 and price <= 2000
    • units*round(price_per_unit) < abs(revenue)
  • result_expr — SAQL エンジンで評価できる任意の式。値、識別子、およびスカラー関数 (日付関数や算術関数を含む) などを含めることができます。式は、任意のデータ型に評価されます。ただし、このデータ型はすべての条件式で一致している必要があります。つまり、result_expr が数値型の場合、result_expr2result_exprN も数値型である必要があります。有効な result_expr 構文の例を次に示します。
    • xInt
    • toString('orderDate', "dd/MM/yyyy")
    • "abc"
else
(省略可能) — デフォルトの式を指定できます。else ステートメントは、when/then 条件ステートメントの後に配置する必要があります。else ステートメントは 1 つしか使用できません。
  • default_expr — SAQL エンジンで評価できる任意の式。値、識別子、およびスカラー関数 (日付関数や算術関数を含む) などを含めることができます。データ型は、前の条件ステートメントで指定した result_expr のデータ型と一致している必要があります。

使用方法 — 検索 case 式

条件ステートメントは、指定した順序で 1 行ずつ評価されます。search_conditiontrue と評価されると、その行の対応する result_expr が返されます。そのため、複数の条件ステートメントで true が返される場合でも、最初の条件ステートメントのみが評価されます。1 つ以上の when/then ステートメントを指定する必要があります。when/then ステートメントは無制限に指定できます。

省略可能な else ステートメントで、default_expr を設定できます。どの search_condition 式も true に評価されない場合、default_expr 式が返されます。else ステートメントが指定されない場合、デフォルトでは null が返されます。

構文 — 単純な case 式

1case primary_expr    
2      when test_expr then result_expr    
3      [ when test_expr2 then result_expr2 … ]    
4      [ else default_expr ]
5end
case...end
式は、case キーワードで始まり、end キーワードで終わります。
  • primary_expr — SAQL エンジンで評価できる任意のスカラー式。値、識別子、およびスカラー関数 (日付関数や算術関数を含む) などを含めることができます。式は、比較可能な任意のデータ型 (数値、文字列、または日付) に評価されます。有効な primary_expr 構文の例を次に示します。
    • xInt % 3
    • date('year', 'month', 'day')
    • "abc"

スカラー式の入力と出力は単一値を取ります。case で使用する場合、入力値は foreach ステートメントのコンテキストで有効な任意の式になります。

メモ

when...then
when キーワードと then キーワードで条件ステートメントを定義します。case 式には、1 つ以上の条件ステートメントを含めることができます。
  • test_expr — SAQL エンジンで評価できる任意のスカラー式。この式は、任意の値、識別子、およびスカラー関数 (日付関数や算術関数を含む) を使用して構成できますが、primary_expr と同じデータ型に評価される必要があります。有効な test_expr 構文の例を次に示します。
    • 5
    • "abc"
    • abs(profit)
  • result_expr — SAQL エンジンで評価できる任意のスカラー式。値、識別子、およびスカラー関数 (日付関数や算術関数を含む) などを含めることができます。式は、任意のデータ型に評価されます。ただし、このデータ型はすべての条件ステートメントで一致している必要があります。つまり、result_expr が数値型の場合、result_expr2...result_exprN も数値型である必要があります。result_expr 構文の例を次に示します。
    • xInt
    • toString('orderDate', "dd/MM/yyyy")
    • "abc"
else
(省略可能) else キーワードではデフォルトの式を指定できます。else ステートメントは、when/then 条件ステートメントの後に配置する必要があります。else ステートメントは 1 つしか使用できません。
  • default_expr — SAQL エンジンで評価できる任意のスカラー式。値、識別子、およびスカラー関数 (日付関数や算術関数を含む) などを含めることができます。データ型は、前の条件ステートメントで指定した result_expr のデータ型と一致している必要があります。

使用方法 — 単純な case 式

条件ステートメントは、指定した順序で 1 行ずつ評価されます。指定の条件ステートメントが primary_expr == test_expr の場合、その行の対応する result_expr が返されます。1 つ以上の when/then ステートメントを指定する必要があります。when/then ステートメントは無制限に指定できます。

省略可能な else ステートメントで、default_expr を設定できます。primary_expr がどの test_expr 条件とも等しくない場合、default_expr が返されます。else ステートメントが指定されない場合、デフォルトでは null が返されます。

次の単純な case 式構文は、検索 case 式構文の一般的な例の簡略表現です。最初のコードブロックは単純な case 式構文で、2 番目のコードブロックは検索 case 式構文です。どちらのコードブロックも意味は同じです。

1case primary_expr    
2      when test_expr then result_expr    
3      when test_expr2 then result_expr2    
4else default_expr
1case    
2      when primary_expr == test_expr then result_expr    
3      when primary_expr2 == test_expr2 then result_expr2    
4else default_expr

ヒント

case ステートメントの使用

foreach 句で case 式を使用します。order bygroup by、または filter by 句で case 式を使用しないでください。

次のクエリ例では、単純な case 式構文が使用されています。
1q = load "data";
2q = foreach q generate xInt, (case xInt % 3 
3      when 0 then "3n"     
4      when 1 then "3n+1"    
5      else "3n+2"
6end) as modThree;

次のクエリ例では、検索 case 式構文が使用されています。
1q = load "data";
2q = foreach q generate price, (case     
3      when price < 1000 then "category1"     
4      when price >= 1000 and price < 2000 then "category2"    
5      else "category3"
6end) as priceLevel;

null 値の処理

通常、null 値は比較できません。search_conditionprimary_expr、または test_exprnull に評価された場合、else で指定された default_expr (else 句が指定されていない場合は null) が返されます。たとえば、次のクエリでは Mea1null に評価されると "Other" ���返されます。
1q = load "data";
2q = foreach q generate Mea1, (case Mea1
3      when 0 then "Type1"     
4      when 1 then "Type2"     
5      else "Other"
6end) as Category;
ただし、is null および is not null 演算子を使用して、null 値の条件を指定することもできます。
1q = load “data”;
2q = foreach q generate Mea1, (case     
3      when Mea1 is null then "Is Null"     
4      else "Is Not Null"
5end) as Category;

日付処理のベストプラクティス

case 式で日付値を使用する前に、SAQL toDate() 関数を使用して、文字列または Unix エポック秒の日付値を変換します。この操作を行うことで、比較の一貫性を最大限に確保できます。

1q = load "data/dates";
2q = foreach q generate OrderDate, (case     
3      when toDate(OrderDate_epoch_secs) < toDate("2/1/2015", "M/d/yyyy") and 
4toDate(OrderDate_epoch_secs) >= toDate("1/1/2015", "M/d/yyyy") then "Jan"     
5      else "Other"
6end) as Month;