背景と目的
Tableauユーザーのみなさま
どうもこんにちは٩( ᐛ )و
突然ですが、拡張機能「Export All」をご存じでしょうか?
この拡張機能を使えば、Excelファイルで複数のシートを一括ダウンロードできるため、大変便利ですよね!
しかし、ダッシュボード内に埋め込んだ画像をそのままExcelへ出力したい場合、既存のExportAllでは Tableau上で画像化 していたとしてもURL文字列のままエクスポートされてしまいます。
もちろん、ダウンロードしたExcelファイル上でIMAGE関数やマクロを用いて画像を表示させることも可能です。
とはいえ、作業工程が増えて運用の手間になることもしばしばです。。
そこで、特定のカラムについて「Excelに画像を埋め込んだ状態でエクスポートする」機能を追加したFork版を作成しました🎉
Fork版リポジトリ
これを用いればURL文字列での出力にとどまらず、実際にセルに画像として配置されることで、エクスポート後の編集を省き、よりスムーズなレポート運用を実現できます。
導入方法
-
trexファイルのダウンロード
Fork版はTableau MarketPlaceには公開していないため、GitHubリポジトリから直接ダウンロードします。
→ ExportAll.trex -
拡張機能の設定
Tableauでダッシュボードに拡張機能を追加する際、拡張機能URLに以下を指定します:
https://bucolic−sundae−b29dc2.netlify.app
その後、ダッシュボードに 1. でダウンロードした.trex
を指定します。
上記URLは私がNetlifyにホスティングしているものとなります。
ご自身でホスティングすることも可能です。
2. ホスティング環境
使い方
基本的な使い方は本家Export Allと同じですが、「SelectColumns」タブに「Is Image」というチェックボックスを追加しています。
このチェックボックスをオンにすると、該当するカラムはExcel出力時に画像として挿入されます。↓

チェックを入れなければ従来通りURL文字列として出力されるため、既存のワークフローを崩すことなく利用できます!
技術的な要素
1. ExcelJSの導入
画像をExcelに直接埋め込むために、Node.js用のライブラリExcelJS
を採用しています。本家で用いられているxlsx
ライブラリでは画像埋め込みができないため、Fork版ではExcelJS
に切り替えました。
なお、ExcelJS
には潜在的なバグがあるらしいので、特定のケースで予期せぬ動作をする可能性があります。
その場合はIssueにて報告いただけますと◎
2. ホスティング環境
Fork版の拡張機能はNetlify上でホスティングしています。
当初は本家同様にVercelを検討しましたが、VercelではNodeのバージョンが18.x
系以上しか選択出来ず、本家ExportAll(おそらく14.x
〜16.x
系)との互換性が問題となった経緯があります。
ご自身でホスティングしたい場合は、リポジトリをForkしたうえで npm run release
を実行し、生成されるbuildディレクトリを配信してください
その場合、.trex
ファイルのurlディレクティブをご自身の配信ドメインに変更することをお忘れなく ;)
3. CORSの設定
画像を読み込むためにJavaScriptの fetch
APIを使用しているので、画像を配信するサーバー側でCORSを行う必要があります。
まとめ・考察
ExportAllは非常に便利な拡張機能ですが、クロス集計に対応していないのが唯一の難点であり、このFork版でも同様です。
一度自身で実装を試みたのですが、Tableau Extensions APIがクロス集計に向けたAPIを提供していない都合上、自身でセルを取得しそれを整形する必要がありました。
その結果、ワークブック毎に独自実装が多くなり、汎用的にすることはなかなか難しかったです。
ま、ま、まぁ実装できなくはなくはないですが、この余白はそれを書くには狭すぎるということで・・・。