AlteryxでXMLの値を直接変更してマクロの設定を置き換える

こんにちは、小澤です。

今回は、Alteryxでマクロを作成する際にActionツールを使ってXMLを直接書き換える方法を紹介します。

AlteryxのワークフローとXML

以前、紹介しましたがAlteryxのワークフローのファイルはXMLで記述されたテキストファイルとなっています。

このXMLファイルには以下のような内容が含まれています。

  • 各ツールの設定値
  • ワークフロー上で各ツールの位置
  • ツール同士のコネクション
  • (マクロやAnalytic Appの場合)Interface Designerで設定した項目

マクロやAnalytic Appでは、インターフェースツールとActionツールを使って、 ツールの設定値を実行時に変更可能です。

実は、その際に変更対象として個別の値ではなく設定値が記述されたXMLそのものを直接変更可能です。

ActionツールでXMLを直接編集する

これを行うために必要なことは、Actionツールでの設定のみとなります。 通常利用時と同様にインターフェースツールと通常のツールをActionツールで接続する部分に変更はありません。

まず、Actionツール設定にて「Update Raw XML with Formula」を選択し、書き換え対象を選択します。

続いて、下部にある「Formula to Generate New XML」でフォーミュラ式を記述してXMLを直接編集します。

その際、インターフェースから受け取った値は「Connections from Questions」、現在の設定のXMLは「Destination」の値を変数として利用可能です。

さて、「書き換える」と言っても何をどう書き換えれるのかよくわからないと思います。 「Destionation」に対象となる値が入っているのですが、それがどのようなものなのか確認してみましょう。

例えば、Input Dataツールでyxdbファイルを読み込んでいる場合はツールの設定は以下のようになっています。

<Configuration>
  <Passwords />
  <File OutputFileName="Path" FileFormat="19" SearchSubDirs="False" RecordLimit="300">C:\path\to\file\iris.yxdb</File>
  <FormatSpecificOptions />
</Configuration>

Actionツールの設定で指定可能な項目はこれらConfigureの子要素となっている3つの項目がそれぞれ対応しています。

先ほどの画像中では「XML Element to Update」で「File」を選択していましたので、上記XML上のFileタグの部分がDestinationとして渡されたわけです。

さて、ここで先ほど飛ばした設定項目によって具体的に渡される値が変わります。

この設定を「Update Inner XML」にした場合は、対象のタグの子要素をが渡されます。 Input DataツールでFileを指定している場合は C:\path\to\file\iris.yxdb の部分のみが渡されます。

一方、「Update Outer XML」を選択した場合は、そのタグを含めたものが渡されます。 この場合、 <File OutputFileName="Path" FileFormat="19" SearchSubDirs="False" RecordLimit="300">C:\path\to\file\iris.yxdb</File> が対象となります。

これらはDestination変数として文字列型で渡されるので、それに対して操作を行うことで設定値の変更が可能となります。

今回のフォーミュラ式では replace([Destination], 'iris', [#1]) としているのでインターフェースから入力されたもので「iris」の部分を置き換えています。 これによって、読み込み対象として同一のフォルダにある別なyxdbファイルへの変更が可能になっています。

また、ファイル名の変更に関してはInner, Outerどちらでも影響がありませんが、読み込むレコード数上限などXMLの属性値などを変更したい場合はOuterを指定することになります。

yxdbファイルを読み込むInput DataツールのXMLは非常に単純なものでしたが、ツールによっては設定がさらに階層化することがあります。 例えば、Selectツールの場合、以下のようになります。

<Configuration>
  <OrderChanged value="True" />
  <CommaDecimal value="False" />
  <SelectFields>
    <SelectField field="Species" selected="True" />
    <SelectField field="Sepal.Length" selected="False" />
    <SelectField field="Sepal.Width" selected="False" />
    <SelectField field="Petal.Length" selected="True" />
    <SelectField field="Petal.Width" selected="True" />
    <SelectField field="FileName" selected="True" />
    <SelectField field="*Unknown" selected="True" />
  </SelectFields>
</Configuration>

これに関しては、ActionのツールでもXMLの構造に合わせて階層化されます。

これらに対しては、任意の階層を選択することが可能ですので、SelectFieldを選択すればここの要素のみ、SelectFieldsを選択すれば全体のチェック状況を見て、などの設定が可能です。

また、ツールのroot階層を指定することで、Configure配下全体を取得することも可能です。

利用シーンは?

さて、XMLを直接編集できるというのは設定値を柔軟に変更できる一方、他の方法と比べて高度なやり方となります。 ほとんどの場合では、この方法(というかワークフローがXMLであるということ自体)を知らなくてもインターフェースの設定に困ることはないでしょう。 では、どういった時に便利になるのかを考えてみましょう。

  • 同一ツールで同一の設定値にしたい箇所が複数ある

先ほどの例のreplace関数のような使い方をすると、該当する部分が全て置換されます。 この仕組みを利用することで、同じ値で設定を変更したい箇所が複数ある場合に複数のActionツールを接続することなくまとめて変更可能になります。 ただし、機械的に全てが置換されるため意図しない場所まで変更されないように注意しましょう。

  • ツールの設定全体を見た複雑な変更を行いたい

Update Value with FormulaやConditionツールなどを利用することで、複雑な設定をするActionは可能です。 しかし、ツール上の他の設定値に応じて設定の仕方を変更するなどが必要になった場合、そこまで参照可能な範囲を指定したXMLの編集が必要になる場合もあるでしょう。

おわりに

今回は、AlteryxでActionツールを使ってXMLを直接編集する方法を紹介しました。

普段はあまり意識することのない、ツールの設定がXMLとしてどのようになされているかを見る必要があるため、高度な設定となりますが、使えそうな場面があればぜひ使ってみてください。

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

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

alteryx_960x400