alteryxで動的に列名を変える

alteryxで特定のフィールド名称を変更すマクロの作成方法です。
2022.11.30

alteryxで列名称を変更する際に、指定した列をあらかじめ設定された名称に置き換える方法の一つとして記事としました。

前提条件

下記の環境で検証しています。
・Windows 10 Pro
・Alteryx Designer 2022.1.1

背景

業務における下記のような場面を想定しています。
・定期的にデータが生成されるが、フィールド名が毎回異なる
・キーとなる特定のフィールドがあり、そのフィールドには、決まった名称を設定したい

単純にセレクトツールを用いて、特定の列の名称を変更する。で対応自体は可能なのですが、アンケートデータなど定期的に生成されるデータかつ、フィールド名も頻繁に更新されるような場面では、セレクトツールで毎度フィールド名を指定し、手で既定の名称を入力する、では効率的ではありません。

そこで、マクロ機能と動的入力ツールを使用する方法でのフィールド名変更を試みます。

目標

今回の目標は、下記のようなワークフローを作成することとします。
・ユーザーが対象列を指定すれば、指定したフィールドの名称が、あらかじめ設定された名称に置き換えられる

使用データ

背景で述べたようなアンケートデータ模した横持ちのデータを作成し、インプットとします。

ID Age Q_1 Q_2 ・・・ Q20
1 31 0 0 ・・・ 1
2 15 1 1 ・・・ 1

項目の内容は下記の通りとします。

項目 概要
ID アンケート回答者の識別子
Age アンケート回答者の年齢
Q_1 ~ Q_20 アンケート回答(1または0)

Q_1~Q_20まで質問項目がありますが、そのうちのいくつかの質問項目が、年齢のような回答者の属性情報を表す設問となっており、フィールド名を変更したい。という設定です。

動的リネームツール

フィールド名の変更に、動的リネームツールを使用します。動的リネームツールの詳細は、こちらを参照ください。
AlteryxのDynamic Renameツールの話 | Developers IO

今回は、動的リネームツールの名前の変更モードのうち、「フォーミュラ」を使用します。
例えば、使用データのフィールドを下記の通り変更したいとします。

元データのフィールド名 変更後名称
Q_1 キー列1
Q_2 キー列2
Q_3 キー列3

この場合、フォーミュラモードを使用した指定列の変更フローと、ツールの式は下記の通りとします。

IF [_CurrentField_]="Q_1" 
THEN "キー列1"
ELSEIF [_CurrentField_]="Q_2" 
THEN "キー列2"
ELSEIF [_CurrentField_]="Q_3" 
THEN "キー列3" 
ELSE [_CurrentField_] 
ENDIF

データの各フィールド名(_CurrentField_)に上記の式が適用されます。

マクロ

このワークフローをマクロ化します。ユーザーが3つのフィールドと、それぞれどの名称に変更できるか選択できるようにします。マクロは下記のようになります。ワークフローからの変更点は下記の通りです。

1.データ入力ツールをマクロ入力に置き換え
2.閲覧ツールをマクロ出力に置き換え
3.ドロップダウンツールを動的リネームツールのライトニングボルト入力に接続(自動的にアクションツールが間に配置されます。)
4.3つのフィールドを指定できるようにしたいので、ドロップダウンツールを2つ追加し、アクションツールに接続
5.マクロ入力ツールとドロップダウンツールの入力アンカーを接続

3について、ドロップダウンリストのそれぞれに指定されたフィールド名が、特定の変更後名称に紐づくような形です。
5については、マクロ入力ツールのフィールド(マクロの入力となるデータフィールド)をドロップダウンリストに表示するために必要です。今回であれば、フローにマクロを追加し、アンケートデータを接続した際に、下図のようにドロップダウンリストに表示されます。

アクションツールの設定

アクションツールでは、下記の3点の設定を行います。

1.アクションタイプを「フォーミュラで値を更新(既定)」に設定
2.「更新する値または属性」欄でExpression-valueを選択
3.フォーミュラ式を入力

アクションツールのフォーミュラ式には下記を入力することで、文字列として動的リネームツールに渡されるフォーミュラ式を生成します。

'IF [_CurrentField_]="'+[#1]+'" 
THEN "キー列1"
ELSEIF [_CurrentField_]="'+[#2]+'" 
THEN "キー列2"
ELSEIF [_CurrentField_]="'+[#3]+'" 
THEN "キー列3" 
ELSE [_CurrentField_] 
ENDIF'

式の #1, #2, #3 には、ドロップダウンリストで選択されたフィールド名が入ります。
例えば一つ目のドロップダウンリストで「Q_1」列を選択すると、#1 には、Q_1が入ります。
#2, #3 にそれぞれ「Q_2」「Q_3」が選択されたとすると、上述のマクロ化前の動的リネームツールに例として記述された式が生成されます。

以上がマクロ化までの手順です。
通常のワークフローにマクロを追加し、サンプルデータを入力すると、下図の通り、キー列を選択できるようになります。出力では、それぞれ選択された列の名称が上表の変更後名称(キー列1,2,3)に変更されます。

さいごに

動的リネームツールとマクロを使用することで、インプットデータの形式が変更されても、フロー自体に変更を加える手間を減らすことが期待できます。細かな変更時のミスも事前に防ぐことができるので、定型的な業務ではマクロ化を検討してもよいかもしれません。
今回は以上になります。こちらの記事が何かの参考になれば幸いです。

参考

AlteryxでFormulaツールの対象列を動的に変えたい | Developers IO
Macro - Prompt for specific columns