運用が楽なQuickSightダッシュボードを作る_3（自動ナラティブ）

# はじめに
データをダッシュボード化することで、中身を見やすくすることができます。
ですがグラフでは、読み込むのに多くの時間を要する"パッと見"ではわからない情報も多く、「大事な数値が載ってるのはわかるんだけど、読み解く時間がね…」と思われないようにしたいです。

QuickSightでは"自動ナラティブ"という機能を使って、説明文の中に重要な数値を埋め込むことができます。
今回は、以下の記事で作成したダッシュボードの説明文に、自動ナラティブを埋め込みたいと思います。

https://qiita.com/a_b_/items/eda666471b0b3f523318

# やること
- インサイトというパーツを使用
- 数式を埋め込む
- ダッシュボードに反映

# よくありそうな課題
- グラフをよくみないとわからない情報を読み取る時間がない、手間がかけられない
    - 最大値、最小値
    - データの範囲
    - 変化率
- 時間がない人には見てもらえないダッシュボードになってしまう
    - 大抵、そういった方が見てほしい大事な人

# 構築
公式のマニュアルは以下になります。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/narratives-creating.html

今回は「総件数」と「データのFrom-To」を入れてみます。

## 総件数を入れる
まずは前回と同様、インサイトを追加します。今回はその際に出てくるポップアップは閉じないで使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/da3e1efd-4cb7-4125-1588-1dfcf33cecdd.png)

合計集計を選んで、[選択]ボタンをクリックします。するとメジャーを入れるように注記付きでインサイトが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8c38cbb8-a97d-296c-d1c9-4ea3d2b64ae8.png)

そこにNoをドラッグアンドドロップすると、文が作成されました。
ですが、数値型のNoの総合計になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/415cee89-e5c8-19ac-1b61-0857d17899a4.png)

そこでインサイトを選択した状態で画面上部のフィールドウェルを開き、値にあるNoの集計方法を、合計からカウントに変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/875d7718-219f-4ec1-d740-23791a0db586.png)

すると、カウントの値が出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/e783104a-7bf9-a786-95f9-e791d46b402b.png)

日本語にしたいので、[説明をカスタマイズ]で文章を修正します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/39c3e135-3d28-f672-bd51-184e4b89c5d7.png)

インサイトのエディタが開かれ、固定の文言と、関数で構成されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/2dbf4788-90bd-0652-f1b0-5dc0ca986619.png)

日本語にして保存しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/36593cc3-4e1a-1faf-a2a7-bd84e2e750e4.png)

最初に作った総件数のビジュアルと重複するので、こちらに差し替えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/e03160f3-aa7f-a403-53b0-484f4295cb68.png)

## データのFrom-Toを入れる
次は同じインサイトの中に、データの期間をFrom-Toの形で入れてみます。

### "日付"の最小/最大・・・？
その前に、試しに別のインサイト上で作ってみます。
まずは新しくインサイトを追加し、最小を選んでみます。出力例を見ると、「最小値と、その日付」を出すようなタイプのようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/40e1cd71-45dc-189a-ac26-1782d66f0bba.png)

フィールドウェルに、時間を追加するよう促されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8dc64596-764b-20eb-f62a-e6facf5661e1.png)

日付型の"公表_年月日"を設定すると文が自動生成されますが、「感染者数が最小の日」という内容になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/93d90ddf-4498-f98c-ab75-cf96cd6f6e48.png)

「日付の最小値」にしたいので設定を見るために、編集画面の右ペインから、最小の設定の編集画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/9d50e353-34f5-014a-2c7a-d5fa1adc5605.png)

フィールドの値が、レコードのカウントになっており、他に選択できるものがありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/e6234b67-6d4d-3eae-f5d3-399eaf6b37cb.png)

日付の最小の値を見たいので、計算と文言の編集画面を両方閉じて、フィールドウェルの値に"公表_年月日"を入れてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8c965309-1fbc-44f4-2d94-507c59e3beba.png)
ですが、集計方法がカウントしか選べません。

計算方法の値の部分も、"公表_年月日"のカウントの値であり、"公表_年月日"の最小値は指定できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/0c9c6e00-b0c4-5c57-ddcb-66aff7f11eda.png)

どうやらQuickSightでは日付や日時の大小について、ソートは出来ますが、最大/最小を求めることはできないようです。

### 日付を数値型にした計算列の追加
日付の最大/最小を取得するために、日付を数値にして扱い、元の日付を指定する、という方法を取ります。
”日付型を数値型にする”という計算フィールドを追加していきます。

[追加]-[計算フィールドを追加]を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/5d0a5347-dd42-8dd2-830c-9a7919d6f1f1.png)

編集画面が開かれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/1673c2af-e7a2-e475-3949-c72d5647b3bc.png)

