Ifelse - Amazon QuickSight

重要:Amazon QuickSight 分析ワークスペースを再設計しました。コンソールの新しい外観を反映していないスクリーンショットや手順のテキストが表示される場合があります。 QuickSight 現在、スクリーンショットと手順のテキストを更新しています。

機能または項目を検索するには、クイック検索バーを使用します。

QuickSightの新しい外観について詳しくは、「Amazon での新しい分析機能の紹介」を参照してください QuickSight。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 つ以上の ifthen 式のペアと、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")

前の例は、次の例のように簡略化できます。次の例では、ifelsein を使用して、テストされた値がリテラルリストにある任意の行について、新しい列に値を作成します。ifelsenotIn と一緒に使うこともできます。

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' )

リージョンのタグ付けのロジックは、次のように分類されます。

  1. 次のように、各リージョンに必要な状態をリスト化し、各リストを引用符で囲み、文字列にします。

    • 'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'

    • 'Georgia, Alabama, South Carolina, Louisiana'

    • 必要に応じて、さらにセットを追加したり、国、都市、地方、または What3Words を使用したりできます。

  2. 次のように、州がリストにある場合、locate 関数を使用してゼロ以外の値を返すことにより、(各行の) State の値がリストにあるかどうかを確認します。

    locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
  3. locate 関数は TRUE または FALSE の代わりに数値を返しますが、ifelseTRUE/FALSE のブール値を必要とします。これを回避するために、locate の結果を数値と比較することができます。州がリストにある場合、戻り値はゼロより大きくなります。

    1. 州が存在するかどうかを尋ねます。

      locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
    2. リージョンが存在する場合は、特定のリージョン (この場合は Northeast リージョン) としてラベルを付けます。

      /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
  4. リストに含まれていない州があり、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'
  5. それらをすべて 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),

    どちらのバージョンも正しいです。選択したバージョンは、ユーザーとそのチームにとって最も意味があり、簡単に維持できるものである必要があります。すべてのオプションが同等である場合は、最も単純なものを選択してください。