【Tableau】データ接続

## この記事の目的
Tableauで接続するデータを選択した後の以下の画面について、機能を確認していきます。
![スクリーンショット 2023-01-15 20.02.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/55876368-c5b5-906b-7c21-a4b62c6aba02.png)

※Tableauを開いた際、最初に出るのは以下の接続データ選択画面ですが、今回はここについては触れません。
![スクリーンショット 2023-01-16 0.02.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/c6adda88-60d4-61a1-da1f-882a813812c8.png)

## 使用するテーブルの中身を覗いてみる
今回参照するスーパーストアのExcelには注文、返品、関係者の3テーブル存在しています。
中身のテーブルにどんな項目があるのか、どんなテーブル構成なのか確認したいためテーブルの中身を覗いてみます。

確認したい対象テーブルにカーソルを合わせるとキャプチャのような、テーブルをマーク化したものが出てきます。
![スクリーンショット 2023-01-15 20.16.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/bf525a80-0e06-e3e3-e887-049c3b1c53b9.png)

これをクリックすると中身を確認する事ができます。
![スクリーンショット 2023-01-15 20.17.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/97924d25-e10e-7be6-68e8-fe4133991173.png)


## 使用するテーブルを選択

・対象テーブルを**ドラッグ＆ドロップ**
![スクリーンショット 2023-01-15 20.10.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/75894579-77ac-563e-750c-51d61aca01f3.png)

もしくは
・対象テーブルにカーソルを当てて**ダブルクリック**


すると以下の様に分析に使うテーブルが全体に表示されます。
この工程まで来たら、「Tableauに使うメインの対象テーブルが確定したよ！」という意味合いになります。
![スクリーンショット 2023-01-15 20.14.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/3c1e953a-2073-93ef-789b-c7c415248e77.png)


## 結合方法
メインテーブルを上記で選択しましたが、そのテーブルに結合を施す場合には以下のように複数の結合方法があります。

### UNION
データを縦に繋げる事ができます。

メインテーブルの▼を押下し、ユニオンの編集を選択します。
利用シーンとしては複数のログデータを一つにまとめて利用したい、というケースなどが考えられます。
※縦に繋ぐデータはカラム数やカラム内容などのテーブル構成が同一である必要があります。
![スクリーンショット 2023-01-15 20.32.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/ad5f3a96-5ae2-e4dc-6645-93ac9281fb10.png)

#### 手動で追加
繋ぎたいデータをどんどん入れていきます。
（キャプチャでは同一の「注文」テーブルを入れてますが、本来は異なるテーブルを結合する事が利用シーンとしては考えられるのでそこの違和感は無視してください）
![スクリーンショット 2023-01-15 20.34.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/e79041e9-22d5-6e80-6cc5-df7892d1fe2a.png)


#### 自動で追加
デフォルトでは固定（手動）が選択されているので、これを右の　ワイルドカード（自動）に変更します。
![スクリーンショット 2023-01-15 20.39.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/0228dfe9-bf13-7a88-5291-49692f206dae.png)

ワイルドカード（自動）を選択することで同一フォルダに新らしいファイルが追加されるとワークブックを開いたタイミングで自動取り込みされます。
Excelファイルの場合は、シートもしくはワークブックでの設定ができます。
![スクリーンショット 2023-01-15 20.42.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/b477346a-8c19-11eb-3da6-cbfac4d6f9b9.png)

### リレーションシップ
リレーションシップは複数のテーブルを使いやすいように、Tableauが集計してからテーブル同士を結合してくれます。
結合方法（左結合、外部結合、内部結合etc...）を選ぶ必要もないので、データ初心者でも使いやすいのが特徴でTableau社もリレーションシップの利用を推奨してます。

以下のように結合したいテーブルをドラッグすることで可能です。
キャプチャのようにオレンジ色の線が出てきます。
![スクリーンショット 2023-01-15 20.49.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/8cd5adb4-74fa-cd22-2d87-2da547643d61.png)

項目名が繋ぎ先・繋ぎ元の項目名が同一であればTableauの方で自動で繋いでくれます。
![スクリーンショット 2023-01-15 20.54.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/2385f74f-1fd2-77ae-f7ee-b240eb115e53.png)

もしも項目名が異なる場合には、手動で項目名を選択します。
![スクリーンショット 2023-01-15 20.57.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/2ef9563b-9b63-587f-93e8-27cc82efd2a2.png)

紐づける項目が複数ある場合には、**フィールドをさらに追加**から追加を行ってください。
![スクリーンショット 2023-01-15 20.55.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/2cdf3729-81b5-7dba-dc98-81d73e630ac6.png)

このように複数テーブルを結合することも可能です。
![スクリーンショット 2023-01-15 22.05.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/3bfe5f28-97f3-a313-ae45-9a09659a7753.png)

