UnWeeklyAlteryxTips#103 行生成ツールで結果までしっかり出す方法

Alteryx

Alteryx Designerの行生成ツールは、条件を満たしている時のみ行を生成し続けるという仕様になっています。もともとの行生成ツールの動き自体はプログラミング言語で言うところのいわゆるForループを行うイメージですが、条件を満たさなくなった時の結果が欲しいことがあります。

前回のTipsに続き、非常にマニアックな行生成ツールの使い方ですが、非常に役に立つのでご紹介します。

条件式について少し考えてみる

行生成ツールの条件式の部分は、条件が満たす間実行する、という動きを行い、デフォルトだと以下のスクリーンショットの通り10以下ならループ式を実行する、という形になり、1~10が生成されます。

ここで、条件式に5の倍数以外と記載してみましょう。MOD関数を使って剰余が0の時がその指定した数の倍数になるので、剰余が0以外、としています。

これを実行すると結果は以下の通り、、、

ただし、ここで5の倍数になったところまでがほしいとします。この場合MOD関数を工夫してもどうにもなりません。

ループ式内に条件を書く

この場合、ループ式内に条件を書く方法があります。

例えば、ある値「value」があり、偶数なら2を足し、奇数なら1を足す、最終的にvalueの2倍まで計算する、ということを考えてみます(この計算に意味があるわけではないのですが、ループ式に条件を書くという例です)。

インプットデータは以下のとおりです。

以下のような設定になります。

これを実行すると、確かにこのロジックの通りのものができあがります。

これだけでは最初の課題がクリアできないのですが、いったんループ式にも条件文を書いて細かく制御ができることがわかったかと思います。

条件に合致した時のデータも出力するには?

それでは、条件に合致したときのレコードも出力する方法になります。

考え方としては、条件式は特定の終了ワードが来たときに終了する、という設定にしてしまうことです。例えば、Nullが来たら終了するようにします。

!IsNull([RowCount])

次に、条件式部分を工夫します。条件が来たらNullにするようにします。

IF MOD([RowCount],5)=0 THEN Null()
ELSE [RowCount]+1 ENDIF

つまり、5で割り切れた場合にNullにします。それ以外は普通に1を足していきます。

これでしっかり条件に該当したときのレコードがでるようになります。

まとめ

  • 行生成ツールで、特殊な条件の場合、条件に該当した時のレコードを出すような方法をご紹介しました
  • この方法が取れないとマクロに頼るしかないケースもあったかと思いますが、今後はマクロなしで対応できるかもしれないですね・・・
  • ただ、通常のビジネスのデータ処理でここまで必要なケースも少ないように思います。少なくとも思い浮かびません。
  • Advent of CodeやEuleryxなどの高度な計算処理を行う場合に有用なことがあります
  • 行生成ツール奥深いですね

サンプルワークフローダウンロード

コメント

タイトルとURLをコピーしました