Free Trial

ディスカッション

答えを見つけ、質問し、Alteryx の専門知識を共有してください。

分岐(Detour)ツールを使ってみました

Yoshiro_Fujimori
オーロラ

突然ですが、コミュニティの皆さんは「開発者(Developer)」ツールカテゴリの「分岐(Detour)」ツールを使っておられますか?

(私は使っていませんでした😅


後述の事情で使いたくなったのですが、サンプルワークフローがコミュニティ上にみあたらず

Tool Mastery Indexにも含まれていなかったので、今回 自分で調べたことをご紹介します。

 

もっとよい使い方がありましたら是非お知らせください!

 

分岐ツールに注目した理由

 

以下のような事情があり、分岐ツールが使えるかと思って調べてみました。

  • 既存のワークフローに「入力データが0件の場合にエラーになる処理」があるので、エラーを回避したい
  • その処理がPythonツールで作られており、エラー回避のためにPythonコードを修正したくない
  • そこで、事前に入力データが存在するかを確認し、0件の場合には処理をスキップさせてエラーを回避したい

 

分岐ツールの設定

 

分岐ツールの設定はシンプルで、チェックボックスが1個あるだけです。

Yoshiro_Fujimori_1-1674534784594.png

 

チェックボックスのオン/オフにより、データの出力先が変わります。

  • オフの場合:データは"L"に出力
  • オンの場合:データは"R"に出力

入力データがある時は"L"に出力して通常の処理をさせ、
入力データがない時は"R"に出力して処理を迂回させればよいことになります。

 

マクロを使う

 

まず、入力データの「ある/なし」を分岐ツールに伝える方法を考えます。

分岐ツールのヘルプページによれば、どうもアプリやマクロで使うのが定石のようです。

分析アプリやマクロでは、ユーザーの入力に基づいてワークフローのセクション全体をオン/オフにするのが一般的です。

分岐は、単一の分析アプリ/マクロアクションで任意の数のツールを効果的に簡単に削除できるようにします。

 

マクロの中

 

  • 本来の処理をする対象の入力データを渡す「マクロ入力」のほかに、
  • 「コントロールパラメータ」を使ってデータの「ある/なし」を渡す必要があります。
  • 「マクロ出力」は、データなしの場合は特にデータを出さないので1個としました。

Yoshiro_Fujimori_2-1674534918113.png

 

注意:

「コントロールパラメータ」から「分岐」ツールへbool型(True/False)を渡すときには、1行で渡す必要があります。

(最初、入力データに「ある/なし」項目を付けて渡したら、出力データが行数倍されました。バッチマクロだからですね)

 

マクロの外

 

  • 入力データのレコード件数をカウントして、0件ならFalse、それ以外はTrueとなるデータを1行生成し、
    「¿」アンカーにつなぎます。
  • 元のデータは入力アンカーにそのまま渡します。

Yoshiro_Fujimori_3-1674535120913.png

  • マクロ側では、「質問」欄で該当のフィールドを選択しておきます。

Yoshiro_Fujimori_4-1674535174965.png

 

実行結果

 

メインのワークフローのフォーミュラツールは0件データを作るためのテストユニーク処理です。

時刻によってデータが流れたり止まったりするので、何回か実行してみてください。

 

  • 0件データの場合のマクロ出力

Yoshiro_Fujimori_5-1674535263671.png

  • データがある場合のマクロ出力

Yoshiro_Fujimori_6-1674535279124.png

 

応用

 

  • 今回は単純化のために、データ処理はフォーミュラツール1個で入力データの値を2倍するだけにしましたが
    実際に使う場合は、このフォーミュラツールの部分を実行したいデータ処理と置き換えればよいはずです。
  • 「処理件数は0件なので処理をバイパスしました」とか「3件処理しました」などの処理結果を
    ログファイルに出力しても良いかも知れませんが、今回は割愛します。

 

おわりに

 

  • 今回は分岐ツールとバッチマクロを使いましたが、他にもこの様な場合に使える解法があればぜひお知らせください!
4件の返信4
gawa
15 - Aurora
15 - Aurora

@Yoshiro_Fujimori さん

私も初めて分岐ツールを使ったときに、ヘルプがあまり充実しておらず、どう使うのか悩んだ覚えがあります。Bool値しか受け付けないので、インターフェースツールの接続に工夫がいり、ちょっと設定が大変でした。なので、処理がそこで行き止まりになるようなものは、なるべくコンテナのOn/Offを制御することにしています。

 

少々野暮ったい処理になりますが、↓のコンテナのように、レコード件数に応じてフラグを生成し、元レコードにフィールド付加し、フィルターで仕分ける・・・という案もあります(各々で出てくるフィールドが異なると厄介ですが)。

他のWFで共通で使う処理であったり、マクロ化することでWF全体の見通しが良くなったりということであれば、@Yoshiro_Fujimori さんのようにバッチマクロで組んでデプロイするのが良さそうですね。

gawa_0-1674539767447.png

 

AkimasaKajitani
17 - Castor
17 - Castor

@Yoshiro_Fujimori さん

 

ブログにできそうな記事ありがとうございます!

 

手動でWF流す時に、処理の中身を使い分けたいとかなら、なんとかギリギリ通常のWFでも使えますが・・・。

基本はやはりマクロ、アプリですね・・・。

 

3分岐とかになってくると面倒なのでコンテナ使うことが多いように思います。

Yoshiro_Fujimori
オーロラ

@AkimasaKajitani さん コメントありがとうございます。

今回はGalleryで実行するワークフローだったので悩みましたが、

確かに手動で分岐するなら、分岐ツールを組み込むより、コンテナにしたほうがボタンをポチっとで済むので良いですね。

 

@gawa さん

フローのご提示ありがとうございます。

今回のケースで、迂回するPythonツールがブラックボックスなのですが、フラグを追加しても同様に動作するなら、この方が分かりやすくてよいですね!

(なお「Countフィールドはint64で重たいのでドロップ」のコメントにgawaさんのきめ細かいコダワリを感じました😀

AkimasaKajitani
17 - Castor
17 - Castor

そういえば、昔自社のブログの方に書いた記事がありましたので、ご参考まで。 @Yoshiro_Fujimori @gawa 

 

【AlteryxTips】分岐ツールの使い方

https://newssdx.kcme.jp/alteryx-tips-how_to_use_detour/