Microsoft Fabric使ってみる(データウェアハウス編)

今回はデータウェアハウスの作成方法のお勉強です。
ワークスペースが必要になりますので、前回までの記事をご参照ください。

https://qiita.com/fsd-kozue/items/94a3dfcacfc5d872321c

## データウェアハウスの作成
1. Synapse Data Warehouse のホーム ページで、任意の名前で新しいウェアハウスを作成します。少し待つと下のような画面になります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/4267488e-5b9b-63ae-0bd0-7fa560034753.png)

## テーブルの作成とデータの挿入
ウェアハウスは、テーブルやその他のオブジェクトを定義できるリレーショナルデータベースです。
1. 新しいウェアハウスで、 [T-SQL を使用してテーブルを作成する] タイルを選択し、既定の SQL コードを次の CREATE TABLE ステートメントに置き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/4739cb0a-1b2b-051e-8f4b-2d459cdad8af.png)
``` SQL:Create table文のサンプル
CREATE TABLE dbo.DimProduct
(
    ProductKey INTEGER NOT NULL,
    ProductAltKey VARCHAR(25) NULL,
    ProductName VARCHAR(50) NOT NULL,
    Category VARCHAR(50) NULL,
    ListPrice DECIMAL(5,2) NULL
);
GO
```
2\. 実行 ボタンを使用して SQL スクリプトを実行すると、データ ウェアハウスの dbo スキーマに DimProduct という名前の新しいテーブルが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/a38fedad-a7b3-ed3c-967a-5aeef90dec55.png)
3\. ツールバーの [更新] ボタンを使用して、ビューを更新します。次に、[エクスプローラー] ウィンドウで [スキーマ] > [dbo > テーブル] を展開し、DimProduct テーブルが作成されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/674979e8-decd-4130-0dae-d620be6d6fc0.png)
4\. [ホーム] メニュー タブで、[新しい SQL クエリ] ボタンを使用して新しいクエリを作成し、次の INSERT ステートメントを入力します。
```  SQL:Insert文のサンプル
INSERT INTO dbo.DimProduct
VALUES
(1, 'RING1', 'Bicycle bell', 'Accessories', 5.99),
(2, 'BRITE1', 'Front light', 'Accessories', 15.49),
(3, 'BRITE2', 'Rear light', 'Accessories', 15.49);
GO
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/f04a473d-2d07-4c24-1894-e9d3774aa4f0.png)
5. クエリが完了したら、データ ウェアハウスのページの下部にある [データ] タブを選択します。エクスプローラー ウィンドウで、DimProduct テーブルを選択し、3 つの行がテーブルに追加されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/4aef0845-0593-08fd-9c42-bd3ed966c600.png)

6\. [ホーム] メニュー タブで、[新しい SQL クエリ] ボタンを使用して新しいクエリを作成します。次に、Transact-SQL コードを https://raw.githubusercontent.com/MicrosoftLearning/dp-data/main/create-dw.txt からコピーして、新しいクエリ ウィンドウに貼り付けます。

7\. クエリを実行すると、単純なデータ ウェアハウス スキーマが作成され、データが読み込まれます。スクリプトの実行には約 30 秒かかります。
dbo スキーマに次の 4 つのテーブルが含まれていることを確認します。

    * DimCustomer
    * DimDate
    * DimProduct
    * FactSalesOrder
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/d1bed672-6516-d1b0-ef9c-79aa81b51caa.png)

## データモデルの定義
リレーショナル データ ウェアハウスは、通常、ファクト テーブルとディメンション テーブルで構成されます。ファクト テーブルには、業績 (売上収益など) を分析するために集計できる数値メジャーが含まれ、ディメンション テーブルには、データを集計できるエンティティの属性 (製品、顧客、時間など) が含まれます。
1. データ ウェアハウスのページの下部で、 [モデル] タブを選択します。
モデル ペインで、次のように FactSalesOrder テーブルが中央に来るようにデータ ウェアハウス内のテーブルを再配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/48d8c9a8-f140-65d0-7e9c-af39b0fb0a59.png)

1. FactSalesOrder テーブルから ProductKey フィールドをドラッグし、DimProduct テーブルの ProductKey フィールドにドロップします。次に、次の関係の詳細を確認します。

    * 表 1: FactSalesOrder
    * 列: ProductKey
    * 表 2: DimProduct
    * 列: ProductKey
    * カーディナリティ: 多対 1 (*:1)
    * クロスフィルター方向:シングル
    * この関係をアクティブにする: 選択済み
    * 参照整合性を前提とする: 未選択
このプロセスを繰り返して、テーブル間のリレーショナルを完成させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/b0b6cd1e-c7f0-9837-4065-a93c352665ec.png)


## データウェアハウステーブルのクエリ
データウェアハウスはリレーショナルデータベースであるため、SQLを使用してそのテーブルをクエリできます。
1. 新しい SQL クエリを作成し、次のコードを実行します。
SSMS(SQL Server Management Studio)と同じ感覚で使えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/c52be2e3-5e0f-ac70-585b-86b1fd9ba0f6.png)

## ビューの作成
ビューもリレーショナルデータベースで使用していたものと同じ機能が備わっています。（ストアドプロシージャも同様）
1. 例えば先に作成したSELECT文を次のように変更して、ビューを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/5f5e6a56-cf2c-f470-6b9c-e599deda0ada.png)
1. 新しいビューが作成されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/f92a9487-f9e1-af80-665d-0729db17d19c.png)
1. 新規ビューに対するSQL文が実行できたらOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/ad9bb22c-4a0d-8fe4-21ee-1019746f4d1d.png)

## ビジュアル クエリを作成する
SQL文を実行する代わりに、グラフィックなクエリデザイナでデータ ウェアハウス内のテーブルに対してクエリを実行することもできます。
1. [ホーム] メニューの [新しいビジュアル クエリ] を選択します
続いて[FactSalesOrder]テーブル をキャンバスにドラッグします。テーブルのプレビューが下の [プレビュー] ウィンドウに表示されます。
さらに、[DimProduct]テーブル をキャンバスにドラッグします。これで、クエリに 2 つのテーブルができました。
ここからSQL文を書く代わりに、キャンバス上の FactSalesOrder テーブルの (+) ボタンを使用して、クエリをマージします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/0b5b925f-e4f5-a8f9-2a11-94520bb3e73e.png)

1. [クエリのマージ] ウィンドウで、マージの適切なテーブルとして [DimProduct] を選択します。両方のクエリで [ProductKey] を選択し、既定の [左外部結合の種類] のままにして、[OK] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/33f23ebe-57fa-3303-17b7-0f39f3516b6a.png)

1. プレビューで、新しい DimProduct 列が FactSalesOrder テーブルに追加されていることを確認します。列名の右側にある矢印をクリックして、列を展開します。[ProductName] を選択し、[OK] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/9ccab939-c9dc-1c9f-531c-e0a0c0c83f8b.png)

1. 列名の右側にある矢印をクリックして、列を展開します。[ProductName] を選択し、[OK] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/b297def4-e705-bc80-245e-d5e2bd886ee8.png)

1. ProductName 列を使用してクエリ内のデータをフィルター処理できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/10e63613-acca-7bbe-6e38-f36c44552fbd.png)
さらに、[ProductName] 列をフィルター処理して、ケーブル ロック データのみを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/3f6f18b1-29fd-def4-b1ec-0032afdd96a1.png)

## データの可視化
続いて作成したクエリからPower BIでレポートを作成していきます。
1. [エクスプローラー] ウィンドウで、[モデル] ビューを選択します。ファクト テーブルとディメンション テーブルで、レポートの作成に必要のない次の列を非表示にしていきます。(赤線の項目)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/0c99fa5f-dcb9-e70a-5212-82b19532eb4c.png)

1. レポートを作成し、このデータセットを他のユーザーが利用できるようにする準備が整いました。[ホーム] メニューで、[新しいレポート] を選択します。これにより、新しいウィンドウが開き、Power BI レポートを作成できます。
[データ] ペインで、[FactSalesOrder] を展開します。非表示にした列は表示されていないことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885406/2e56a24c-01b8-775c-a568-d77744f8dea6.png)
ここから先はPowerBIのレポート作成と同じ手順になるので割愛します。

## まとめ
データモデルや正規化について知識がある方は、SQL Server Management StudioでCreate tableしたり、Select文発行したりするのと何も変わりないのですんなり入れると思います。
さらにSQL文を知らない方向けにビジュアルクエリも用意されているので、エンジニア以外の一般ユーザの方も慣れれば簡単に操作可能と思われます。
レポートを作成する部分に関しては、Power BIの知識が必要です。こちらはPower BI Desktopの使い方を覚えれば容易に作成できるようになります。