はじめに
弊社でよくありそうな課題に対して、QuickSightが簡単に解決できそうだったので、少しずつ調べて記事にしていこうと思います。
よくありそうな課題
- データをすぐに見える化したい。
- そのデータはCSV等で、得意先からメールなど人手で送られてくる。
- 得意先が操作できるシステムからCSV出力したものを、弊社がお預かりする、という感じ。
- 人手なので期間指定を誤って抽出するなどのミスが生じるため、データの削除や差替えが簡単であること。
よくありそうな解法
- DB構築してテーブル作成。
- CSV取り込み処理作成。
- テーブルをダッシュボードのデータソースとする。
上記で構築した場合、課題の2.までであれば、これだけ作れば運用できると思います。
ですが3.があると、難易度が一気に跳ね上がる、と思っています。
- 取り込んだデータの中から、削除するデータを特定できるようにしておかなくてはならない。
- 取り込み日付や、取り込みファイル名など、特定できるカラムを作っておく必要がある。
- 削除操作(SQLであればDELETE文)を、リテラシーの高い人がやることになる。
- 現場の人は、SQLなんてやりたがらない。
- 発生頻度が低い操作のためにわざわざ画面を作るのも、手間に対して割に合わない。
QuickSightでの解法
- SPICE(QuickSightのインメモリDB?)に、S3のフォルダ内のデータを取り込むよう設定。
- マニフェストファイルが必要。
- QuickSightに、「S3のどこのファイルを、どういう風に読み込むのか」を説明するファイル。
- マニフェストファイルが必要。
- フォルダ内のファイルが変更都度、SPICEをフル更新。
QuickSightでは、S3のCSV群をそのまま取り込んで扱えるため、追加の際はファイルを置きすべて取り込むことで実現でき、削除や差替えも、対象のCSVファイルを削除しすべて取り込みなおしで、データの削除ができます。
ファイルの追加、削除程度の操作であれば、現場の人でも対応できます。
DBインスタンスの管理も無いので、非常に運用が楽です。
上記のようなダッシュボード環境をコツコツ構築していきます。
用いたデータ
以下のサイトから取得できる、東京都の新型コロナウイルス陽性患者のデータを用いました。
「複数のCSVを追加、削除」の運用を想定してるので、年ごとに3ファイルに分けました。
構築
用意するもの
- S3
- マニフェストファイル
- QuickSightの管理者ユーザ
- S3の権限や、IAMが編集できる権限が必要
- QuickSight
S3
フォルダ階層を以下のようにしました。
dashboard
├── data
│ ├── dataset01
│ │ ├── aaaa.csv
│ │ └── bbbb.csv
│ └── tokyo_covid19
│ ├── 2021.csv
│ └── 2022.csv
└── manifest
├── dataset01.json
└── tokyo_covid19.json
- dataフォルダの下に、データセット名でフォルダを作成し、その下にCSVを置く。
- 今回はtokyo_covid19だけですが、今後データセットを増やす場合を想定して、仮としてdataset01も記載しています。
- manifestフォルダの下に、対象のマニフェストファイルを、<データセット名>.json という名前で置く。
マニフェストファイル
今回のデータは比較的整っているので、必須部分だけで事足りました。
{
"fileLocations": [
{"URIPrefixes": ["s3://<S3バケット名>/dashboard/data/tokyo_covid19/"]}
]
}
- 「フォルダ以下のファイル群全部」とするため、
fileLocations.URIPrefixes
を指定しました。
フォーマットやデリミタを指定するなど、詳細なマニフェストファイルの記載方法は以下のページにあります。
QuickSightの管理者ユーザ
公式にユーザの作り方があります。
上記ページの場合かなり強い権限を付与していて、そのままこのユーザを運用の方に渡すのは危険かと思います。
「作るときだけ一時的に強い権限が欲しいが、運用中は必要十分な権限にしたい」というユーザを作るCloudFormationについて、以前記事にしましたので、必要に応じてそちらをご利用ください。
QuickSight
QuickSihgtの初回設定方法は公式をご覧ください。(UIが度々変更されるので、公式を見るのが正しいと思います。公式も時々古かったりしますが。)
データセット作成
公式のページにやり方があります。ほぼこれに従えばOKです。
今回のやり方で説明が異なる点は以下の場所になります。
1.「Amazon S3 のマニフェストファイルでサポートされている形式」で指定されているいずれかの形式を使用して、インポートする S3 ファイルを識別するためのマニフェストファイルを作成します。
8.[Upload a manifest file (マニフェストファイルをアップロードする)] で、以下のいずれかのオプションを実行します。
・ [URL] を選択し、マニフェストファイルの URL を入力するか貼り付けます。URL は、Amazon S3 コンソールでマニフェストファイルを右クリックして [Properties (プロパティ)] を選択すると、[Link (リンク) ] フィールドに表示されます。
上記で作成したマニフェストファイルをS3において、そのファイルのURLを指定してください。
先のフォルダ構造であればs3://<S3バケット名>/dashboard/manifest/tokyo_covid19.json
になります。
ビジュアル作成
先の公式のページに従うと、次はビジュアルを作成する画面になります。
今回はデータの総件数と、日ごとの件数のグラフを作成してみます。
総件数
まずは左上の[追加]-[ビジュアルを追加]でエリアを追加します。
作ったばかりの場合は既に1つ追加済みかと思います。
それを選択した状態で、フィールドリストから"No"をクリックします。
ビジュアルのタイトルにもあるように、"No"は数値型なので、自動で合計になってしまいました。
これを カウント に変えるためには、ビジュアルを選択した状態で画面上部にあるフィールドウェルを開きます。
"No(合計)"の右側の矢印をクリックして、[集計:合計]-[カウント]で集計方法を選びなおします。
タイトルを変えるには、タイトル部分をダブルクリックします。タイトルを編集する画面が出てきますので、適切なタイトルに変更します。
日別の件数
次に日別の件数のグラフを作ります。先の様にビジュアルを追加した後、追加した空のビジュアルを選択したまま、左下のビジュアルタイプから垂直棒グラフを選択します。
次にフィールドリストから"公表_年月日"を選択します(他の年月日はNULL値があり、フィールドの型が文字列型なので、思ったようなデータになっていません)。
X軸が読みづらいので、フォーマットを変えます。
総件数と同じように、画面上部のフィールドウェルから[形式:xxxxxx]で別の形式が選べます。
よさそうなのがないので、"その他のフォーマットオプション"を選択すると、左ペインで詳細に編集ができます。
後はタイトルを変えたり、総件数の大きさを変え、配置をし直すなどで全体の見栄えを良くします。
ダッシュボード
自分一人でデータをグラフ等にして確認するのであればこれでよいですが、他の人用に閲覧専用にするためには「ダッシュボードの公開」を行います。
言葉が紛らわしいので、QuickSightでの(私が理解している)構造を解説します。
QuickSightの構造
QuickSightは、「**"データセット"の内容を、"分析"でビジュアル化し、"ダッシュボード"**にして公開する」という風になっているようです。
図にすると以下のイメージです。
**"分析"と"ダッシュボード"**は、ビジュアルで関連しているため、「ビジュアルを変更する場合は"分析"を編集して、"ダッシュボード"に反映」ということをします。
データは各々で見ているようですので、データに変更があった場合は各々新しいデータを参照するため、「"分析"を"ダッシュボード"に反映」はする必要はないです。
ダッシュボードの公開
"ダッシュボード"の公開は、"分析"の右上にある[共有]-[ダッシュボードの公開]を選択します。
新しく"ダッシュボード"にする場合は、「新しいダッシュボードとして公開」を選択し、名前を入力します。
既に対象の"分析"から派生した"ダッシュボード"がある場合は、画像の様に「既存のダッシュボードを置き換える」というのが出ます。修正したビジュアルを"ダッシュボード"に反映する場合は、こちらを選びます。
"ダッシュボード"が作られました。こちらではビジュアルが変更できず、閲覧専用になります。
これで、DBを使わない、CSVファイルで運用できるダッシュボード環境ができました。
運用
操作は単純に、以下で更新できます。
- S3上の対象のフォルダへ、ファイルを追加・削除。
- QuickSightのデータセットを更新。
試しに、CSVファイルを追加・削除して反映されるか確認します。
データ追加
追加前
S3の対象のフォルダには、2020年のファイルだけあります。
追加手順
QuickSightで、対象のデータセットを選択し、「今すぐ更新」をクリックします。
確認ポップアップが何度か出てきますので、クリックして進めます。
更新が終わると、結果が表示されます。スキップされた行が無かったので、全件取り込めました。
追加後
では作った**"ダッシュボード"**を見てみます。
件数も増えていますし、2021年のデータも入っているのが確認できます。
データ削除
続いて、2020年のデータの削除もやってみます。
削除手順
その後、追加の際と同様にQuickSightのデータセットを更新します。
削除後
再び**"ダッシュボード"**を見てみます。
件数も先ほどより減少しており、データも2020年がなくなっています。
おわりに
CSVのファイルを管理してQuickSightにダッシュボードを作る方法を紹介しました。
DB不要でGUIで更新できるので、非常に楽な運用でデータの可視化ができると思います。
次はこのダッシュボードに、説明文を入れ込む方法を記事にしたいと思います。