作る数値は、"2022.02.26"を"20220226"としたいので、以下のような手順を踏んだ計算を行います。
1. 日付を文字列にする
1. その中から　年　を抽出
1. 同様に　月　と　日　も抽出
1. それらを文字列で結合
1. 上記を数値に変換

式は以下のようにしました。

```
parseInt(concat(substring(toString({公表_年月日}),1,4),substring(toString({公表_年月日}),6,2),substring(toString({公表_年月日}),9,2)))
```

適当な名前を付けて保存します。今回は"公表_年月日_Int"としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/0a3b3319-3fab-2e5e-af6c-e5e043d51787.png)

## 既存のインサイトに追加
最初に追加したインサイトに一緒に載せるため、Fromに使う情報を追加します。
時間に"公表_年月日"を、値に"公表_年月日_Int"を「集計：最小」で追加しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/bdc7a7a1-b19a-75a3-e737-6086a1766a4e.png)

> 集計方法ですが、"公表_年月日_Int"の値は"公表_年月日"でグループ集計した際、最大も中央値も最小も同じ値になります（同じ日付から生成されたため）。
いずれか選べばよいので、今回は最小を選びました。

インサイトの編集画面の右ペインから、[計算を追加]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/792c64f1-3cc2-c1f9-9fb9-24c0d181ec3e.png)

最小を選んで次へ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/d63280a2-b0e7-f540-d8cd-550b8c3a528e.png)

値に"公表_年月日_Int(最小)"を選んで追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/4471dcfb-ad26-95da-19e7-00515284984a.png)

最小値の計算が追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/02b91a74-e5d5-e969-1c0b-f0ad98b43f0b.png)



試しに`metricValue.value`と`timeValue.formattedValue`をクリックして追加してみます。
値で指定した"公表_年月日_Int(最小)"の最小値に対応する日付、が指定できていることがわかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/c1eeb633-1fca-c217-9fd5-5152d7179c62.png)

日付の見栄えが良くないので、一度編集画面を保存して閉じ、フィールドウェルからお好みの形式を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/f21548f4-938e-dca2-8252-7a98a37d31e5.png)

選んだ形式が、インサイトの中にも反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/00039d9f-61f3-78dd-06cd-b9a0d8adf68b.png)

Toも同様に、計算から最大を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/53221a28-f32a-c3e8-9425-1c450c74a405.png)

値は先に述べたように、最小の値で問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/28364b33-0089-eb41-b0f2-15b6c014c95c.png)

最大値も同様に`metricValue.value`と`timeValue.formattedValue`をクリックして追加し、表示内容を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/6b7caebc-0679-5022-81d4-4a2b57b946c1.png)

後はこれをつなげる文で補って保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/26657177-8935-a392-efbc-f429de11873d.png)

## "ダッシュボード"に反映
"分析"を修正したので、それを"ダッシュボード"に忘れずに反映する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/830f4d4a-9a4b-3ac3-240b-e4ad6ba92b5a.png)

"ダッシュボード"で、追加したインサイトが見れました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/9011d609-1aed-fa36-cce2-8ef7418699aa.png)

# データ更新
データ更新と連動して、自動計算の部分が変わるのか確認してみます。
フォルダに2022年のデータを追加して、データセットの更新をしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/29c388c5-d2df-2080-1004-bf8c4c369a85.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/1e1d49cf-3bd7-b929-20ae-691caf7a95ba.png)

インサイトの部分が変わったことが確認できました。（説明文の箇所は未修正です）
前回紹介した説明文とは異なりデータを直接見ているので、「計算結果が変わる都度、"ダッシュボード"を更新」は不要です（計算以外の部分を変更した場合は更新が必要です）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/bf4c124f-bfdd-a70f-b0d3-91db30dbdf1c.png)


# 推奨インサイト
自動計算を埋め込んだインサイトを自作してきましたが、QuickSight側で推奨のインサイトを提示してくれます。
対象のグラフを選んで、左ペインの[インサイト]を選ぶと、それらが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/f8c2da43-c840-ce89-0d00-b7fe69f08a8a.png)

試しに一つ選んでプラスボタンを押すと追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/a3b03800-b371-1a82-1cf5-06b204559f1b.png)

どんな定義になっているか見てみると、IF等を使って表示させる文言を変えていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/222a702b-ff5c-fff0-baaa-e0077b3d9620.png)

1から作るのが大変であれば、推奨されたものを修正して使うのもよさそうです。


# おわりに
今回はQuickSightの自動ナラティブの機能を試してみました。
グラフを見せるだけではなく、文を用いての説明ができることで、より多くの場面で用いることができそうです。

次回はQuickSightのメールレポート機能を試してみようと思います。