翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Ifelse
ifelse
では、一連の if, then 式のペアを評価し、最初の if 引数が true に評価される then 引数の値を返します。true に評価される if 引数がない場合、else 引数の値が返されます。
構文
ifelse(
if-expression-1
,then-expression-1
[,if-expression-n
,then-expression-n
...],else-expression
)
引数
ifelse
は、1 つ以上の if、then 式のペアと、1 つの正確な else 引数の式を必要とします。
- if 式
-
式は true かどうかが評価されます。
address1
のようなフィールド名、'Unknown'
のようなリテラル値、またはtoString(salesAmount)
のような別の関数を使用できます。例: 「isNotNull(FieldName)
」。if
引数で複数の AND と OR 演算子を使用する場合は、ステートメントを括弧で囲んで処理の順序を指定します。たとえば、次のif
引数は、月が 1、2、または 5 で、年が 2000 のレコードを返します。ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')
次の
if
引数では、同じ演算子を使用していますが、月が 5 で任意の年、または月が 1 または 2 で年が 2000 のレコードを返します。ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
- then 式
-
if 引数が true と評価される場合に返される式。
address1
のようなフィールド名、'Unknown'
のようなリテラル値、または別の関数の呼び出しを使用できます。式は、他のthen
引数およびelse
と同じデータ型を使用する必要があります。 - else 式
-
true と評価される if 引数がない場合に返される式。
address1
のようなフィールド名、'Unknown'
のようなリテラル値、またはtoString(salesAmount)
のような別の関数を使用できます。式は、すべてのthen
引数と同じデータ型を使用する必要があります。
戻り型
ifelse
は、同じデータ型の値を then 式で返します。すべてのデータを返す then および else 式は、同じデータ型であるか、同じデータ型に変換されている必要があります。
例
次の例では、フィールド country
のエイリアスの列を生成します。
ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others")
このようなユースケースでは、フィールド内の各値をリテラルのリストに対して評価し、最初に一致した値に対応する結果を返します。作業を簡単にするために、関数の切り替えをお勧めします。前の例は、switch を使用して次の文に書き換えることができます。
switch(country,"United States","US","China","CN","India","IN","Others")
次の例では、顧客ごとの売上を人が読み取り可能なレベルに分類します。
ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)
次の例では、AND、OR、および NOT を使用して、条件演算子を使用した複数の式を比較し、ワシントンまたはオレゴンではなく、特殊プロモーションを適用されており、注文数が 10 を超える上位の顧客にタグ付けします。値が返されない場合、値 'n/a'
が使用されます。
ifelse(( (NOT (State = 'WA' OR State = 'OR')) AND Orders > 10), 'Special Promotion XYZ', 'n/a')
次の例では、OR のみを使用して、それぞれの country
に対応する大陸の名前を含む新しい列を生成します。
ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")
前の例は、次の例のように簡略化できます。次の例では、ifelse
と in を使用して、テストされた値がリテラルリストにある任意の行について、新しい列に値を作成します。ifelse
を notIn と一緒に使うこともできます。
ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")
作成者はリテラルリストを複数値パラメータに保存し、それを in または notIn 関数で使用できます。次の例は、リテラルリストが 2 つの複数値パラメータに格納されている点を除いて、前の例と同じです。
ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others")
次の例では、グループを売上合計に基づいて売上レコードに割り当てます。各 if-then
フレーズの構造は、between の動作を模倣しています。これは現在、計算フィールドの式では機能しないキーワードです。例えば、比較 salesTotal >= 0 AND salesTotal < 500
の結果は、SQL での比較 salesTotal between 0 and 499
と同じ値を返します。
ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')
次の例では、coalesce
を使用して最初の非 NULL の値を返すことで NULL 値をテストします。日付フィールドの NULL の意味を覚えておく必要はなく、代わりに読みやすい説明を使用できます。切断日が NULL の場合、両方が NULL でない限り、この例では中断日を返します。その後、coalesce(DiscoDate, SuspendDate, '12/31/2491')
'12/31/2491'
を返します。戻り値は、他のデータ型と一致する必要があります。この日付は一般的ではない値に見えるかもしれませんが、25 世紀の日付は、データマートで日付の最大値として定義された「時間の終わり」を合理的にシミュレートしています。
ifelse ( (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'), 'Active subscriber', 'Inactive subscriber')
以下は、すべてのコードを 1 つの長い行に圧縮する必要がないことを示すために、より読みやすい形式のより複雑な例を示しています。この例では、調査結果の値の複数比較を行います。このフィールドの潜在的な NULL 値を処理し、2 つの許容範囲を分類します。また、より多くのテストを必要とする 1 つの範囲と、有効ではない別の範囲 (範囲外) にラベルを付けます。残りのすべての値について、else
条件を適用し、その行の日付から 3 年後に再テストが必要であるというラベル付けをします。
ifelse ( isNull({SurveyResult}), 'Untested', {SurveyResult}=1, 'Range 1', {SurveyResult}=2, 'Range 2', {SurveyResult}=3, 'Need more testing', {SurveyResult}=99, 'Out of Range', concat ( 'Retest by ', toString ( addDateTime(3, "YYYY", {Date}) ) ) )
次の例では、「手動」で作成されたリージョン名をステートのグループに割り当てます。ここでは、コードの保守を容易にするために、/* */
で囲みながらスペースとコメントを記述しています。
ifelse ( /* NE REGION*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, 'Northeast', /* SE REGION*/ locate('Georgia, Alabama, South Carolina, Louisiana',{State}) > 0, 'Southeast', 'Other Region' )
リージョンのタグ付けのロジックは、次のように分類されます。
-
次のように、各リージョンに必要な状態をリスト化し、各リストを引用符で囲み、文字列にします。
-
'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'
-
'Georgia, Alabama, South Carolina, Louisiana'
-
必要に応じて、さらにセットを追加したり、国、都市、地方、または What3Words を使用したりできます。
-
-
次のように、州がリストにある場合、
locate
関数を使用してゼロ以外の値を返すことにより、(各行の)State
の値がリストにあるかどうかを確認します。locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
-
locate
関数はTRUE
またはFALSE
の代わりに数値を返しますが、ifelse
はTRUE
/FALSE
のブール値を必要とします。これを回避するために、locate
の結果を数値と比較することができます。州がリストにある場合、戻り値はゼロより大きくなります。-
州が存在するかどうかを尋ねます。
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
-
リージョンが存在する場合は、特定のリージョン (この場合は Northeast リージョン) としてラベルを付けます。
/*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
-
-
リストに含まれていない州があり、
ifelse
は単一のelse
式を必要とするため、残りの州のラベルとして'Other Region'
を提供します。/*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*The else expression:*/ 'Other Region'
-
それらをすべて
ifelse( )
関数でラップして、最終バージョンを取得します。次の例では、元の [Southeast] リージョンの州を除外します。
タグの代わりに、それらを追加し直すことができます。<insert more regions here>
リージョンを追加する場合は、さらにこれらの 2 つの行のコピーを作成し、目的に合わせて州のリストを変更することができます。リージョン名は好きなものに、フィールド名は
State
から任意のものに変更できます。ifelse ( /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*
<insert more regions here>
*/ /*The else expression:*/ 'Other Region' )注記
if 式の初期比較を行う方法は他にもあります。たとえば、「このリストから欠落していない州は何ですか?」という質問があるとします。「どの州がリストに載っていますか?」ではありません。もしそうなら、別の言い方をするでしょう。次のように、locate ステートメントをゼロと比較してリストから欠落している値を見つけ、NOT 演算子を使用してそれらを「欠落していない」として分類することができます。
/*The if expression:*/ NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),
どちらのバージョンも正しいです。選択したバージョンは、ユーザーとそのチームにとって最も意味があり、簡単に維持できるものである必要があります。すべてのオプションが同等である場合は、最も単純なものを選択してください。