次に**パフォーマンスオプション**についてです。
![スクリーンショット 2023-01-15 21.37.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/7b0ec0cc-5364-bc59-0f1b-390b9ea06199.png)

ここに関してですがデフォルトの状態でも既に安全に分析ができる状態なので、特にいじらなくても問題なさそうです。
Tableau社でも前提として以下のような情報を公開してます。

:::note info
■適切な選択肢がわからない場合
Tableauで表示される既定の推奨設定を使用してください。
**既定値は安全に使用でき、分析中に正しい集計と結合が自動的に生成**されます。
基数や参照整合性がわからない場合は、これらの設定を変更する必要はありません。

■データの形状がわかっている場合
必要に応じてこれらの設定を変更し、2 つの表のレコード間の一意性と一致を表すことができます。
:::
[公式リンク](https://help.tableau.com/current/pro/desktop/ja-jp/datasource_relationships_perfoptions.htm#:~:text=%E9%81%A9%E5%88%87%E3%81%AA%E9%81%B8%E6%8A%9E%E8%82%A2,%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82　"公式リンク")はこちらです。

ちゃんとデータについて理解している人は変更してみてねって感じですね。
メリットとしては、変更する事でパフォーマンスがあがる可能性があります。


#### カーディナリティオプション
|判断基準|Tableau　UI選択|説明|
|:---|:---|:---|
|フィールドの値が一意でない場合、もしくは一意かどうかわからない場合|「多」 を選択|すると**結合前に関連データが集計**されます。|
|フィールド値が一意の場合|「1」 を選択|すると**集計前に関連データが結合**されます。<br>ただし、フィールド値が一意でない場合に 「1」 を選択してしまうと集計値が重複する可能性があるので注意です。|


#### 参照整合性オプション

|判断基準|Tableau　UI選択|説明|
|:---|:---|:---|
|フィールドの一部の値が他のテーブルの値と一致しない場合や、一致しているかが不明な場合|「一部のレコードが一致する」を選択|一致しない値を含むすべての値をとってくることができます。（＝外部結合）|
|フィールドの値が他のテーブルの値と確実に一致する場合|「すべてのレコードが一致する」を選択|この表に一致しない値がある場合には、一致しない値が削除されたりします。（＝内部結合）<br>この設定を選択すると生成される結合は少なく済むので、クエリのパフォーマンスは上がるようです。|

### 結合
結合方法（左結合、外部結合、内部結合etc...）が明確な場合には、以下の方法で設定していきます。
メインテーブルの▼を押下し、開くを選択します。
![スクリーンショット 2023-01-15 22.07.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/c6db38a9-82ff-5d26-ef8a-f0f2b3889a8f.png)

結合したいテーブルをドラッグ＆ドロップします。
![スクリーンショット 2023-01-15 22.07.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/573081a6-872b-b0a2-8cf3-0c50e76b9300.png)

赤枠部分をクリックすると結合方法の確認＆変更が実施できます。
現在はオーダーIDが結合のキーとなっていて、内部結合が行われているのが確認できます。
![スクリーンショット 2023-01-15 22.12.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/2f61a79b-bb18-7a62-3e23-bb03084b1637.png)

メインの注文テーブルはレコードが10000件存在するのですが、内部結合が選択されているのでレコードが欠落しています。
![スクリーンショット 2023-01-15 22.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/af1e4e24-567f-eca6-a245-82cf41497a32.png)

今回は注文テーブルのレコードは全て取得したいので左結合に変更します。
するとレコード件数が10000件取得できていることが確認できました。
![スクリーンショット 2023-01-15 22.18.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/a8e12a8e-0700-9abf-6349-eb086dd7a308.png)

### ★リレーションシップと結合の違い★
リレーションシップはTableauのバージョン2020.2から追加された機能です。
調べるとよく書かれているのが**Tableauが良い感じに複数テーブルをくっつけてくれる機能**というのがよくでてきます。
結論は正にその通りなのですが、それだけじゃ腑に落ちず私はもやもやとした事がありました。
二つの結合方法の異なりは複数テーブルを結合する**タイミング**が異なることです。

**■リレーションシップ**
1.　それぞれのテーブルを集計（結合しやすい状態にしてくれる）
2.　テーブルを結合する
※デフォルト設定の場合です。
先ほど説明したカーディナリティオプションをいじると結合タイミングは変わります。

**■結合**
1.　テーブルを結合する
2.　結合の動作で実現できるのは1のみなので必要に応じて計算フィールドで集計を行う等
※結合するテーブル同士の粒度や集計状態が異なる場合、結合では値が膨らむなどの問題が出てきます。
そのような状況は以下のようなケースが考えられます。

例）
Aテーブルでは集計が全くされていない
Bテーブルではある程度集計された状態
→Aテーブルをメインとし、それにBテーブルを左結合するとBテーブルは重複レコードが発生

ここのさらに細かい解説はまた別の記事で更新したいと思います。
ここでポイントとしておさえたいのは
「Tableauが良い感じにくっつけてくれる」というのは、**良い感じに集計してから**結合する事ができるという事です。

## 接続方法（ライブor抽出）

![スクリーンショット 2023-01-16 0.03.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/bbe2a21c-04a4-f4c3-5cf5-b69a63724768.png)

|抽出方法|特徴|注意点|
|:---|:---|:---|
|ライブ|テーブル情報をリアルタイムで取得可能<br>オフラインで作業は不可|Tableauを参照したりフィルターを動かしたりと、何かしらの処理が動く度にTableau→DBにデータを参照しにいく。その為、利用するDB環境によっては不向きな場合がある|
|抽出|抽出接続した時点（即時実行orスケジュール実行）のデータをファイル化して、ファイルのデータを参照しにいく。<br>そのため、大量のデータを利用する場合に有向。<br>オフラインで作業も可能|Tableau　Server上で重いデータソースを同時実行すると待ち時間が発生したりクエリ動作が遅くなったりする。同時実行を避けるスケジュール検討などが重要。|

上記はあくまで目安であり、利用するDB環境やTableau Serverのキャパで選択は変わってきます。
ちなみに、デフォルトがライブ接続になっているので、気付かぬうちにライブ接続を選択していた、という事がよくあります。
Tableau Serverにパブリッシュする際には必ず確認しましょう。

## データの絞り込み機能
### 抽出フィルター（行単位）
※抽出の場合のみ利用可
このフィルター設定を行うことで、利用しないデータを除外することが出来ます。
シートにデータを読み込ませる前にデータの抽出範囲を制限することができるのでパフォーマンスが向上します。

まずは対象項目を選択
![スクリーンショット 2023-01-17 22.25.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/c3111e84-e685-01aa-4716-1cf14ac6a280.png)

ここではお試しで相対日付を選択
![スクリーンショット 2023-01-17 22.26.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/940433b9-3386-25a9-1804-9421ddbfe9c1.png)

過去3年分だけ使いたいので、以下のように選択
![スクリーンショット 2023-01-17 22.26.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/1c9c4bd6-8046-4a80-8f43-f0e054820019.png)

「過去3年分を含む」というコメントを確認しOKを押下
![スクリーンショット 2023-01-17 22.27.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/0b09c377-57f7-b444-93ef-f7c1761c084f.png)

#### 集計機能
選択した粒度で集計してくれます。
![スクリーンショット 2023-01-17 22.27.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/62bb8b47-0b4a-13e8-397a-821080d36bf9.png)

#### フィールド非表示機能
このボタンを押下することで不要なフィールドを自動で除外してくれます。
![スクリーンショット 2023-01-17 22.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/30909079-bfd8-dca8-354f-db226f490900.png)
ダッシュボードが完成した後に、最後パフォーマンス向上のために設定するでも良いです。

※データソース画面ではなくワークシート画面上での非表示にする作業は、「▼」押下し「使用していないフィールドをすべて非表示」
これでもOKです↓
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313533373134322f33366263333032322d303862612d326561332d393335312d3731363332336263663339322e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/c2effd07-c2ea-bb87-1d25-391d78af8ea7.png)


