Loop_Loop_Loop

Loop_Loop_Loop | Tableau-id Press -タブロイド-
loopx3_main

久しぶりの投稿となります。shigeoです。
Alteryx User Group in 東京 Advent Calendar 2018、年末お休み日の更新となります。クリスマスケーキでも食べながらご覧ください。ただ、内容はクリスマスケーキよりは甘くない、
「Batch Macroのとっつきづらさ」
のお話です。


【Batch Macro/Iterative Macroの「とっつきづらさ」】

Alteryxで「繰り返し処理」を行う際、出てくるキーワードとして"Batch Macro"や"Iterative Macro"が挙げられます。
双方の処理イメージの違いを比較的分かりやすく図解しているページとして、「じょんすみす」さんのこちらのこちらのページを挙げさせて頂きます。
AlteryxのIterativeマクロ

「何がしかのプログラム言語」をかじったことのある方でしたらリンク先ページ冒頭のイメージ図から

  • Batch Macro:ループ処理
  • Iterative Macro:再帰処理

が行えそう、というところまでは何となく理解できるかと存じます。
ただ実装、となるといきなりハードルが上がるのもまた事実。
実際、自社内やおつきあいさせて頂いております何社かの方々から「Alteryxでループ処理やりたいんだけど」とご相談頂くことがあり、説明しようとするのですが「いまいちよく分からない」という反応を頂くことがしばしばございます。
そこで今回は「一体Alteryxの何が分かりづらくたらしめているのか?」について。
一例ですがその要素と、理解への「向き合い方」についてお話致します。
なお今回はBatch MacroとIterative Macroの内、Batch Macroについてお話します(さすがに2つまとめては話が長くなるため)。

【分からない方からよく聞くセリフ】

「何がしかのプログラム言語」をかじったことのある方、になりますがBatch Macro説明の際、必ず出てくるセリフとしまして。

  1. 普通のWorkflowで組めないの?
  2. 要はここの処理ループさせたいんだけど、どこで変数組むの?

1は上でご紹介した「じょんすみす」さんの記事冒頭のとおり、

「通常のワークフローの中で繰り返しの処理を行うような機能はない」

これに帰着します。
問題は2番目。この質問が出る場合、その方がご使用になっている言語により多少の違いはありますが多分、こんな構図が頭の中でイメージされているはずです。
loop_img01
変数を定義してそれをloopでカウント処理しつつ、必要な可変情報は「『loop処理内部で』loopカウンターに紐付く変数から都度呼び出して処理する」、という、よくある構図になるかと存じます。
しかしこの構図、残念ながらAlteryxでは通用しません。
Alteryxにおいてはその根底思想において他の一般的なプログラミング言語とは大きく異なる部分が1つあります。これが「分かりづらくたらしめている」ものの1つであり、ここの思想を切り替えられるかどうかが「向き合い方」への第一歩となります。

【Alteryxはテーブル思想】

大きく異なる部分、このように言い表せます。

「Alteryxの世界の中では原則、すべての物事が『テーブル』として処理される」

入力/出力データ、処理中データ、そして「変数」もテーブルとして処理されます。言い換えれば「変数を『テーブル化』する」必要があります。
上の構図の場合、loopカウンタとなる変数i、および変数iを用いてloop文内で可変にするデータを予めすべてテーブルに展開する必要があります。
イメージにするとこんな感じです。
loop_img02

「loopの中で処理をする」のではなく「loop内で必要な要素をloop処理の外で準備する」

この考え方の切り替えができるかどうかがBatch Macro理解への第一歩となります。

【まずひとつ、動くものを作ってみる】

ただいきなり「変数をテーブル展開する」という発想は馴染みづらいかと存じます。そこで向き合い方の第一歩として、

loopさせたい処理の1処理分だけでいいので、まずひとつ動くものを作ってみる

ところから入っていくことをおすすめします。今回はそれ用の簡単なサンプルをご用意しております。
20181223_sample.zip
以下、サンプルの要点となる箇所のみ図示にて。





本日の記事は以上となります。ではよいクリスマスを。