Google DataStudio (DataPortal) にてデータソースの統合はJOINではない！

# 背景
Google DataStudio (DataPortal) にてデータソースの統合機能を利用していますが、想定外のことが発生したりしますので、ちゃんと整理しようと思っています。

# 結論
結論からというと、Google DataStudio (DataPortal) にある「統合」は、リレーショナルデータベース(RDB)の結合(JOIN)ではなくて、Blending(ブレンディング)のイメージに近いです。ブレンディングについては、Tableau(タブロー)というBIツールにもありまして、公式サイトにのせてある説明がわかりやすいので、[Tableauのブレンディング](https://onlinehelp.tableau.com/current/pro/desktop/ja-jp/multiple_connections.htm)の説明を参考してみてください。簡単に言うと、GAの統合は、各データソースで指定されたキーなどで一度集計されてから結合するイメージです。
![GA_001_ 統合とは.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/2b84283f-a460-beb5-57f7-357dd3e6e1f0.png)

# Dummy データの用意
Google DataStudio (DataPortal) の統合機能は、よりわかりやすく説明するため、二つのdummyデータ(Data_1とData_2)を用意しています。いくつかの操作の上、仕組みを理解するとのアプローチをします。

**↓Data_1↓**

| yyyy_mm | date | client_id |
|:--|:--|--:|
| 2018_12 | 2018/12/03 | 7361 |
| 2018_12 | 2018/12/13 | 14726 |
| 2018_12 | 2018/12/23 | 22091 |
| 2019_1 | 2019/01/02 | 29456 |
| 2019_1 | 2019/01/12 | 36821 |
| 2019_1 | 2019/01/22 | 44186 |
| 2019_2 | 2019/02/01 | 51551 |
| 2019_2 | 2019/02/11 | 58916 |
| 2019_2 | 2019/02/21 | 66281 |
| 2019_3 | 2019/03/03 | 73646 |
| 2019_3 | 2019/03/13 | 81011 |
| 2019_3 | 2019/03/23 | 88376 |
| 2019_4 | 2019/04/02 | 95741 |
| 2019_4 | 2019/04/12 | 103106 |
| 2019_4 | 2019/04/22 | 110471 |
| 2019_5 | 2019/05/02 | 117836 |
| 2019_5 | 2019/05/12 | 125201 |

**↓Data_2↓**

| yyyy_mm | date | user_id |
|:--|:--|--:|
| 2018_11 | 2018/11/28 | 123 |
| 2018_12 | 2018/12/04 | 126 |
| 2018_12 | 2018/12/10 | 129 |
| 2018_12 | 2018/12/23 | 135 |
| 2018_12 | 2018/12/28 | 138 |
| 2019_1 | 2019/01/12 | 141 |
| 2019_1 | 2019/01/12 | 144 |
| 2019_1 | 2019/01/22 | 150 |
| 2019_1 | 2019/01/27 | 153 |
| 2019_2 | 2019/02/02 | 156 |
| 2019_2 | 2019/02/11 | 159 |
| 2019_2 | 2019/02/11 | 162 |
| 2019_2 | 2019/02/21 | 165 |
| 2019_3 | 2019/03/23 | 180 |
| 2019_4 | 2019/04/09 | 189 |
| 2019_4 | 2019/04/12 | 192 |
| 2019_4 | 2019/04/12 | 195 |
| 2019_5 | 2019/05/03 | 201 |
| 2019_5 | 2019/05/12 | 204 |

いずれも、yyyy_mm (年月)、date (日付)、user_id (ユーザーid)との３つフィールドがあり、Google Analyticsのデータのように、ユーザーの訪問データが作られています。

# 計算フィールドの作成
* 「Data_1」にて、**uu_client_id**を作っています。計算式は`COUNT_DISTINCT(client_id)` です。
* 「Data_2」にて、**uu_user_id**を作っています。計算式は`COUNT_DISTINCT(user_id)` です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/d7a029ec-5048-409b-6054-73a244fb0e6f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/2b7d121a-b79a-9e60-f972-6703e0e34587.png)


# 基本の検証
* まず、年月ごとに、何人がいるかという検証を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/9ca78fae-b87b-3392-760b-f9a8e7e9e76e.png)
* 検証結果：問題ありません。Data1の2018/12に三人がいて、実際も「3」となっています。他の年月の人数も問題なく見えます。Data2の方も同様に正しく集計されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/48d0b432-b9e8-e5fa-1ed0-bca09fe4d01b.png)


# 統合の検証
* ここで、GA側の統合は「JOIN」なのか、「Blending」なのか検証していきます。
* それぞれのデータソースに、検証用フィールドを作ります。
    *  「Data_1」にて、**row_counts_data1**を作ります。計算式は`COUNT(yyyy_mm)` です。
    *  「Data_2」にて、**row_counts_data2**を作ります。計算式も`COUNT(yyyy_mm)` です。
* それで、Data_2とData_2は、「yyyy_mm」を統合キーとして統合します。先程作っていたフィールドを後ほど使うため、「指標」にも入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/13cd18ca-f305-18ab-65ab-a4f8f34c52ac.png)
* 統合の設定画面を閉じて、作っていたフィールドを、「件数」という集計方法にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/b5f7f9bb-b47e-3013-a604-ca1b03845a5a.png)
* そうすると、こんな結果になります (集計方法：件数)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/476a146d-8999-f4af-d68d-3a6a4d1c4a1b.png)
* もう一つのパターンを見てみましょう。集計方法を「合計」にしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/96d289f0-2675-9c1b-29f2-f98199e872f2.png)
* こんな結果になります (集計方法：合計)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/95f3502b-0249-c53d-e591-0e7095c71991.png)
* 説明：集計を件数にすると、全て「1」となっています。ただし、GAの統合がRDBの「JOIN」であれば、件数が「1」にならないはずです。RDBの「JOIN」なら、下記のようなイメージとなります。「yyyy_mm」が同じ部分は結合されて、キーが一意なっていない部分は、複数行となります。
* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/a9b0254e-b8c1-91ab-7c87-8f2081972053.png)
* つまり、「2018_12」に該当する件数は12件となるはずです。他の年月についても、「1」ではない件数です。(ここで省略しています。)
* 上記の結果に基づいて、集計の件数はすべて「1」となっているのは、Google DataStudio (DataPortal) の統合が「Blending」といえるでしょう。各データソースにて集計されてから、JOINが行われます。下記の図を参考してください。なお、集計方法を「合計」にしても「最大値」にしても「最小値」にしても、結果も変わりません。興味がある方は、是非試してみてください。結果が変わらない理由は、Blendingというのは集計されてから結合するので、すでに年月の粒度で集計されていた数字に対して、更に年月の粒度での「合計」や、「最小値」や、「最大値」などの集計方法でも、結果が変わりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200629/4332e864-09d2-a482-1b79-e210fbaaa886.png)

# まとめ
* Google DataStudio (DataPortal)の統合は、JOINではなくて、Blendingという仕組みだと見られます。
* 統合されたデータにて分析をした時、予想外の集計にならないようにちゃんと仕組みを理解していきましょう。次の記事は、予想外の集計について紹介します。