問題提起
共通機能をモジュール化することは、開発効率・保守性・可読性の向上のために重要ですが、Alteryxにおいてはマクロ
基本的な処理をマクロ化すると、そのマクロはアチコチで再利用されるようになり、
親ワークフロー⇒子マクロ⇒孫マクロ⇒曾孫マクロ…
のように、開発規模が大きくなるにつれてマクロの階層が深くなるため、各マクロの関係を可視化したくなりました。
マクロの呼び出しのパターン
マクロを呼び出すとき、ワークフローのXMLはどの様になっているかを見てみます。
添付のParent.yxmdとChild.yxmdのようにフィールドの値を2倍するだけのマクロを呼び出してみます。
この時、Parent.yxmdのXMLでChild.yxmcを呼び出している所は以下のようになっています。
もしも、全てのマクロ呼び出しが
<EngineSettings Macro="[マクロ名]" />
の形式になるすれば、
全てのワークフローについてこのパターンを検索することで
ワークフローがどのマクロを呼び出しているかが分かるはずです。
ここでは、とりあえず他のパターンはないと仮定して進みます。
ワークフロー
以下のように親ファイルと子ファイルを取り出し、NodeとEdgeとしてネットワーク分析ツールに渡します。
以下のようなHTMLファイルが出力されました。
分析結果
Diameterが4なので、親⇒子⇒孫⇒曾孫 までで収まっているようです。
NodeとEdgeさえ渡せば簡単にネットワーク図が生成できるので、他の用途でも使ってみたいと思います。
よい応用方法がありましたら是非お知らせください。
Atleryxでネットワーク分析がどこまで出来るかも興味深い話題ですが、
あまり詳しくないのと、もとの主題から話が逸れるため今回はここで終わります。
興味深い内容ですね。たしかにおっしゃる通り分析して行くとこのようなものができますね!
依存関係わかれば、マクロを改変したときの影響度合いがわかるのはいいな、と思いました。
見た感じ、Alteryxに同梱されているマクロもこれに含んでいるように思いますが、除外したほうが目的にはあっているのではないかと思いましたので、ちょっと改造してみました(といってもAlteryxに同梱されているマクロでぶつけて除外しただけです)。
これでAoCやったときの結果を投入してみました。まぁ、あまりあっちこっちでマクロ使ってるわけじゃないですが、多段マクロにしているところもあるので、そこはわかりやすくなりました。
ところで、yxmd読み込む際ですが、Flatファイルで読み込んでいるのがちょっと新鮮でした。通常CSVで区切り記号なしで読み込んでいるので・・・。ただ、FlatファイルだとV_WStringで読み込めないというのが結構痛いですね。これだと文字コードUTF-8に変えても意味がないので・・・。
@AkimasaKajitani さん アドバイスありがとうございます。
確かに、組み込みマクロも入ってしまいますね。
("Cleanse.yxmc"の名前をみてデータクレンジングツールだと気づくべきでした)
Flatファイルで読み込んだのは深い意図はありません。
CSVで区切り記号なしで読み込むほうが簡単ですね。
ただ、ConvertFromCodePage() 関数で後からでも変換できたので、勉強にはなりました😀
あと、マジメに使うのであれば「マクロの呼び出し方法が1通りだけか」についても検証しなければと思っています。
ネットワーク分析については、前処理をAlteryxで行ってから Neo4j に渡して分析してみたいです。(しかし環境がない orz )
Alteryxでネットワークトポロジー的なVizが作れるとは知りませんでした。勉強になります!
面白そうだったので、Neo4jをLinux Serverで動かして、データいれてみました。yxmcとyxmdで色分けしてあります。グラフデータベースは初めて触りましたが、Neo4jは非常に興味深いですね。個人的にオープンソースが大好きなので、はまりそうです。
Alteryxのワークフロー開発のレポジトリ管理とかにも使えそうな気がします。
@gawa さん
Neo4j 面白いですよね!
("Alteryx" Communityなので深入りしませんが)
クエリ言語"Cypher"を使うと最短経路検索などが簡単にできますし
ついてくるデモ用データベースも面白いので、前から使ってみたいと思っています。
すでにAlteryx Communityで
Neo4jデータベースとの入出力ツールが欲しい!
https://community.alteryx.com/t5/Alteryx-Designer-Ideas/Neo4j-Input-Output-Tools-Needed/idi-p/424770
という要望が出ており、
これが昨年8月に"Accepting Vote"ステータスになっているので
これからAlteryxでもNeo4jと接続したユースケースが増えてくることを期待しています。
@Yoshiro_Fujimori さん、ご紹介ありがとうございます。こういうDBコネクターは、どんどん追加してほしいですね!
Neo4jはRest APIが昔あったようですが、今はなくなったようですね。代わりにCypherのqueryをHTTPで投げる仕組みになってるようなので、ちょっと格闘してみます💪
本題とはずれた内容で脱線させてしまい、失礼しました・・・💦
基本的に「EngineSettings Macro=」で検索で大丈夫だと思います(とはいえすべてを見たわけではないですが)。
FlatFileで読み込む場合、V_Stringしかないので、ツール内でコード選べても意味ないですね・・・。なんでこんな仕様なのか不思議です・・・。あまり使われてなくて要望がない可能性が高いと思っています・・・。
Neo4j 検索して見てみたら、やはり銀行の事例とかが有名なんですかね・・・。
https://recruit.gmo.jp/engineer/jisedai/blog/graph-database-neo4j-try-cypher/
また、ideaページに有志の方が作ったコネクタがあるようですね・・・。
https://github.com/tlarsen7572/graphyx
しかし、ネットワークツール遅いので、もう少し早く動かないかなぁ、とちょっと思ってしまいます・・・。