Alteryx:データ入力時のSQLを動的に変更したい

2019.03.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、DI部の兼本です。

Alteryxでデータベースからデータを読み込む際にSQLクエリを動的に変更したいとき、ありませんか? 今回はアドホックにSQLクエリのWhere句を変更する方法についてご紹介いたします。

使用した環境

  • Alteryx Designer 2019.1を使用しています。

通常のデータ読み込み

Alteryxでデータの読み込みを行う場合、データ入力ツールを使用します。 例えば、Microsoft SQL Serverの場合は、以下のような設定をすることで、データベースに対してSQLクエリを発行することができます。

上記の設定を行いワークフローを実行すると、以下のようなSQLクエリがデータベースサーバに対して実行されます。

Select
Transactions.Customer_ID,
Transactions.Order_ID,
Transactions.Product_Category,
Transactions.Quantity,
Transactions.Unit_Price
From Transactions

クエリの実行結果は以下のようになります。

このデータを見ると、ProductCategory(製品カテゴリ)というフィールドに、

  • Office Supplies
  • Technology
  • Furniture

という3つのカテゴリが格納されていることがわかります。 次のステップでは、この製品カテゴリを使って絞り込みをしてみます。

クエリを動的に変更する場合

動的入力ツールを使用することで、SQLクエリの書き換えができます。 ワークフローはシンプルにこんな感じにしています。

テキストインプットツールには、以下のデータを入力してありますが、このデータはあとでWhere句に渡す検索条件として使用します。

なお、今回はわかりやすくするためにテキストインプットツールを使用していますが、ここにワークフローで前処理した結果やインターフェースツールでパラメータとして受け取った結果を渡すことで、インタラクティブな処理を実現することも可能です。

メインとなる動的入力ツールでは最初にデータ入力ソーステンプレートの編集を行います。 「編集」ボタンを押下すると、データ入力ツールと同様に入力するデータソースを指定できますので、データベースへの接続設定とSQLクエリを作成します。

ビジュアルクエリビルダを使用しているとわかりにくいですが、作成したSQLクエリは以下のようになっています。

Select
Transactions.Customer_ID,
Transactions.Order_ID,
Transactions.Product_Category,
Transactions.Profit,
Transactions.Quantity
From Transactions
Where Transactions.Product_Category = 'Technology'

テンプレートとして作成したSQLクエリのWhere句を書き換えるには動的入力ツールの「SQLクエリを更新」オプションを選択し、アクションとして「SQL:WHERE句を更新する」を追加します。

メニューから「SQL:WHERE句を更新する」を選択すると、以下のダイアログが表示されます。

テンプレートで作成したSQLクエリのWhere句に当たる部分が自動的に設定されていますので、「置換フィールド」にテキスト入力ツールで用意した「Category」を指定します。 このワークフローを実行すると、元のSQLクエリのWhere句に指定された値をテキスト入力ツールで指定された値に置き換えることで、以下のSQLクエリを順番に実行してくれます。

Select Transactions.Customer_ID, Transactions.Order_ID, Transactions.Product_Category, Transactions.Profit, Transactions.Quantity
From Transactions
Where Transactions.Product_Category = 'Furniture'

Select Transactions.Customer_ID, Transactions.Order_ID, Transactions.Product_Category, Transactions.Profit, Transactions.Quantity
From Transactions
Where Transactions.Product_Category = 'Office Supplies'

動的入力ツールで実行した結果はユニオンツールで接続した場合と同様に積み上げて出力されるため、結果として製品カテゴリが「Furniture」と「Office Supplies」に一致するレコードを抽出することができます。 このことは、出力をProduct_CategoryごとのOrder_IDをカウントすることで確認できます。

まとめ

今回はSQL文のWhere句を動的に更新する方法についてご紹介いたしました。 この方法ではひとつのワークフローから複数のSQLクエリを実行するため、データベースサーバへの負荷が高くなる可能性があります。 処理や環境に最適なワークフローを考慮するにはIn-DatabaseツールによるELT処理もご検討ください。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400