[アップデート] Amazon QuickSight で Highcharts が使えるようになり、独自のビジュアルが作成出来るようになりました
いわさです。
連日とんでもないアップデートが続いていますが、Amazon QuickSight にも先日すごいアップデートが来ましたね。
なんと、QuickSight で Highcharts が使えるようになりました。
Highcharts を実は私は知らなかったのですが、Chart.js のような JavaScript でチャートレンダリングを行うためのライブラリです。
DevelopersIO 上でも紹介された記事があります。
QuickSight では用意された組み込みのビジュアルの中から一つを選択して描画を行いますが、そのビジュアルの仕様から外れた描画を行うのは結構これまでは厳しい状況でした。
今回のアップデートで Highcharts で表現出来るものであれば、一部制限事項に注意は必要ですが基本的にどんなビジュアルでも表現出来るようになりました。
使い方
まず、分析で Higcharts 用のビジュアルが新しく追加されています。こちらを使います。
そうするとビジュアルに対していくつかのプロパティを設定することが出来るのですが、「Chart code」というのがビジュアルをコードで表現するメインの部分となります。
Highcharts.chart()
で引き渡すグラフコンポーネントのコード部分を JSON 形式で QuickSight 上に入力します。
ほぼ互換性がありますが、若干制限事項があります。
- colors フィールドは使えない
- 次の JSON 値は使えない
- Functions
- Dates
- Undefined values
- GeoJSON またはその他画像へのリンクは未サポート
なお、Chart code 以外の Highcharts に関係の無い部分では、次のようなプロパティの設定とサンプルやドキュメントなどへのアクセスが可能です。
やってみた
早速適当なビジュアルを描画してみたいと思います。QuickSight で見かけないやつを Highcharts デモライブラリから探してきました。以下です。
これを描画してみます。まずはデータセットなどを無視してそのままチャート部分のコードを JSON に変換して QuickSight 上へ入力します。
おお、Hightcharts デモ画面と同じようなものが表示されました。すごいぞこれは。
こんなの QuickSight で見たことない。
で、この時点では JSON コード上にディメンションやメジャーがハードコーディングされている状態です。
これを API などで更新するのは QuickSight 的には無理があるので、やはりデータセットをバインドさせて、動的なデータ部分はデータセットの挙動に任せたいところです。
ということで、先ほどのビジュアルにデータセットをバインドさせてみます。
実際にはバインドという表現だとちょっと語弊があるのですが、Highcharts コード内で次の QuickSight 用の式を記述することが出来ます。
データセットのフィールドにアクセスするような定義になっていて、これを使うとデータセットの値に応じたコードを Highcharts ライブラリ側に引き渡してくれます。
例えばgetColumn
を使って指定したフィールド値がコード上に展開されるようになります。
市区町村人口のサンプルデータセットを作成したのでこいつをcategories
プロパティに展開してみます。
おお、データセットの値が表示されていますね。素晴らしい。
値も変更してみましょう。
色々と加工する必要はありますが、金色部分にデータセットのメジャー値を指定することが出来ました。すごい。
なお、Highcharts では簡単な計算や配列操作が出来るので、このあたりを駆使すれば Highcharts 描画用に計算フィールドを作らなくても良さそうです。
さいごに
本日は Amazon QuickSight で Highcharts が使えるようになり、独自のビジュアルが作成出来るようになったので使ってみました。
Highcharts 用のチャート定義が必要なのでそこだけ学習要りますが、とんでもなくカスタマイズ性が上がりましたね。
また、これやるならアプリに JavaScript で書くわ。と一瞬思いましたが、データセットや分析のメンテナンス性や RLS / VPC 接続 / KMS 統合などの高度な機能の利用を考えると、QuickSight を一枚挟むメリットは色々あったりします。
せひ QuickSight 使ってみてください!