Alteryxで動的なレポートってどう作るの?
こんにちは、小澤です。
Alteryxでレポートを作成するというとどのようなものを想像するでしょうか? おそらく、多くの方はPDFなどに出力された静的なものを想像するかと思われます。
一方、2018.3で登場したInteractive Chartツールを使えば動的なグラフの作成も可能です。 これはもちろんレポートの出力に含めることも可能で、HTMLなどで出力することでインタラクティブなまま利用することも可能です。
今回はこのあたりの仕組みについて解説していきます。
レポートのパーツとBrowseツールの出力
レポートを構成する要素には様々なパーツがあります。
- グラフを作成するinteractive Chartツール
- テーブルを作成するTableツール
- 文章を作成するReport Textツール
- 画像を作成するImageツール
などなど、ここであげた以外にもさまざまなツールがあります。 これら、レポートのパーツとなるツールの出力に共通するものとして、Browseツールで結果を確認した際にReportタブで確認可能な点があります。
Resultsで確認できるデータ上では、これらは以下のように表示されています。
「Image」となっています。 これは、Report Textツールの結果であればTextとなるなど、元の情報が何であったかのみが記載されている状態となります。
レポート出力とPCXML
Alteryxには、レポートの出力形式としてPCXMLという独自のものがあります。 これはデータ出力におけるyxdbのレポート版という風に考えていただければいいかと思います。
このPCXMLですが、実態はタグがAlteryx独自で定義されてたXMLファイルとなっています。 そのため、テキストエディタで開くと以下のような内容になっていることが確認できます(長いので一部内容を端折ってます)。
<?xml version="1.0" encoding="UTF-8" ?> <srcreport xmlns:wrg="http://www.extendthereach.com/Alteryx/schema/" version="1.0" globalpagenumbers="false" title="Engine_12000_9c31646c189348c68dd63e9c7ea3f95a_"> <style> .DefaultNumericText { numeric:true; locale:1041; } .DefaultText { color:#000000; font-family:Arial; font-size:14; text-align:left; } </style> <pagesettings pageheight="792" pagewidth="612" topmargin="36" leftmargin="36" rightmargin="36" bottommargin="36" pagelayout="portrait"/> <htmlpassthrough> <script src='https://whitelist.alteryx.com/v1/downloads/v1/lib/plotly/ayx-plotly.min.1.0.0.js'></script><script src='https://whitelist.alteryx.com/v1/downloads/v1/lib/plotly/md5.min.js'></script> </htmlpassthrough> <htmlpassthrough><script>window.ayxChartQueue = [];</script></htmlpassthrough> <img src="C:\Users\ozawa.yuya\Documents\Alteryx\sample_workflows\alteryx_training\img\cd4ccd9d1b597cbefc80572f7b01b974.png"/><htmlpassthrough><script>var ayxWaitAndRender = function () {if (!window.ayxChartQueue) return; if (window.Plotly) {clearTimeout(window.ayxChartTimer);window.ayxChartQueue.forEach(function(cb){cb();})} else {clearTimeout(window.ayxChartTimer);window.ayxChartTimer = setTimeout(ayxWaitAndRender, 500);}};ayxWaitAndRender();</script></htmlpassthrough> <encsection id="C:\Users\ozawa.yuya\Documents\Alteryx\sample_workflows\alteryx_training\img\cd4ccd9d1b597cbefc80572f7b01b974.png" ftype="png" src="cd4ccd9d1b597cbefc80572f7b01b974" olen="209016" enclen="286020"> iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAIAAAAxBA+LAAMwP0lEQVR4AezYA69caxhA4Xc8c3xt 2/atbTusbcWpbdu2bdu2O1Y12PuroipqdGav50+sZIkCAMDARAEAQAgBACCEAAAQQgAACCEAAIQQ ... ... s1nuRZERqFPXh7Iv2ZSXi3K1qDZai71RWfpRbvLMOK+hLcYbk6aD0Wp5vDg4Hk3Hgw1Zbrgd1IdI P9YvTbUuFOTh33zosbfef9O9d1d3vPhnXv3T8H8qdvj/AI5qN+GeVniMAAAAAElFTkSuQmCC </encsection> </srcreport>
実は先ほどのImageなどはこのPCXMLを構成する要素として、その実態はテキストファイルになっています。 先ほどのImageの場合だと項目をダブルクリックしてCell Viewerを開くと、以下のような内容になっていることが確認できます。
<img src="C:\Users\ozawa.yuya\Documents\Alteryx\sample_workflows\alteryx_training\img\cd4ccd9d1b597cbefc80572f7b01b974.png" />
これはHTMLのimg要素となっています。 ほかにもTableツールの出力であれば、Tableタグになっているなどが確認可能です。 すべての要素がそのままHTMLとして解釈可能になってるわけではないですが、何となくHTMLっぽいものが実態になっているということがわかるかと思います。
LayoutツールやVisula Layoutツールといったものも実はこれらTableタグなどで配置するような動きをしています。
動的に動くものはどうするの?
さて、ここまででレポートを構成する要素がHTMLっぽいタグで構成されていることが確認できました。 続いては、Interactive Chartなど動的な要素を実現する方法を紹介します。
この方法は実は非常に簡単な仕組みで成り立っています。 ツールの出力はHTMLっぽいけど厳密に同じわけではない、と紹介しましたが以下の要素でくくることでHTMLをそのまま記述可能です。
<htmlpassthrough><![CDATA[ ここにHTMLを記述する ]]></htmlpassthrough></div>
この要素の中ではHTMLはもちろん、CSSやJavascriptの記述も可能です。 そのため、それらを使えば任意の見た目や動きが実現可能になるというわけです。
人間には読みづらく非常に長い記述となっているため、内容は記載しませんがInteractive Chartツールの場合SVG形式でグラフを出力しているのが確認できます。
実はReportタブ以外のツールでも使われているこの方法
この機能は主にReportタブにグルーピングされているツールによる出力となっていますが、実はほかのツールでも利用されています。
どのようなツールで利用されているかというと、Browseツールで出力した際にReportタブある出力すべてが実はこの形式になっています。 例えば、PredictiveタブにあるLogistic Regressionツールのモデル以外の2つの出力は以下のようになっており、いずれもReportタブの出力となっています。
後者は動的な動きをするツールとなっており、こちらも同様に<htmlpassthrough>タグ内でJavascriptで動きを記述しています。
そのため、実はこれらをReport結果に含めることも可能だったりします。 ただし、形式が同じというだけでレポートに入れることを想定しない可能性もあるため、ものによってはLayoutツールの出力もあるかもしれません。
自分でこういった出力をするツールを作るには?
こういった動的に動く出力を自分で作りたい場合、どうすればいいのでしょうか? HTMLの知識がある方であれば想像はついているかもしれませんが、この構造で結果を出力すればオリジナルのレポートパーツを作ることが可能です。
以下のような簡単なワークフローを例にしてやり方を見ていきましょう。
このワークフローでは最初にHTMLファイルを読み込んでいます。 CSVファイルとして読み込み、以下の設定を行っています。
- Delimiters : \0
- First Row Contains Field Names : チェックを外す
これで1行が1レコードとしてhtmlファイルが読み込まれます。 全体で1つのデータとするためにSummarizeツールで結合しています。
設定値は以下のようになっています。
- Action : Concat
- Separator : (何も入れない)
これで全体として1つのHTMLとなりました。 このHTMLをレポートの部品として使えるように<htmlpassthrough>でくくる処理をFormulaツールで行っています。
"<![CDATA[" + [Concat_Field_1] + "]]>"
ここまでくれば、レポートのパーツとして使えるデータとなっているので、最後にReport Textツールで変換を行います。
設定値は以下のようにします。
- Text Mode : Expert Mode : Treat text as Row PCXML
- Text Data : Available Filedsから対象の列名を指定
これで、Browseツールで出力した結果が以下のようにレポートのパーツとなります。
おわりに
今回はAlteryxでレポートの部品となるパーツがどのように成り立っているのかと、どうやって自作するのかを解説しました。 HTMLなどの知識が必要となるため、ハードルが高いようにも感じられるかもしれませんが、興味のある方はぜひお試しください。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。