このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-006: レシート明細データ(receipt.csv)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上数量(quantity)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
・顧客ID(customer_id)が”CS018205000001″
・売上金額(amount)が1,000以上または売上数量(quantity)が5以上
解答ワークフローは以下のようになります。
特定のフィールドの特定の条件に一致したレコードを抽出する場合は、フィルターツールを使用しますが、今回は条件が3つあり、1つはカスタマーIDの条件。残りは数値で比較する条件をOR条件で組み合わせています。
5問目でデータ型の確認は行ったので、そこについては確認済みで進めていきますが、売上金額(amount)はInt16型、売上数量(quantity)はByte型の範囲に収まるため、それぞれセレクトツールで以下のように設定する必要があります。
ここから、二通りの作成方法についてご紹介します。
- 複数のフィルターツールで結果を出す
- 複数条件を一つのフィルターツールで実現
1. 複数のフィルターツールで結果を出す
今回は、3つの条件ですが、実質的には前半部分の顧客ID(customer_id)の条件と、売上金額(amount)、売上数量(quantity)のOR条件の2つに分けることができます。
実際のワークフローは以下の通りとなります。
顧客ID(customer_id)の条件は、基本フィルターで十分です。5問目と同様の条件なので、フィールドは「customer_id」、演算子は「等しい」、値は「CS018205000001」と設定しましょう。
次に2つ目のフィルターツールです。OR条件の場合はフィルターツール内でOR条件を設定する必要があります(厳密には、複数のフィルターツールを使って実現することもできますが、一般的に行わない方法なので今回は取り扱いません)。
OR条件の場合は、カスタムフィルターを使用します。
以下のような計算式をカスタムフィルターにセットします。
[amount] >= 1000 OR
[quantity] >= 5
2つの計算式を記載し、ORで結合するように記載します。これで、売上金額(amount)が1,000以上もしくは売上数量(quantity)が5以上、というレコードを抽出できます。
2. 複数条件を一つのフィルターツールで実現
次に、1つのフィルターツールで完結する方法を紹介します。ワークフローとしては以下のような形になります。単純にすべての条件をフィルターツールに記載するだけです。
上のように、すべての計算式を一つのフィルターツール内に記載します。計算式としては以下の通りです。
[customer_id] = "CS018205000001" AND
([amount] >= 1000 OR [quantity] >= 5)
赤色の部分は「顧客ID(customer_id)が”CS018205000001″」であることを示し、緑色の部分が「売上金額(amount)が1,000以上または売上数量(quantity)」を示します。
それぞれの計算式をANDでつなぎ、緑色の部分はカッコでくくっています。AND条件でつなぐことで、両方の条件を満たすレコードを抽出することができます。
これにより一つのフィルターツールで実現されました。
コメント