9
4

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 3 years have passed since last update.

Metabase入門 〜環境構築編〜

Posted at

はじめに

昨今、BIツールによるデータの可視化、民主化が非常に重要になってきているかと思います。
自分も Redash 等BIツール自体は使ったことがありますが、
ちょっと前より話題になっていた Metabase については触れたことがなかったので、どんなものかと一度触ってみようと思います。
DBについては、 MySQL8 を使用しています。

環境について

Dockerで構築します。
下記の docker-compose.yml を用意しました。

docker-compose.yml

version: '3'
services:
  app:
    image: metabase/metabase:v0.37.0.2
    container_name: metabase
    ports:
      - 3000:3000
    volumes:
      - ./metabase/data:/mnt/data

  sample_db:
    build: ./db
    container_name: sample_db
    ports:
      - 33006:3306
    volumes:
      - mysql-sample-app-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: sample
      MYSQL_APP_USER: sample
      MYSQL_APP_USER_PASSWORD: sample
      MYSQL_DATABASE: metabase_sample
    restart: unless-stopped

volumes:
  mysql-sample-app-data:
    driver: local

ディレクトリ階層に関しては、プロジェクトをGitHubに上げましたので、
こちらをご確認ください。
https://github.com/inagacky/metabase_sample

実際に立ち上げる

下記のコマンドで立ち上げます。

[inagacky@macbook] ~/workspace/metabase_sample
% docker-compose up -d

その後、 http://localhost:3000 にアクセスし、下記画面が立ち上がっていれば成功です。
スクリーンショット 2020-10-29 9.47.05.png

初期設定

ガイドに沿って、 言語 , ユーザー設定 , データソース設定 を行なっていきます。
非常に丁寧なので、困ることはないです。
スクリーンショット 2020-10-29 9.49.31.png

設定が完了すると、下記のような画面が起動します。
初期として Sample Dataset がありますが、今回は独自のDBで、検証します。
スクリーンショット 2020-10-29 9.52.42.png

DB設定

Dockerで立ち上がっているDBについて、テーブル作成、データを流し込みます。
弊社は不動産業を営んでいるので、それっぽい構造で簡単なテーブルを作ります。
今回は、 顧客情報 , 物件情報 , 契約情報 を作ります。
(マスタ化すべきフィールド等もありますが、面倒だったのでそのまま作っています。)

CREATE TABLE IF NOT EXISTS `customers` (      -- 顧客情報
  `id` INT AUTO_INCREMENT,                    -- PK
  `name` VARCHAR(20) ,                        -- 氏名
  `age` INT,                                  -- 年齢
  PRIMARY KEY (`id`),
  KEY `idx_age`(`age`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
;
CREATE TABLE IF NOT EXISTS `property` (    -- 物件情報
  `id` INT AUTO_INCREMENT,                 -- PK
  `prefName` VARCHAR(20) ,                 -- 都道府県名
  `price` BIGINT,                          -- 価格
  `category` VARCHAR(20),                  -- カテゴリ(戸建/土地/マンション等)
  PRIMARY KEY (`id`),
  KEY `idx_prefName`(`prefName`),
  KEY `idx_price`(`price`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
;
CREATE TABLE IF NOT EXISTS `contracts` (  -- 契約情報
  `customer_id` INT NOT NULL,             -- 顧客ID
  `property_id` INT NOT NULL,             -- 物件ID
  CONSTRAINT fk_customer_id
    FOREIGN KEY (customer_id) 
    REFERENCES customers (id)
    ON DELETE RESTRICT,
  CONSTRAINT fk_property_id
    FOREIGN KEY (property_id) 
    REFERENCES property (id)
    ON DELETE RESTRICT
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
;

データは、下記を流し込みます。

-- 顧客情報
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('山田一郎', '30');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('山田二郎', '31');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('田中一郎', '32');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('田中二郎', '45');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('田中三郎', '50');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('鈴木一郎', '47');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('鈴木二郎', '20');

-- 物件情報
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('愛知県', '32000000', '戸建');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('愛知県', '40000000', '戸建');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('東京都', '90000000', '戸建');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('東京都', '120000000', 'マンション');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('愛知県', '20000000', '土地');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('東京都', '90000000', 'マンション');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('愛知県', '24000000', 'マンション');

-- 契約情報
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('1', '1');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('2', '2');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('3', '3');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('4', '4');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('5', '5');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('6', '6');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('7', '7');

metabaseをいじってみる

前置きが長くなりましたが、metabaseをちょっといじってみようと思います。

テーブル結合

テーブル結合に関しても、GUI上で行うことができます。
スクリーンショット 2020-10-29 11.12.30.png

下記のように、テーブルを参照することができます。
スクリーンショット 2020-10-29 11.13.15.png

グラフ

グラフについても、色々な種類があります。
(データが少ないので、見栄えしなかったです。。。)
スクリーンショット 2020-10-29 11.18.37.png

ダッシュボード

下記のように、ダッシュボードを作成することもできます。
スクリーンショット 2020-10-29 11.24.36.png

まとめ

metabase、初めて触りましたが直感的に色々わかりました。
思った以上に環境構築等で記事が長くなってしまったので、metabaseの各機能に関して、
色々な指標でのグラフ作成は、別記事でもう少し触ってみようと思います。。
(環境構築編ということで、ご承知おきください・・・。)

以上です、ありがとうございました。

9
4
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
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?