Alteryxのチェーンアプリを用いた、動的に変化するフィルタを実現する方法を解説します
Alteryxの分析アプリでは、利用ユーザー側でファイルを指定したりフィルタ条件を変更してワークフローの実行を行うことができます。しかしながら、普通に作成すると様々な制限があります。
今回は、その制限と制限なしにできるチェーンアプリ(Chainned App)をご紹介します。
今回のサンプル
今回は、コンピュータ製品を販売する会社の売上データを使って、カテゴリごとのレポートを作成するようなワークフローを運用していきたいとします。そのカテゴリですが、カテゴリ1、カテゴリ2とあり、カテゴリ1とカテゴリ2は以下のように構成されているとします。
カテゴリ1 | カテゴリ2 |
---|---|
Hardware | Desktop PC |
Hardware | Note PC |
Hardware | Option |
Software | Office |
Software | Security |
カテゴリ1、カテゴリ2に対してそれぞれフィルタをかけるワークフローを作ってみると以下のようになります。
ユーザーインターフェースは以下のとおりです。
ここでは、3つのインターフェースが実装されています。
最上段がファイル指定です。
真ん中がドロップダウンボックスで、カテゴリ1から1つ選択(今回だとHardwareとSoftware)するようになっています。
最下段がリストボックスで、カテゴリ2から複数選択できるようになっています。
ここで先程の表を見ると、カテゴリ1でHardwareを選択すると、カテゴリ2はDesktop PC、Note PC、Optionの3つのみが表示されるのが理想的です。しかしながら、ここではカテゴリ2がカテゴリ1で選択した内容に関わらずすべて表示されています。
結論としては、通常のワークフローの範囲で動的なフィルタを利用したワークフローを作ることはできません。理由として、各インターフェースの情報はワークフロー実行時に更新されるようになっているためです。
チェーンアプリ化する
それでは、ここでの目標となる「動的なフィルタ」を実現するための方法を紹介したいと思います。これを実現するためには、チェーンアプリという機能を使う必要があります。
チェーンアプリのメカニズム
チェーンアプリは、一つ前の分析アプリで次の分析アプリ入力ファイルを作ります。
これは、インターフェースツールの値の更新がワークフローを実行する時と、外部ソースを参照している時のみだからです。
また、分析アプリには、実行が成功すると次の分析アプリを実行するという機能があり、この2つの組み合わせによりチェーンアプリが実現されています。
実際の動きとしては、以下のようなイメージとなります。
さて、このイメージを実際の分析アプリに適用してみましょう。先程の分析アプリですと以下のように分割可能です。
実行に成功した際に次のチェーンアプリを呼び出す方法
まず、「実行に成功した際に、次のチェーンアプリを呼び出す方法」をご紹介します。
これにはインターフェースデザイナーで設定を行う必要があります。
メニューの[表示]-[インターフェースデザイナー]から設定画面を開くことができます。その後、左端の一番下にあるアイコンの「プロパティ」を開きます。
ここで、「成功した場合 - 別の分析アプリを実行する」にチェックを入れ、実行したいアプリのファイル名を記載します(自動的に相対パスで記述されます)。
今回は、分析アプリ1、分析アプリ2で次に開く分析アプリを指定する設定が必要です。
分析アプリ1
分析アプリ1の要件としては、以下のとおりです。
- ファイル読み込み
- 簡単なETL処理(カテゴリ分割、データ型変更)
- 分析アプリ2で使う入力データの作成
- 分析アプリ2へ渡すメインデータ
- 分析アプリ2のドロップダウンツール用ファイルの作成
- 実行に成功したら、分析アプリ2を開く
ここでポイントは、分析アプリ2へ渡すメインデータとドロップダウンツール用ファイルの作成です。
実際のワークフローは以下のようになります。
まず、分析アプリ2へ渡すメインデータは、読み込んでETL処理を行ったデータをそのままyxdb形式等で保存すれば良いです。なお、速度的にyxdb形式が高速なのでこちらを推奨としたいと思います(他の形式でもチェーンアプリの構築はできますが、Alteryx専用のデータ形式であるyxdb形式は、読み込み・書き込みが高速でデータ型等もAlteryxの内部で持っているものをそのまま保存してくれます)。
分析アプリ2のドロップダウンツール用ファイルについて
ここは少し詳しく解説を行います。インターフェースツールのうち、ドロップダウンツール、リストボックスツールが外部ファイルを参照する場合、決まったフォーマットで保存する必要があります。
ツールの説明には「外部ソース - NAME && VALUEフィールドを含む必要があります」とわかりにくい記載ですが、つまり言い換えるとフィールド名が「NAME」と「VALUE」となっているファイルであれば良いということになります。具体的には、集計ツールの設定を以下のようにして作成しています。
これにより以下のようなアウトプットが得られます。これをyxdb形式で保存しています(ファイル名:ChainnedApp1_dropdownforApp2.yxdb)。
分析アプリ2
分析アプリ2の要件は、以下のとおりです。
- ドロップダウンツールで指定した値でカテゴリ1をフィルタリング
- 分析アプリ3で使う入力データの作成
- 分析アプリ3へ渡すメインデータ
- 分析アプリ3のリストボックスツール用ファイルの作成
- 実行に成功したら、分析アプリ3を開く
実際のワークフローは以下のようになります。ここでのポイントは、フィルタをかける部分でしょうか。ユーザーインターフェースツールに慣れていないとわかりにくい部分です。
ドロップダウンツールでフィルタリング
ドロップダウンツールの設定は以下のとおりです。
ポイントはリストの値に「外部ソース」を選択、プロパティに分析アプリ1で作成したファイル「ChainnedApp1_dropdownforApp2.yxdb」を指定します。
アクションツールの設定は、フィルタツールの設定にも影響を受けます。
まず、フィルタツールの設定ですが、基本フィルターを使用します。基本フィルターでフィールド名は「カテゴリ1」を指定、演算子としては「等しい」、値はここでは仮に「Hardware」としています。
次に、アクションツールの設定です。アクションタイプは「値を更新」とし、更新する値または属性については、「Operand - value」を選択します。
これにより、現在「Hardware」と記載している値を書き換えることになります。ドロップダウンツールは、選択した一つの値だけを返すため、その値で直接値を書き換えることができます。
なお、フィルターツールが「カスタムツール」の場合はアクションツールの指定方法が異なりますのでご注意ください(ここでは説明を省きます)。
リストボックスツール用のファイルの作成は、分析アプリ1のドロップダウンツール用ファイルの作成と同様です。
分析アプリ3
分析アプリ3の要件は、以下のとおりです。
- リストボックスツールで指定した値でカテゴリ2をフィルタリング
- 本ツールの主目的のレポーティングを行い結果を出力します
実際のワークフローは以下のようになります。フィルタツールより右の部分はメインの処理部分です(今回は本筋ではないのであえてツールボックスを閉じています)。
ここでもポイントはフィルタをかける部分ですので、注目して見ていきましょう。
リストボックスツールでフィルタリング
リストボックスツールの設定は以下のとおりです。
一番のポイントは、デフォルトの「ツールモードの選択」ではなく「カスタムリストの生成」を選択することです。この部分の設定は、チェックを入れて選択したものがどのような形式で返ってくるか、というところを決める設定となります。例えば、「Office」「Security」にチェックを入れている状態で、「ツールモードの選択」にしていると「Office=True,Security=True」という値が返ってきます。
しかしながら、これをこのまま使うのは難しいので、「カスタムリストの生成」を選択すると扱いやすいです(開始テキスト、区切り記号、終了テキストはデフォルトで設定されている値を使用します)。これにより、「Office」「Security」にチェックを入れれば「"Office","Security"」という値が返ってきます。
リストの値は「外部ソース」を選択、プロパティに分析アプリ2で作成したファイル「ChainnedApp1_listboxforApp3.yxdb」を指定します。
次に、フィルタの設定を行います。
ここでは、カスタムフィルターを用い、
[カテゴリ2] IN ("Desktop PC")
という計算式を使用しています。
IN演算子により、[カテゴリ2]の値がカッコで囲まれたもののいずれかに該当すればTrueとなります。リストボックスツールから返ってくる値が今回「"Office","Security"」のような形で返ってくるように設定したため、カッコ内の文字列をそのまま書き換えることができればOKです。
最後にアクションツールの設定です。今回は「フォーミュラで値を更新」を使ってみましょう。「フォーミュラで値を更新」オプションは、式をまるごと書き換えます。この時に演算子を使って式を組み立てます。
今回は、
'[カテゴリ2] IN ('+[#1]+')'
という式としています。
この中で[#1]というのは、アクションツールのインプットの番号を示しています。つまり、今回であればリストボックスツールと接続しているので、そのデータが[#1]となります。実際に動作する段階になると、リストボックスツールで「Office」「Security」を選択した場合は[#1]は「"Office","Security"」で置き換えられますので、「[カテゴリ2] IN ("Office","Security")」という計算式になり、この式を使ってフィルタツール内で判定が行われます。
実際に動かしてみる
それでは、実際に動かしてみます。まず、最初の分析アプリ1を動かします。
ここでは、ファイルの読み込みを行います。内部的には、次の分析アプリのために、ドロップダウンツール用の参照用外部ファイルと、次のツールに渡す用のファイルを作成します。
分析アプリ2では、カテゴリ1に対してフィルタをかける値を選択します。今回は、「Software」を選択します。
内部的には、次の分析アプリのために、リストボックスツール用の参照用外部ファイルと、次のツールに渡す用のファイルを作成します。
そして、これが最後の分析アプリ3です。ここでは、カテゴリ2のフィルタ項目の選択とラストの出力まで作成します。
「Security」を選択して実行すると、「Software」の「Securiy」項目のみでフィルタをかけたレポートが出力されます。
できあがったファイルはこちらです。
まとめ
チェーンアプリについて解説をしました。
- 動的なフィルタを利用可能なワークフロー
- サーバーでも利用可能
チェーンアプリの作り方のポイントはこちら。
- 実行が成功したら指定したワークフローを起動する機能を利用
- ドロップダウンツール、リストボックスツール用の外部参照ファイルを、利用する一つ前のワークフローで作成する
- 次の分析アプリに渡すようのデータファイルを作成
若干手間はかかりますが、ユーザーフレンドリーなインターフェースを持つワークフローが作成可能ですので、ぜひ取り入れてください。
サーバーにアップロードする際の注意点
AlteryxServerでチェーンアプリを使う場合は、途中のテンポラリのファイル(今回で言えば、分析アプリ2,3で使用するインターフェースツール用のファイルと、メインのデータ2つの合計4ファイル)もアップロードに含めてください。
確認方法として、サーバーに保存する際に、「ワークフローアセットを管理する」から確認が可能です。
アセット管理の画面では「ツール別にアセットをグループ化する」オプションにチェックをつけると、より詳細に確認可能です。
ここでは、
- ChainnedApp2.yzwz
- ChainnedApp3.yxwz
- ChainnedApp1_dropdownforApp2.yxdb ・・・ 分析アプリ2のドロップダウンツール用ファイル
- ChainnedApp1_listboxforApp3.yxdb ・・・ 分析アプリ3のリストボックスツール用ファイル
- ChainnedApp1_datatemp1.yxdb ・・・ 分析アプリ2のメインデータ
- ChainnedApp1_datatemp2.yxdb ・・・ 分析アプリ3のメインデータ
という6つのファイルがアセットとして認識されていればOKです。テンポラリファイルも含めなければ、Server側がファイルを見失ってしまうようです。
※うまくいかない際は英語版に切り替えてみてください
サンプルワークフローダウンロード
ChainnedApp_sample fa-upload
※Alteryx Designer Version 2021.2.2.45235時点の情報です