5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

運用が楽なQuickSightダッシュボードを作る_1(環境構築)

Last updated at Posted at 2022-02-13

はじめに

弊社でよくありそうな課題に対して、QuickSightが簡単に解決できそうだったので、少しずつ調べて記事にしていこうと思います。

よくありそうな課題

  1. データをすぐに見える化したい。
  2. そのデータはCSV等で、得意先からメールなど人手で送られてくる。
    • 得意先が操作できるシステムからCSV出力したものを、弊社がお預かりする、という感じ。
  3. 人手なので期間指定を誤って抽出するなどのミスが生じるため、データの削除や差替えが簡単であること。

よくありそうな解法

  • 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になります。

ビジュアル作成

先の公式のページに従うと、次はビジュアルを作成する画面になります。
今回はデータの総件数と、日ごとの件数のグラフを作成してみます。

総件数

まずは左上の[追加]-[ビジュアルを追加]でエリアを追加します。
image.png
image.png

作ったばかりの場合は既に1つ追加済みかと思います。
それを選択した状態で、フィールドリストから"No"をクリックします。
image.png

ビジュアルのタイトルにもあるように、"No"は数値型なので、自動で合計になってしまいました。
これを カウント に変えるためには、ビジュアルを選択した状態で画面上部にあるフィールドウェルを開きます。

開く前
image.png

開いた後
image.png

"No(合計)"の右側の矢印をクリックして、[集計:合計]-[カウント]で集計方法を選びなおします。
image.png

総件数になりました。
image.png

タイトルを変えるには、タイトル部分をダブルクリックします。タイトルを編集する画面が出てきますので、適切なタイトルに変更します。
image.png

日別の件数

次に日別の件数のグラフを作ります。先の様にビジュアルを追加した後、追加した空のビジュアルを選択したまま、左下のビジュアルタイプから垂直棒グラフを選択します。
image.png

次にフィールドリストから"公表_年月日"を選択します(他の年月日はNULL値があり、フィールドの型が文字列型なので、思ったようなデータになっていません)。
image.png

X軸が読みづらいので、フォーマットを変えます。
総件数と同じように、画面上部のフィールドウェルから[形式:xxxxxx]で別の形式が選べます。
image.png

よさそうなのがないので、"その他のフォーマットオプション"を選択すると、左ペインで詳細に編集ができます。
image.png

後はタイトルを変えたり、総件数の大きさを変え、配置をし直すなどで全体の見栄えを良くします。
image.png

ダッシュボード

自分一人でデータをグラフ等にして確認するのであればこれでよいですが、他の人用に閲覧専用にするためには「ダッシュボードの公開」を行います。
言葉が紛らわしいので、QuickSightでの(私が理解している)構造を解説します。

QuickSightの構造

QuickSightは、「**"データセット"の内容を、"分析"でビジュアル化し、"ダッシュボード"**にして公開する」という風になっているようです。
図にすると以下のイメージです。
image.png
**"分析""ダッシュボード"**は、ビジュアルで関連しているため、「ビジュアルを変更する場合は"分析"を編集して、"ダッシュボード"に反映」ということをします。
データは各々で見ているようですので、データに変更があった場合は各々新しいデータを参照するため、「"分析"を"ダッシュボード"に反映」はする必要はないです。

ダッシュボードの公開

"ダッシュボード"の公開は、"分析"の右上にある[共有]-[ダッシュボードの公開]を選択します。
image.png

新しく"ダッシュボード"にする場合は、「新しいダッシュボードとして公開」を選択し、名前を入力します。
image.png
既に対象の"分析"から派生した"ダッシュボード"がある場合は、画像の様に「既存のダッシュボードを置き換える」というのが出ます。修正したビジュアルを"ダッシュボード"に反映する場合は、こちらを選びます。

"ダッシュボード"が作られました。こちらではビジュアルが変更できず、閲覧専用になります。
image.png

これで、DBを使わない、CSVファイルで運用できるダッシュボード環境ができました。

運用

操作は単純に、以下で更新できます。

  1. S3上の対象のフォルダへ、ファイルを追加・削除。
  2. QuickSightのデータセットを更新。

試しに、CSVファイルを追加・削除して反映されるか確認します。

データ追加

追加前

S3の対象のフォルダには、2020年のファイルだけあります。
image.png

件数は60,312件、日付は2020年が1年分です。
image.png

追加手順

対象のフォルダに、2021年のファイルを置きます。
image.png

QuickSightで、対象のデータセットを選択し、「今すぐ更新」をクリックします。
image.png
確認ポップアップが何度か出てきますので、クリックして進めます。

更新中はその旨表示されます。
image.png

更新が終わると、結果が表示されます。スキップされた行が無かったので、全件取り込めました。
image.png

追加後

では作った**"ダッシュボード"**を見てみます。
件数も増えていますし、2021年のデータも入っているのが確認できます。
image.png

データ削除

続いて、2020年のデータの削除もやってみます。

削除手順

S3フォルダから、2020年のデータを削除します。
image.png

その後、追加の際と同様にQuickSightのデータセットを更新します。
image.png

削除後

再び**"ダッシュボード"**を見てみます。
件数も先ほどより減少しており、データも2020年がなくなっています。
image.png

おわりに

CSVのファイルを管理してQuickSightにダッシュボードを作る方法を紹介しました。
DB不要でGUIで更新できるので、非常に楽な運用でデータの可視化ができると思います。

次はこのダッシュボードに、説明文を入れ込む方法を記事にしたいと思います。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?