このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-005: レシート明細データ(receipt.csv)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
・顧客ID(customer_id)が”CS018205000001″
・売上金額(amount)が1,000以上
解答ワークフローは以下のようになります。
特定のフィールドの特定の条件に一致したレコードを抽出する場合は、フィルターツールを使用しますが、今回は条件が二つあり、片方は数値での比較となります。
今回は3ステップを踏みたいと思います。
- データ型の確認
- 複数のフィルターツールで結果を出す
- 複数条件を一つのフィルターツールで実現
1. データ型の確認
数値で比較する場合は、数値同士で比較する必要がありますが、今回読み込んでいるファイルはCSVファイルのため、読み込んだ際のデータ型はすべてテキスト型となっています。
今回は、オートフィールドツールでデータ型を確認してみましょう。
オートフィールドツールは特に設定はありません。チェックを入れた項目のデータ型を自動的に判定してくれます。
ワークフローを実行後、オートフィールドツールの出力アンカーを選択し、結果ウィンドウにて「メタデータ」をクリックすることで、各フィールドのデータ型やサイズなどを確認することができます。
今回はamountというフィールドにて数値で比較したいため、このフィールドを数値型に変える必要がありますが、オートフィールドツールによると最適なデータ型は「Int16」ということになります。このままオートフィールドツールからワークフローを組み立ても良いですが、今回はこの結果をセレクトツールに適用していきたいと思います。
セレクトツールにて、amountの型を「Int16」に変更しましょう。もちろんその他不要な項目のチェックを外す必要があります。
ようやくここからフィルターを使うことができます。
2. 複数のフィルターツールで結果を出す
まずは、二つの条件ということで複数のフィルターツールで実行してみたいと思います。ワークフローとしてはこのような形になります。
シンプルな検索条件の場合は、「基本フィルター」を使用します。
まず1つ目のフィルターツールです。フィールドは「customer_id」、演算子は「等しい」、値は「CS018205000001」となります。
次に2つ目のフィルターツールです。フィールドは「amount」、演算子は「>=」、値は「1000」となります。
3. 複数条件を一つのフィルターツールで実現
次に、1つのフィルターツールで完結する方法を紹介します。ワークフローとしては以下のような形になります。
複数条件を1つのフィルターツールで実現する場合は「カスタムフィルター」を使います。
基本フィルターで一度設定したのち、カスタムフィルターを選択すると、自動的に基本フィルターの計算式がカスタムフィルターに入力されます。例えば、以下のような場合、うっすらとカスタムフィルターに計算式が出ていると思います。
ここからカスタムフィルターを選択すると、以下のように自動的に入力されます。
さて、ここから追加で条件を設定しましょう。amountが1,000以上という条件になるので、AND条件となります。つまり、計算式としては以下の通りです。
[customer_id] = "CS018205000001" AND
[amount] >= 1000
このようにカスタムフィルターに設定すればOKです。
コメント