Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

ディスカッション

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

マクロの親子関係を可視化してみる

Yoshiro_Fujimori
オーロラ

問題提起

共通機能をモジュール化することは、開発効率・保守性・可読性の向上のために重要ですが、Alteryxにおいてはマクロ

基本的な処理をマクロ化すると、そのマクロはアチコチで再利用されるようになり、

親ワークフロー⇒子マクロ⇒孫マクロ⇒曾孫マクロ…

のように、開発規模が大きくなるにつれてマクロの階層が深くなるため、各マクロの関係を可視化したくなりました。

 

マクロの呼び出しのパターン

マクロを呼び出すとき、ワークフローのXMLはどの様になっているかを見てみます。

添付のParent.yxmdとChild.yxmdのようにフィールドの値を2倍するだけのマクロを呼び出してみます。

この時、Parent.yxmdXMLChild.yxmcを呼び出している所は以下のようになっています。

 

Yoshiro_Fujimori_7-1675069285781.png

 

もしも、全てのマクロ呼び出しが

<EngineSettings Macro="[マクロ名]" />

の形式になるすれば、

全てのワークフローについてこのパターンを検索することで

ワークフローがどのマクロを呼び出しているかが分かるはずです。

ここでは、とりあえず他のパターンはないと仮定して進みます。

 

ワークフロー

以下のように親ファイルと子ファイルを取り出し、NodeEdgeとしてネットワーク分析ツールに渡します。

 

Yoshiro_Fujimori_8-1675069324480.png

 

 

以下のようなHTMLファイルが出力されました。

 

Yoshiro_Fujimori_9-1675069367029.png

 

分析結果

Diameterが4なので、親⇒子⇒孫⇒曾孫 までで収まっているようです。

NodeとEdgeさえ渡せば簡単にネットワーク図が生成できるので、他の用途でも使ってみたいと思います。

よい応用方法がありましたら是非お知らせください。

 

Atleryxでネットワーク分析がどこまで出来るかも興味深い話題ですが、

あまり詳しくないのと、もとの主題から話が逸れるため今回はここで終わります。

 

 

6件の返信6
AkimasaKajitani
17 - Castor
17 - Castor

@Yoshiro_Fujimori さん

 

興味深い内容ですね。たしかにおっしゃる通り分析して行くとこのようなものができますね!

依存関係わかれば、マクロを改変したときの影響度合いがわかるのはいいな、と思いました。

 

見た感じ、Alteryxに同梱されているマクロもこれに含んでいるように思いますが、除外したほうが目的にはあっているのではないかと思いましたので、ちょっと改造してみました(といってもAlteryxに同梱されているマクロでぶつけて除外しただけです)。

これでAoCやったときの結果を投入してみました。まぁ、あまりあっちこっちでマクロ使ってるわけじゃないですが、多段マクロにしているところもあるので、そこはわかりやすくなりました。

 

AkimasaKajitani_0-1675084775288.png

 

 

ところで、yxmd読み込む際ですが、Flatファイルで読み込んでいるのがちょっと新鮮でした。通常CSVで区切り記号なしで読み込んでいるので・・・。ただ、FlatファイルだとV_WStringで読み込めないというのが結構痛いですね。これだと文字コードUTF-8に変えても意味がないので・・・。

Yoshiro_Fujimori
オーロラ

@AkimasaKajitani さん アドバイスありがとうございます。

確かに、組み込みマクロも入ってしまいますね。

("Cleanse.yxmc"の名前をみてデータクレンジングツールだと気づくべきでした)

 

Flatファイルで読み込んだのは深い意図はありません。

CSVで区切り記号なしで読み込むほうが簡単ですね。

ただ、ConvertFromCodePage() 関数で後からでも変換できたので、勉強にはなりました😀

 

あと、マジメに使うのであれば「マクロの呼び出し方法が1通りだけか」についても検証しなければと思っています。

ネットワーク分析については、前処理をAlteryxで行ってから Neo4j に渡して分析してみたいです。(しかし環境がない orz )

gawa
15 - Aurora
15 - Aurora

@Yoshiro_Fujimori さん

Alteryxでネットワークトポロジー的なVizが作れるとは知りませんでした。勉強になります!

 

面白そうだったので、Neo4jをLinux Serverで動かして、データいれてみました。yxmcとyxmdで色分けしてあります。グラフデータベースは初めて触りましたが、Neo4jは非常に興味深いですね。個人的にオープンソースが大好きなので、はまりそうです。

Alteryxのワークフロー開発のレポジトリ管理とかにも使えそうな気がします。

gawa_0-1675128642821.png

 

Yoshiro_Fujimori
オーロラ

@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と接続したユースケースが増えてくることを期待しています。

gawa
15 - Aurora
15 - Aurora

@Yoshiro_Fujimori さん、ご紹介ありがとうございます。こういうDBコネクターは、どんどん追加してほしいですね!

 

Neo4jはRest APIが昔あったようですが、今はなくなったようですね。代わりにCypherのqueryをHTTPで投げる仕組みになってるようなので、ちょっと格闘してみます💪

 

本題とはずれた内容で脱線させてしまい、失礼しました・・・💦

AkimasaKajitani
17 - Castor
17 - Castor

@Yoshiro_Fujimori さん

 

基本的に「EngineSettings Macro=」で検索で大丈夫だと思います(とはいえすべてを見たわけではないですが)。

 

FlatFileで読み込む場合、V_Stringしかないので、ツール内でコード選べても意味ないですね・・・。なんでこんな仕様なのか不思議です・・・。あまり使われてなくて要望がない可能性が高いと思っています・・・。

 

Neo4j 検索して見てみたら、やはり銀行の事例とかが有名なんですかね・・・。

https://recruit.gmo.jp/engineer/jisedai/blog/graph-database-neo4j-try-cypher/

 

また、ideaページに有志の方が作ったコネクタがあるようですね・・・。

https://github.com/tlarsen7572/graphyx

 

しかし、ネットワークツール遅いので、もう少し早く動かないかなぁ、とちょっと思ってしまいます・・・。