every Tech Blog

株式会社エブリーのTech Blogです。

Amazon QuickSightのTips

はじめに

この記事は every Tech Blog Advent Calendar 2024 の 23 日目の記事です。

こんにちは、開発本部のデータ&AIチームの24新卒の蜜澤です。

4月に入社して以降Amazon QuickSight(以下quicksight)を社内で最も利用したので、quicksightで開発をしてきた中で身につけたTipsを紹介します!
本記事の内容はquicksightの細かな機能について触れるので、quicksightを使い慣れている方に向けた内容となっております。

使用する模擬データ

レシピ動画サービスのレシピ毎のインプレッション数とクリック数の模擬データを使用します。
模擬データなので簡略化のために4~6月の各月の1~7日のデータのみになっております。

  • date:日付(2024/04/01~2024/04/07,2024/05/01~2024/05/07,2024/06/01~2024/06/07)
  • recipe:レシピ名(ハンバーグ・からあげ・生姜焼き)
  • click:ある画面でレシピ動画のサムネイルがクリックされた回数
  • impression:レシピ動画が表示された回数

※dateに関してはquicksightにデータを入れる際にデフォルトで「Apr 1, 2024 12:00am」という形式になってしまうので、表示形式を「YYYY/MM/DD」に変更しています。

さらにこのデータを月毎に集計した以下のデータも使用します。

  • date:日付(2024/04~2024/06)
  • recipe:レシピ名(ハンバーグ・からあげ・生姜焼き)
  • click:ある画面でレシピ動画のサムネイルがクリックされた回数
  • impression:レシピ動画が表示された回数

YYYY/MM形式の日付データを絞り込む際のハマりどころとその対処法

まず、日付を絞り込むために開始日と終了日を指定するStartDateとEndDateというパラメータを作成し、dateカラムに対してStartDateとEndDateの間というフィルターを追加します。
さらに、StartDateは開始日、EndDateは終了日という名前でコントロールを作成しておきます。

パラメータやフィルターに関しての説明は本記事の範疇ではないため説明を省きます。
私が以前執筆したこちらのブログで解説しているので、パラメータやフィルターに関して詳しく知りたい方はご覧ください。

以下のようにコントロールで指定した範囲の日付のデータのみが表示されます。

日付の集計粒度が「日」の場合はこのやり方で問題ないのですが、集計粒度が「月」になると想定外の挙動になる可能性があります。

月毎集計したデータの開始日を2024/04/01、終了日を2024/05/31にすると、以下のように4月と5月のデータが表示されて問題ありません。

次に開始日を2024/04/02に変更すると、5月のデータのみしか表示されません。

なぜこのようなことが起こるのかというと、冒頭の模擬データの説明でも少し触れましたが、quicksightでは日付データ(Date型のデータ)は「Apr 1, 2024 12:00am」という形式になってしまいます。
2024/04という月のデータであっても「Apr 1, 2024 12:00am」という形式になって、2024年4月1日という判定になってしまいます。
表示形式はYYYY/MMのように変更ができますが、データ自体は「Apr 1, 2024 12:00am」の形式のままです。
そのため、フィルターの期間に1日が入っていない場合はその月のデータが表示されないという現象が起きてしまいます。

対策法はいくつかあります。
簡単なものだと、

  • そもそも期間を指定するときに1日は必ず入れるようにする
  • dateをDate型ではなくString型にする

などがあります。

しかし、1日を必ず入れないといけないというの周知させるのが大変、String型にするとコントロールで日付選択ツールを使用できなくなってしまいコントロールに日付を入力しないといけなくなるといった問題が生じます。

ということで、これらの問題を解決しながら、各月の日付が入っていたら1日が入っていなくても、その月のデータを表示できるようなフィルターを作成する方法を紹介します。

まずは以下のような「日付フィルター」という名前の計算フィールドを追加します。

やっていることとしては、
extractを使用して日付からYYYYとMMを抽出しYYYYMMという文字列を作成して、StartDateとEndDateの間にmonthがある場合のみ1を返すようにしています(それ以外の場合は0が返ってきます)。
YYYYに100をかけている理由は、1をかけない場合だと2024/01が20241になってしまい、2023/12~2024/01のような範囲を指定した場合に、202312よりも20241の方が小さくなってしまい、正しく範囲を指定できなくなってしまうのを防ぐためです。

次に、日付フィルターに対して以下のようなフィルターを設定します。

