ニューヨークタクシー乗降記録を用いたDatabricks SQLのウォークスルー

[Databricks SQL](https://www.databricks.com/jp/product/databricks-sql)では、`samples`というカタログの配下にサンプルデータがあり、これを使ってクイックにDatabricks SQLの機能を試すことができます。今回はこの中にあるニューヨークにおけるタクシーの乗降記録データを使ってダッシュボードを作る流れを体験いただきます。

アナリストによるDatabricks SQLの一般的な使い方は以下のようなものとなります。通常ステップ2からステップ5は試行錯誤を伴う繰り返しの作業となります。

1. データをアップロードする。(管理者が準備するケースもあります)
1. **クエリー**を実行するなどしてデータを理解する。
1. 目的を踏まえて解析(抽出、集計、並び替えなど)の切り口を考える。
1. 切り口に応じた**クエリー**を記述して実行する。
1. クエリー実行結果をどのように可視化するのかを考えて可視化を行う。(**ビジュアライゼーション**の作成)
1. 可視化を組み合わせて**ダッシュボード**を作成する。
1. ダッシュボードを公開する。

![Screen Shot 2022-09-07 at 14.17.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/50f6c492-042b-a0b1-379b-927ede4fb220.png)



:::note info
**注意**
画面はAzure Databricksですが、他のクラウドのDatabricksでも使用できます。
:::

# Databricks SQLへのアクセス

1. Databricksワークスペースにログインします。
![Picture1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8f80b6b0-816b-7aed-497a-c698a9c5e706.png)
1. 画面のデフォルト言語設定は英語なので、日本語に変更します。
1. サイドバーから「Settings > User Settings」を選択します。
1. Change your languageから日本語を選択します。
![Picture2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/127a1fd0-3d87-b6c8-692f-2be36e914368.png)
1. サイドバーのペルソナスイッチャーで**SQL**を選択します。
![Screen Shot 2022-09-02 at 16.23.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3e8fd808-98ed-6c85-374b-ae9125f64f60.png)
1. Databricks SQLのランディングページが表示されます。
![Picture3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ed19be31-6321-515a-45d9-253efa63c548.png)

# SQLウェアハウスの作成

1. Databricks SQLにおける計算資源である[SQLウェアハウス](https://qiita.com/taka_yayoi/items/23d7789198c2dcd66381)を作成します。
1. サイドメニューの**SQLウェアハウス**をクリックします。
![Screen Shot 2022-09-02 at 16.25.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1485094d-83a7-18f6-cf71-15ef8e6bf6af.png)
1. 画面右上の**SQLウェアハウスを作成**ボタンをクリックします。
![Screen Shot 2022-09-02 at 16.27.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4521bd30-4906-9d0d-2f2e-80847bdc4f06.png)
1. エンドポイント名にはわかりやすい名前、クラスターサイズは**XXS**を選択して、**作成**をクリックします。
![Screen Shot 2022-09-02 at 10.01.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/10940169-8211-b024-513d-dea7eab3bc44.png)
1. 権限管理が表示されたら右上の**x**をクリックします。
![Screen Shot 2022-09-02 at 16.28.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/62ac8b47-c15e-30ba-bc3f-bbea9a9867a3.png)
1. SQLウェアハウスのステータスが**実行中**になるまで待ちます。
![Screen Shot 2022-09-02 at 16.29.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/380aedfd-f84a-b224-a63d-60dad77c2937.png)

# クエリーの実行

Databricks SQLではデータベースに問い合わせを行うクエリーを作成し、ビジュアライゼーションを作成し、ダッシュボードを作成する流れとなります。

1. サイドメニューの**クエリ**をクリックします。作成済みのクエリーの一覧が表示されるので、**クエリーを作成**をクリックします。
![Screen Shot 2022-09-02 at 16.30.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2174c913-f2c7-ecbb-25d1-65e90b10ccb9.png)
1. SQLエディタが表示されます。こちらでSQLを記述してクエリーを作成します。
![Screen Shot 2022-09-02 at 10.14.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c4229fa7-2adf-9da4-6548-098ccb11daf5.png)
1. [上のステップ](#sqlウェアハウスの作成)で作成したSQLウェアハウスを選択します。
![Screen Shot 2022-09-02 at 16.31.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/54e2fff7-4a82-02d3-fb56-616c007b66e7.png)
1. スキーマ(データベース)ブラウザを操作してテーブルを参照します。

    `hive_metastore`をクリックしてリストを展開します。`samples`を選択します。
![Screen Shot 2022-09-02 at 16.32.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/aab65536-aa7a-c8d8-e511-091ed5b7aa1b.png)
1. `samples`配下のデータベース`nytaxi`を選択します。
![Screen Shot 2022-09-02 at 16.33.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2388194f-0378-a075-88f8-e6fca8474e6b.png)
1. データベース`nytaxi`配下のテーブル`trips`が表示されます。
![Screen Shot 2022-09-02 at 10.35.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/914c3596-5ead-bbe3-a4ba-c8fcd5a1b9bc.png)
1. テーブル`trips`にマウスカーソルを合わせるとボタンが表示されます。![Screen Shot 2022-09-02 at 10.38.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/85793b01-96f5-b827-97e8-d5ae3eaf9357.png)をクリックしてデータのプレビューを表示します。
![Screen Shot 2022-09-02 at 10.36.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2df6b5b4-776a-44f7-9421-2cc6aca19b4c.png)
1. これで準備が整いました。
![Screen Shot 2022-09-02 at 10.39.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bd2bc30e-3f13-72aa-1b23-be739e0bfb79.png)

# データの説明

**使用するデータ**：ニューヨークのタクシーの乗降記録のデータ

Databricks SQLでテーブルを参照するには、以下のようにカタログ、データベース、テーブルの3レベルの名前空間でテーブルを指定する必要があります。

`samples.nyctaxi.trips`

| 列名 | データ型 | 説明 |
|:--|:--|:--|
|  tpep_pickup_datetime | TIMESTAMP  |  乗車時刻 |
|  tpep_dropoff_datetime | TIMESTAMP  |  降車時刻 |
|  trip_distance | DOUBLE  | 移動距離(マイル)  |
|  fare_amount |  DOUBLE |  料金(ドル) |
|  pickup_zip | INT  | 乗車地点の郵便番号  |
|  dropoff_zip | INT  | 降車地点の郵便番号  |

# ダッシュボードの作成

今回は以下の流れでダッシュボードを作成します。ご自身でカスタマイズしてみてください。

1. レコード数をカウントするクエリーの作成、ビジュアライゼーションの作成
1. 乗車時間の分布を計算するクエリーの作成、ビジュアライゼーションの作成
1. 降車時間の分布を計算するクエリーの作成、ビジュアライゼーションの作成
1. 移動距離と料金の関係を確認するためのクエリーの作成、ビジュアライゼーションの作成
1. ダッシュボードの作成
1. フィルターの追加

## SQLエディタの画面構成

以降の作業で使用するSQLエディタの画面構成を以下に示します。クエリーを開くとSQLエディタが表示されます。サイドメニューの**SQLエディタ**からでもアクセスできます。

![Screen Shot 2022-09-02 at 16.39.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e9223c34-394d-102d-fadc-542e22ae5dab.png)

## レコード数のカウント

1. テーブル`trips`の各行が一つのタクシーの移動を表しているので行数をカウントすることで、テーブルに含まれている移動の数を得ることができます。
1. SQLエディタに以下のSQLを記述します。

    ```sql:SQL
    SELECT
    count(*) as total_trips
    FROM samples.nyctaxi.trips
    ```

1. **すべてを実行**をクリックすることでSQLが実行されます。
![Screen Shot 2022-09-02 at 16.45.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/86f17798-5428-8450-7ddb-0e536490bd9f.png)
1. 画面右下に結果が表示されます。他のクエリーを実行する際には同じ手順を踏みます。
![Screen Shot 2022-09-02 at 13.35.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/65561bb8-8a46-7a72-2fd2-36e01b9d7e48.png)
1. 次に、この結果を用いてダッシュボードの部品となるビジュアライゼーションを作成します。
1. **Table**の右にある **+** をクリックします。メニューが展開されるので**Visualization**を選択します。
![Screen Shot 2022-09-02 at 16.47.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f7ff21e8-8031-649c-5dea-93c0456fbd54.png)
1. ビジュアライゼーションエディタが開きます。
1. **Visualization type**から可視化のタイプを選択します。ここでは**Counter**を選択します。
![Screen Shot 2022-09-02 at 13.40.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/62537b33-915b-bf1e-7fcf-0798827a2f2c.png)
1. 選択するビジュアライゼーションによって設定項目は異なります。ここでは、**Counter label**に`移動総数`と入力します。
1. また、ビジュアライゼーションを識別しやすくするために`Counter 1`と表示されている箇所にカーソルを移動して`移動総数カウンター`と名前を入力します。
![Screen Shot 2022-09-02 at 13.43.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eefd2e64-9cd9-3910-4923-e0bf1300daad.png)
1. **保存**をクリックするとビジュアライゼーションエディタが閉じます。
1. **Table**の隣にビジュアライゼーション`移動総数カウンター`が追加されました。別のクエリーを作成した場合にも同様にビジュアライゼーションを追加することができます。
![Screen Shot 2022-09-02 at 13.44.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b84b1ad4-0664-7f83-1dcc-8bc9ddf30851.png)
1. 最後にクエリーに名前をつけて保存します。**New Query**となっている箇所にカーソルを移動して`移動総数`と入力します。 
![Screen Shot 2022-09-02 at 16.50.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5329557a-9f5f-4481-7963-cef976fe3ab9.png)
1. **保存**をクリックします。

## 乗車時間の分布

1. タブの隣の **+** をクリックして**新規クエリを作成**を選択します。
![Screen Shot 2022-09-02 at 14.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b912a658-5775-c578-5900-dc3a7f6bba3d.png)
1. クエリー名を**乗車時間の分布**、以下のSQLでクエリーを作成します。

    ```sql:SQL
    SELECT
        CASE 
            WHEN T.pickup_hour = 0 THEN '00:00'
            WHEN T.pickup_hour = 1 THEN '01:00'
            WHEN T.pickup_hour = 2 THEN '02:00'
            WHEN T.pickup_hour = 3 THEN '03:00'
            WHEN T.pickup_hour = 4 THEN '04:00'
            WHEN T.pickup_hour = 5 THEN '05:00'
            WHEN T.pickup_hour = 6 THEN '06:00'
            WHEN T.pickup_hour = 7 THEN '07:00'
            WHEN T.pickup_hour = 8 THEN '08:00'
            WHEN T.pickup_hour = 9 THEN '09:00'
            WHEN T.pickup_hour = 10 THEN '10:00'
            WHEN T.pickup_hour = 11 THEN '11:00'
            WHEN T.pickup_hour = 12 THEN '12:00'
            WHEN T.pickup_hour = 13 THEN '13:00'
            WHEN T.pickup_hour = 14 THEN '14:00'
            WHEN T.pickup_hour = 15 THEN '15:00'
            WHEN T.pickup_hour = 16 THEN '16:00'
            WHEN T.pickup_hour = 17 THEN '17:00'
            WHEN T.pickup_hour = 18 THEN '18:00'
            WHEN T.pickup_hour = 19 THEN '19:00'
            WHEN T.pickup_hour = 20 THEN '20:00'
            WHEN T.pickup_hour = 21 THEN '21:00'
            WHEN T.pickup_hour = 22 THEN '22:00'
            WHEN T.pickup_hour = 23 THEN '23:00'
        ELSE 'N/A'
        END AS `乗車時刻`,
        T.num AS `乗車回数`
    FROM
    (SELECT
      hour(tpep_pickup_datetime) AS pickup_hour,
      COUNT(*) AS num
    FROM
      `samples`.`nyctaxi`.`trips`
    GROUP BY
      1) T
    ```

1. 以下の設定でビジュアライゼーションを作成します。

    - ビジュアライゼーションの名前: 乗車時間の棒グラフ
    - Visualization type:Bar
    - Horizontal chartのチェックを解除
    - X column: 乗車時刻
    - Y column: 乗車回数
    - Y軸のラベル: 乗車回数合計

    ![Screen Shot 2022-09-02 at 14.26.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6668dc07-4514-921d-22be-f2ae321df3a9.png)

## 降車時間の分布

1. タブの隣の **+** をクリックして**新規クエリを作成**を選択します。
![Screen Shot 2022-09-02 at 14.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b912a658-5775-c578-5900-dc3a7f6bba3d.png)
1. クエリー名を**降車時間の分布**、以下のSQLでクエリーを作成します。

    ```sql:SQL
    SELECT
        CASE 
            WHEN T.dropoff_hour = 0 THEN '00:00'
            WHEN T.dropoff_hour = 1 THEN '01:00'
            WHEN T.dropoff_hour = 2 THEN '02:00'
            WHEN T.dropoff_hour = 3 THEN '03:00'
            WHEN T.dropoff_hour = 4 THEN '04:00'
            WHEN T.dropoff_hour = 5 THEN '05:00'
            WHEN T.dropoff_hour = 6 THEN '06:00'
            WHEN T.dropoff_hour = 7 THEN '07:00'
            WHEN T.dropoff_hour = 8 THEN '08:00'
            WHEN T.dropoff_hour = 9 THEN '09:00'
            WHEN T.dropoff_hour = 10 THEN '10:00'
            WHEN T.dropoff_hour = 11 THEN '11:00'
            WHEN T.dropoff_hour = 12 THEN '12:00'
            WHEN T.dropoff_hour = 13 THEN '13:00'
            WHEN T.dropoff_hour = 14 THEN '14:00'
            WHEN T.dropoff_hour = 15 THEN '15:00'
            WHEN T.dropoff_hour = 16 THEN '16:00'
            WHEN T.dropoff_hour = 17 THEN '17:00'
            WHEN T.dropoff_hour = 18 THEN '18:00'
            WHEN T.dropoff_hour = 19 THEN '19:00'
            WHEN T.dropoff_hour = 20 THEN '20:00'
            WHEN T.dropoff_hour = 21 THEN '21:00'
            WHEN T.dropoff_hour = 22 THEN '22:00'
            WHEN T.dropoff_hour = 23 THEN '23:00'
        ELSE 'N/A'
        END AS `降車時間`,
        T.num AS `降車回数`
    FROM
    (SELECT
      hour(tpep_dropoff_datetime) AS dropoff_hour,
      COUNT(*) AS num
    FROM
      `samples`.`nyctaxi`.`trips`
    GROUP BY
      1) T
    ```

1. 以下の設定でビジュアライゼーションを作成します。

    - ビジュアライゼーションの名前: 降車時間の棒グラフ
    - Visualization type:Bar
    - Horizontal chartのチェックを解除
    - X column: 降車時刻
    - Y column: 降車回数
    - Y軸のラベル: 降車回数合計

    ![Screen Shot 2022-09-02 at 14.26.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5895a7c5-69f8-382b-4063-2f9fc16e4070.png)

## 移動距離と料金の関係

1. タブの隣の **+** をクリックして**新規クエリを作成**を選択します。
![Screen Shot 2022-09-02 at 14.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b912a658-5775-c578-5900-dc3a7f6bba3d.png)
1. クエリー名を**移動距離と料金の関係**、以下のSQLでクエリーを作成します。

    ```sql:SQL
    SELECT
      T.weekday,
      CASE
        WHEN T.weekday = 1 THEN '日曜日'
        WHEN T.weekday = 2 THEN '月曜日'
        WHEN T.weekday = 3 THEN '火曜日'
        WHEN T.weekday = 4 THEN '水曜日'
        WHEN T.weekday = 5 THEN '木曜日'
        WHEN T.weekday = 6 THEN '金曜日'
        WHEN T.weekday = 7 THEN '土曜日'
        ELSE 'N/A'
      END AS `曜日`, 
      T.fare_amount AS `料金`, 
      T.trip_distance AS `移動距離`
    FROM
      (
        SELECT
          dayofweek(tpep_pickup_datetime) as weekday,
          *
        FROM
          `samples`.`nyctaxi`.`trips`
        WHERE pickup_zip in (10018) AND trip_distance < 10
      ) T
    ORDER BY
      T.weekday  
    ```

1. 以下の設定でビジュアライゼーションを作成します。

    - ビジュアライゼーションの名前: 移動距離と料金の散布図
    - Visualization type: Scatter
    - X column: 移動距離
    - Y column: 料金
    - Group by: 曜日

    ![Screen Shot 2022-09-02 at 14.41.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9cb2c2ec-a979-f139-2b99-fdcd231a4c81.png)

## ダッシュボードの作成

1. サイドメニューの**作成→ダッシュボード**を選択します。
![Screen Shot 2022-09-02 at 14.46.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/92f1a12d-3bbc-0fc8-81b7-459dc4d24628.png)
1. `ニューヨークタクシーダッシュボード`などわかりやすいダッシュボードの名前をつけます。 
![Screen Shot 2022-09-02 at 14.47.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fe981ecb-b54e-479e-c8bb-146b9d7eda01.png)
1. **保存**をクリックします。
1. ダッシュボードのキャンバスが表示されます。
1. 右上の**追加**ボタンを押し、**可視化**を選択します。
![Screen Shot 2022-09-02 at 14.48.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9722f479-267d-36f8-f295-afa3ba04c189.png)
1. これまでに作成したクエリーが一覧されます。
![Screen Shot 2022-09-02 at 14.51.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/918bb35f-f86d-93ee-b1b7-8ef2a9d2e12b.png)
1. クエリー`移動総数`を選択します。**Select existing visualization**の下のドロップダウンリストから`移動総数カウンター`を選択し、**ダッシュボードに追加**をクリックします。
![Screen Shot 2022-09-02 at 14.52.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4f970c31-d2d3-48fc-8e00-f6fd5c91b14d.png)
![Screen Shot 2022-09-02 at 14.52.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b9d58960-27d7-4f4f-c24f-359cc7c34654.png)
1. これでビジュアライゼーションがダッシュボードに追加されました。
![Screen Shot 2022-09-02 at 14.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8594540f-1c0c-1c99-9a97-8ecb26344ed3.png)
1. 他のビジュアライゼーションも追加します。ビジュアライゼーションはドラッグして位置やサイズを調整することができます。好きなレイアウトに調整したら**編集完了**をクリックします。
![Screen Shot 2022-09-02 at 15.00.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/90362519-3571-5d91-a85d-0d6ed0555dd4.png)

## フィルターの追加

1. 乗車地点のZIPコードでフィルタリングできるようにします。
1. 以下のクエリー`乗車zip`を作成します。

    ```sql:SQL
    SELECT
      DISTINCT pickup_zip
    from samples.nyctaxi.trips
    ORDER BY pickup_zip ASC
    ```
1. これまでに作成したクエリーにパラメーターを渡せるように、[クエリーパラメーター](https://qiita.com/taka_yayoi/items/904d13383bfe9cce626e)を設定します。クエリーのSQLを更新して保存します。

    ```sql:移動総数
    SELECT
      count(*) as total_trips
    FROM
      samples.nyctaxi.trips
    WHERE
      pickup_zip IN ({{ pickupzip }})
    ```

1. `{{}}`で囲んだ部分がフィルターで選択された値で置き換えられるようになります。SQLを変更するとウィジェットが表示されます。ギアマークをクリックします。
![Screen Shot 2022-09-02 at 15.38.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ff026aa5-6507-99af-55e5-e6d9d1d6f3e1.png)
1. **Type**で**クエリーベースのドロップダウンリスト**を選択します。クエリーで先ほど作成した`乗車zip`を選択します。
![Screen Shot 2022-09-02 at 15.41.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/73ce3f94-09b6-881d-75b1-ffac84f7d09e.png)
1. **複数の値を許容**チェックボックスをチェックしておきます。
![Screen Shot 2022-09-02 at 15.42.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6ceece90-849b-8064-c784-6c309ecec083.png)
1. **OK**をクリックします。
1. pickupzipで`10001`を選択し、**変更を適用**をクリックして動作を確認します。
![Screen Shot 2022-09-02 at 15.44.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/aef3dc94-2729-58ca-7752-6431eef524fb.png)
![Screen Shot 2022-09-02 at 15.44.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/add747a8-4809-ed3a-189d-540911d3a70b.png)
1. クエリーを保存します。

他のクエリーも更新します。SQL更新後、上で行ったウィジェッ トの設定を行います。

```sql:乗車時間の分布
SELECT
    CASE 
        WHEN T.pickup_hour = 0 THEN '00:00'
        WHEN T.pickup_hour = 1 THEN '01:00'
        WHEN T.pickup_hour = 2 THEN '02:00'
        WHEN T.pickup_hour = 3 THEN '03:00'
        WHEN T.pickup_hour = 4 THEN '04:00'
        WHEN T.pickup_hour = 5 THEN '05:00'
        WHEN T.pickup_hour = 6 THEN '06:00'
        WHEN T.pickup_hour = 7 THEN '07:00'
        WHEN T.pickup_hour = 8 THEN '08:00'
        WHEN T.pickup_hour = 9 THEN '09:00'
        WHEN T.pickup_hour = 10 THEN '10:00'
        WHEN T.pickup_hour = 11 THEN '11:00'
        WHEN T.pickup_hour = 12 THEN '12:00'
        WHEN T.pickup_hour = 13 THEN '13:00'
        WHEN T.pickup_hour = 14 THEN '14:00'
        WHEN T.pickup_hour = 15 THEN '15:00'
        WHEN T.pickup_hour = 16 THEN '16:00'
        WHEN T.pickup_hour = 17 THEN '17:00'
        WHEN T.pickup_hour = 18 THEN '18:00'
        WHEN T.pickup_hour = 19 THEN '19:00'
        WHEN T.pickup_hour = 20 THEN '20:00'
        WHEN T.pickup_hour = 21 THEN '21:00'
        WHEN T.pickup_hour = 22 THEN '22:00'
        WHEN T.pickup_hour = 23 THEN '23:00'
    ELSE 'N/A'
    END AS `乗車時刻`,
    T.num AS `乗車回数`
FROM
(SELECT
  hour(tpep_pickup_datetime) AS pickup_hour,
  COUNT(*) AS num
FROM
  `samples`.`nyctaxi`.`trips`
WHERE
  pickup_zip IN ({{ pickupzip }})
GROUP BY
  1) T
```

```sql:降車時間の分布
SELECT
    CASE 
        WHEN T.dropoff_hour = 0 THEN '00:00'
        WHEN T.dropoff_hour = 1 THEN '01:00'
        WHEN T.dropoff_hour = 2 THEN '02:00'
        WHEN T.dropoff_hour = 3 THEN '03:00'
        WHEN T.dropoff_hour = 4 THEN '04:00'
        WHEN T.dropoff_hour = 5 THEN '05:00'
        WHEN T.dropoff_hour = 6 THEN '06:00'
        WHEN T.dropoff_hour = 7 THEN '07:00'
        WHEN T.dropoff_hour = 8 THEN '08:00'
        WHEN T.dropoff_hour = 9 THEN '09:00'
        WHEN T.dropoff_hour = 10 THEN '10:00'
        WHEN T.dropoff_hour = 11 THEN '11:00'
        WHEN T.dropoff_hour = 12 THEN '12:00'
        WHEN T.dropoff_hour = 13 THEN '13:00'
        WHEN T.dropoff_hour = 14 THEN '14:00'
        WHEN T.dropoff_hour = 15 THEN '15:00'
        WHEN T.dropoff_hour = 16 THEN '16:00'
        WHEN T.dropoff_hour = 17 THEN '17:00'
        WHEN T.dropoff_hour = 18 THEN '18:00'
        WHEN T.dropoff_hour = 19 THEN '19:00'
        WHEN T.dropoff_hour = 20 THEN '20:00'
        WHEN T.dropoff_hour = 21 THEN '21:00'
        WHEN T.dropoff_hour = 22 THEN '22:00'
        WHEN T.dropoff_hour = 23 THEN '23:00'
    ELSE 'N/A'
    END AS `降車時間`,
    T.num AS `降車回数`
FROM
(SELECT
  hour(tpep_dropoff_datetime) AS dropoff_hour,
  COUNT(*) AS num
FROM
  `samples`.`nyctaxi`.`trips`
WHERE
  pickup_zip IN ({{ pickupzip }})
GROUP BY
  1) T
```

```sql:移動距離と料金の関係
SELECT
  T.weekday,
  CASE
    WHEN T.weekday = 1 THEN '日曜日'
    WHEN T.weekday = 2 THEN '月曜日'
    WHEN T.weekday = 3 THEN '火曜日'
    WHEN T.weekday = 4 THEN '水曜日'
    WHEN T.weekday = 5 THEN '木曜日'
    WHEN T.weekday = 6 THEN '金曜日'
    WHEN T.weekday = 7 THEN '土曜日'
    ELSE 'N/A'
  END AS `曜日`, 
  T.fare_amount AS `料金`, 
  T.trip_distance AS `移動距離`
FROM
  (
    SELECT
      dayofweek(tpep_pickup_datetime) as weekday,
      *
    FROM
      `samples`.`nyctaxi`.`trips`
    WHERE pickup_zip in ({{ pickupzip }})
  ) T
ORDER BY
  T.weekday  
```

# フィルターのクエリーパラメーターのマッピング

1. この時点でダッシュボードを表示すると、それぞれのビジュアライゼーションにフィルターウィジェットが追加された状態になっています。これを一つのウィジェットで操作できるように変更します。
![Screen Shot 2022-09-02 at 15.52.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8426d487-815a-681a-50a3-622ed292583a.png)
1. ダッシュボードの右上の![Screen Shot 2022-09-02 at 15.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5bc768e2-bbb0-c1e1-2957-8aecece8a921.png)をクリックし**編集**をクリックします。
![Screen Shot 2022-09-02 at 15.54.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8920a8a5-19d0-6155-65a6-78e7f48de8f0.png)
1. ビジュアライゼーションの上にカーソルを移動すると右上に![Screen Shot 2022-09-02 at 15.57.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/aa8d9bca-a4d0-3758-2fa3-b95821ce72e5.png) が表示されるので、これをクリックしてメニューを展開します。**ウィジェット設定を変更**を選択します。
![Screen Shot 2022-09-02 at 15.56.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2418740e-c625-e566-981b-39af3857b117.png)
![Screen Shot 2022-09-02 at 15.55.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bbc0a707-3137-8ab8-c3f3-5106c8bf5a93.png)
1. パラメーターの**値のソース**のウィジェットのパラメータの右にある鉛筆アイコンをクリックします。 
1. **新規ダッシュボードパラメータ**を選択して**OK**を押します。
1. **Save**をクリックします。
![Screen Shot 2022-09-02 at 17.19.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a5822382-1625-5cf4-5f36-f9824cb6dd93.png)
1. これでダッシュボード上のすべてのビジュアライゼーションに適用されるフィルターが作成されます。
![Screen Shot 2022-09-02 at 16.03.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bd16664d-beeb-2398-6d13-e1ce7cab6a59.png)
1. 他のビジュアライゼーションについても同じ設定を行います。この際には、すでにダッシュボードパラメータが作成されているので**既存のダッシュボードパラメータ**を選択します。設定が終わったら**編集完了**をクリックします。
![Screen Shot 2022-09-02 at 16.03.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/66676755-73e5-11a9-6feb-688953c8159a.png)
1. これでダッシュボードにフィルターが追加され、このフィルターですべてのビジュアライゼーションをコントロールすることができます。
![Screen Shot 2022-09-02 at 16.06.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5e580463-a691-8a1b-83ef-d406f9609e5b.png)

# 次のステップ

ここで紹介したダッシュボードは、ダッシュボードギャラリーからクイックにインポートすることもできます。他のビジュアライゼーションやフィルターも追加されているので動作を確認してみてください。

https://qiita.com/taka_yayoi/items/0e3e0730b71de28e4c08

また、自分でデータをアップロードしてダッシュボードを作成することも可能です。

https://qiita.com/taka_yayoi/items/89eda6708b7c2e77d651

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)