この記事は【Alteryx Tips】複合マクロを作る ~条件分岐型フォーミュラマクロ 前編~ の後編になります。
前回まででフィルタリング処理は終わってますので、フォーミュラ処理を作っていきます。
必要な設定を考える
前回と同様に、マクロを作成する上でどの様な機能を満たせばよいかを考えます。今回は加工処理条件を考えましょう。
加工処理条件
加工処理条件はフォーミュラツールで必要な設定になりますが、フォーミュラツール全てを網羅しようとすると設定が膨大になる為、今回は四則演算、指定した値を入れる(文字列、数字)、指定したカラムの値を参照するに限定します。以上を踏まえて条件を考えます。
①加工対象カラム
②新規カラム or 既存カラムの更新
③処理内容
④処理順番
大体条件はこの4つになると思います。
以上を踏まえて今回は次の様な設定ファイルを考案しました。
これは【Alteryx Tips】「フォーミュラで生XMLを更新」を用いたマクロの応用 四則演算を設定ファイルを用いて行うの記事で紹介した設定ファイルを改良しています。
フィルタリング設定のIDとフォーミュラ設定のIDを対応するようにし、フィルタリングで選ばれたレコードに対してどの様な処理を行うかを変更できるようにします。
また、加工方法に「=」を追加してます。「=」の時は設定ファイルに記載されてる文字、もしくは数字をそのままカラムに値として持たせます。
「+」を選択しデータ型式に文字を選択した場合は対象カラムの値を入れます。この時カラムが2つ以上指定された場合は文字列は結合するようにしてあります。
設定ファイルからマクロ更新出来る形式に加工する
それでは設定ファイルを加工しマクロ更新に必要な形式にします。
ここでは、フォーミュラは複数の処理を行う事からマクロはXMLで更新することにします。
ワークフローも【Alteryx Tips】「フォーミュラで生XMLを更新」を用いたマクロの応用 四則演算を設定ファイルを用いて行うの記事で用いた物から若干の変更を加えてます。ここでポイントとなることはXMLを生成する場合に文字列を扱う時は「"」を"で記載する事です。
ここまでのワークフローを実行すると以下の結果が得られます。
これでID毎に処理をまとめたXMLが完成します。
マクロの構成を考える
通常であればXMLで更新するマクロで問題ありませんが、フィルタ条件で複数の条件に該当する時に、複数のフォーミュラ処理を行う場合に困ります。
その問題を反復マクロを用いる事で回避できるようにします。
反復マクロとは、データを処理し条件が一致しないデータについてはデータをInputから再度入力し条件を変更し処理を繰り返し行うマクロになります。
この特性を利用し全てのフォーミュラ処理を実行するまで全データを繰り返せば、フィルタ条件を複数満たすデータでも問題なく処理できます。
ではこの動きを踏まえて今回マクロに入力として与えるデータを考えていきます。
①処理データ
②フィルタマクロで付与されたIDとデータのレコードNo
③フォーミュラ処理用のXML
以上が入力になれば問題ありません。
ここで②には反復マクロでのシステム定数Engine.IterationNumberを利用して何回反復してるかを判定できるように処理数としてユニークIDを0から振ります。
マクロ内容
マクロは以下の様に構成しています。
Engine.IterationNumberを利用してデータとXMLをフィルタし、XMLで更新するフォーミュラツールを通し、該当レコード以外はユニオンで結合します。処理数のMaxがEngine.IterationNumberより少なければすべてのレコードを反復するようにします。こうする事で該当のフォーミュラ設定を全てのデータに反映します。
実行結果と現状の問題点
此処までのワークフローを実行すると下記のような結果が得られます。
抽出条件、加工条件に合致したレコードが生成されてることが分かります。しかし、更新カラム名が同一の場合、あとから実行された条件の値で上書きされてます。回避方法としては、設定ファイルに記載された順で処理を行うように変更し、設定ファイルの記載ルールとして決まり事を決める必要があります。
今回は前後半に分け少し応用を効かせたマクロを作成しましたがいかがでしたでしょうか。Alteryxではこの様にやりようによっては、外部の設定を変えるだけでワークフローの処理内容を変更する事も可能です。基本的にはデータに合わせてワークフローを作ることが処理速度的にもベストですが、変更が多々発生する環境ではこの様に、外部の設定を変更させて対応するタイプのワークフローも活用できます。
添付