※集計機能・フィールド非表示機能の注意点※
カスタムSQLだったらロジックを見る事で確実に抽出条件を確認する事が出来ますが、このオプション自体を知らない人は見逃してしまう可能性があります。
そのため、業務上利用する場合にはこの機能の利用をチームメンバーが把握しておく必要があります。（後々メンテする時のために）

### データソースフィルター（行単位）
※抽出・ライブどちらでも利用可
個人的には、お試しでデータを食わせたい時に気軽に使えるフィルターとして使ってます。
　ex )元データには10年分のデータが入っているけど、
　それだと確認するには遅そうなのでお試しで直近3年分だけ取り込みたい時など

まずは対象項目を選択
![スクリーンショット 2023-01-17 22.06.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/9066a007-4a83-1998-88a6-e40775974797.png)

ここではお試しで相対日付を選択
![スクリーンショット 2023-01-17 22.08.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/f24f8b2a-cb45-0b3a-9cc4-63c7dc831511.png)

過去3年分だけ使いたいので、以下のように選択
![スクリーンショット 2023-01-17 22.08.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/eac5e97e-dfd8-1a26-9c46-36977ff1207b.png)

「過去3年分を含む」というコメントを確認しOKを押下
![スクリーンショット 2023-01-17 22.09.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/b3599460-a708-0a7b-aa24-dcfafd93da34.png)

### 手動でレコードを非表示（列単位）
使わない項目を非表示にしましょう。
対象項目にカーソルを合わせて右クリックし、「非表示」を選択で完了です。
![スクリーンショット 2023-01-17 22.12.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/7f3dba35-1ae6-f8e4-eb42-ea472920aa9b.png)