1と等しいというフィルターを設定することで、日付フィルター計算フィールドの条件を満たすデータのみが表示されるようになります。

これらの設定をすることで、開始日を2024年4月2日にしても4月のデータが表示されるようになります。

2.グラフタイトルに相対日付の◯月を入れる方法

先ほどのデータを使用して、日付をコントロールで変更するのではなく、相対日付を設定して先月や3ヶ月前などの各レシピのデータを閲覧できるビジュアルがあると想定し、そのタイトルに「◯月のデータ」のようなタイトルをつける方法を紹介します。

「先月のデータ」や「3ヶ月前のデータ」のようなタイトルにするならば、プロパティからタイトルの編集をしてタイトルを変更すれば良いですが、相対的に変わる「◯月」をタイトルに入れることはできません(毎月手動で変更するならできるがやりたくはないはず)。

そこで、かなり周りくどい方法になってしまいますが、Highcharts Visualを利用して「◯月」を擬似的なタイトルに入れる方法を紹介します。

まずは以下のような「月」と「タイトル」という2つの計算フィールドを追加します。
toStringでDate型のmonthをString型にして、substringで日付のMMの部分を抽出します。
if文でMMが10,11,12の場合は2文字抽出して、01,02のような場合には1文字のみ抽出して0を除外するようにしています。

concatを利用して、divタグと月計算フィールドと「月のデータ」という文字列を結合しています。

次に、Highcharts Visualを追加し、グループ化の条件に、先ほど作成した「タイトル」を選択します。

そして、Chart codeに以下のコードを書いて、「APPRY CODE」をクリックします。

{
  "title": {
    "useHTML": true,
    "text": ["get", ["getColumn", 0], 0],
    "style": {
            "fontSize": "18px", 
            "fontWeight": "bold",
            "color": "#000000"
    }
  }
}

そうすると、以下のようなテキストのビジュアルが作成されます。

このままでは幅が大きすぎてタイトル感がなくなってしまうので、最後にスタイルを調整します。
編集→分析設定→Sheets Settingsと進み、「フリーフォーム」を選択し、「適用」を押します。

フリーフォームにすることで、ビジュアルを重ねたり、好きな幅に調整したりとスタイルの微調整ができるようになります。
調整をするとこんな感じになります!

なんとかタイトルと呼べる見た目になると思います!

3.データポインタホバー時に出現するカードのカラム名を変更する方法

模擬データを使用して、レシピごとのクリック数を比較する折れ線グラフを作ると以下のようになります。

軸名と凡例は元のカラム名を参照するため、カラム名と同じ英語表記になっています。
これを好きな表記にするには、プロパティから対応する項目を変更します。
例えばX軸の場合は、プロパティのX軸のタイトルを編集すればX軸を好きな名前に変更できます。
Y軸や凡例もプロパティからタイトルを変更すればOKです!

ただし、ここで名称を変更してもデータポインタにカーソルを合わせたときに表示される以下の赤枠の部分の名前は変更することができません。
(凡例は「レシピ名」、Y軸は「クリック数」になっていますが、recipe、clickのままになっている。 )

データのカラム名を変更すれば良いのですが、簡単に変更できない場合もあると思います。
そんなときに、カラム名を変更せずに表示名を変更する方法を紹介します。

まず、計算フィールドに名前を変更したいフィールドを記入し、計算フィールドのタイトルに変更後の名前を記入します。

その後、グラフで指定するフィールドを今作成したものに置き換えます。
これだけで以下のように名前を変更することができます。

4.ビジュアルの枠線削除

ビジュアルをクリックすると以下のような枠線が表示されます。

これはダッシュボードを公開してもビジュアルをクリックすると枠線が表示されます。
ビジュアルをクリックしてもこの枠線が表示されないようにする方法を紹介します。

まずは、先ほども登場した「フリーフォーム」に変更します。
変更すると、プロパティのディスプレイ設定に「選択」という項目が出現するので、「選択」の目のアイコンを押して斜線がついた状態にすれば、ビジュアルをクリックしても枠線が表示されなくなります。

枠線削除後は以下のようになります。
分析ではクリック時に白い四角が表示されますが、ダッシュボード上では見えなくなります。

さいごに

本記事ではquicksightのかなり細かなTipsを紹介させていただきました。
使用頻度はかなり低いと思いますが、いつか誰かの役に立てれば嬉しいです!
最後まで読んでいただきありがとうございました!