Contosoのサンプルデータを読み込もう✨

# はじめに

サンプルデータがあると、Demoを作成したり、技術検証を行うときに便利ですよね。

Contoso サンプルデータをSQL serverのローカルインスタンスに読込み、オンプレミスデータゲートウェイを介してPower BI Serviceに取り込むまでをやってみます。

SQL serverに入っているデータなので、ローカルインスタンスに読み込めばその他BIサービスでもサンプルデータでも使える（はず）！

サンプルデータに困っている方はぜひお試しください～🤣

# Contosoとは

ContosoはMicrosoftがサンプルやドキュメントのDEMOなどで使用している架空の会社名です。Microsoft製品を少しでも勉強したことがある人にとっては非常になじみ深い会社名だと思います。

以下、Wikiより引用。

> コントソ (Contoso) は、マイクロソフトがサンプル用に使う仮想上の会社またはドメインである。取締役会は業界関係者からなり、ダン・ジャンプCEOが率いている。2011年4月1日のエイプリルフールに、Googleは「コントソはマイクロソフトの技術を諦めて、Google Appsを選んだ」というジョークを飛ばした。

https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%88%E3%82%BD#:~:text=%E3%82%B3%E3%83%B3%E3%83%88%E3%82%BD%20%28Contoso%29%20%E3%81%AF%E3%80%81,%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%20%E3%81%8C%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E7%94%A8%E3%81%AB%E4%BD%BF%E3%81%86%E4%BB%AE%E6%83%B3%E4%B8%8A%E3%81%AE%E4%BC%9A%E7%A4%BE%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%20%E5%8F%96%E7%B7%A0%E5%BD%B9%E4%BC%9A%E3%81%AF%E6%A5%AD%E7%95%8C%E9%96%A2%E4%BF%82%E8%80%85%E3%81%8B%E3%82%89%E3%81%AA%E3%82%8A%E3%80%81%E3%83%80%E3%83%B3%E3%83%BB%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%97CEO%E3%81%8C%E7%8E%87%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82

# 事前インストールが必要なもの

SQL server とその更新プログラムをインストールします。
SQL serverは開発者エディションを選択すると無料でインストールできます。
その後、SQL serverの管理ツール**SSMS** (Sql Server Management Studio)もインストールします。

https://www.microsoft.com/ja-JP/sql-server/sql-server-downloads

https://www.microsoft.com/ja-JP/download/details.aspx?id=100809

https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/ad9b0ac5-0ee7-195a-4912-e8a6e0bcc1af.png)

# bakファイルをDL

SQLBIがバックアップファイルを配布してくれています。必要なデータ量に応じて使い分けてください。最大でSalesテーブルに1000万行あるデータを下記GithubからDLすることができます。

- Contoso 10K.bak
- Contoso 100K.bak
- Contoso 1M.bak
- Contoso 10M.bak

https://github.com/sql-bi/Contoso-Data-Generator/releases/tag/v1.0.0

# いざ実践！

## SQL Server のインスタンスを作成

まずはSQL Server のインスタンスを作成します。SQL Server インストールセンターを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/31d51dc9-7fcc-90bd-bd43-9f35e3abd52f.png)

あとはインスタンス機能はデータベースエンジンサービスを選択してください。
サーバー名などは任意に設定し、インスタンスの作成は終了です。
セットアップが終わると、自動的にServerは立ち上がった状態になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/3dda5842-103a-4a02-5f47-5e0207e61300.png)


## SSMSでPC内で起動しているSQL serverインスタンスに接続

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/7d894fc3-15cc-5160-accf-e1d38b1770e2.png)

Databaseのところで右クリックをして、**Restore Database**を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/e688924f-ce29-1887-10a5-47a201ac247f.png)

開いたWindowで**Device**を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/32be7bf8-3a19-6be0-5183-2142a38cbea1.png)

ファイルを選択する画面は、フォルダの選択画面が分かりにくいので、今回はCドライブ直下に置いておきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/6f1c68f4-ed13-72ee-828d-bc0ea163144a.png)

あとはOKボタンをポチポチしていると読み込みが完了するはずです。
ここまでくると完成です。
自分のPCでたちあがっているSQL serverインスタンス上にContosoデータベースが展開されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/d6a66735-8744-63f3-c4ef-0ee5c8df481f.png)

Viewsで右クリックすると、上位1,000行を出力するSQL文を簡単に記述・実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/0158422c-1d1f-8b09-0a86-485ec287f6d9.png)

データが入っていることを確認🎉

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/aad3d396-56c1-aec5-7d98-02c028af17db.png)

# Power BI Desktop から接続する

さて、この、ローカルにあるSQL serverにPower BI Desktopからアクセスをしてみます。
**データを取得**からSQL serverを選択します。

サーバー名のところに**localhost\サーバー名**を入力します。
今回の場合は**localhost\TABULAR2022**と入力。
資格情報を適宜入力してOKを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/ee885c12-36f2-b0d0-2ff9-382f9a952cd8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/5413de67-4b60-bcee-f8a4-45f830071089.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/039ad085-28ca-2acf-cfd4-0bfc26b287a4.png)

読み込みボタンを押すとデータのロードがはじまります。Salesが1,000万行あることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/c0253bfb-e16d-e0e0-5014-06ddfff61545.png)

リレーションを作成すれば、DEMOデータの完成🎉

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/067ead7b-4247-9b61-128b-2f54cdcd8560.png)

ビジュアライズももちろん可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/0cab9f4d-e1f0-4cdc-0814-7025ec130718.png)


# Power BI Dataflow / Datamart から接続する

Power BI Serviceから接続する場合も考えます。
いずれの場合もデータはオンプレミス（今回は自分のPC）にあるので、オンプレミスデータゲートウェイのインストールが必要です。データゲートウェイは下記のURLよりDL→インストールをしてください。

https://powerbi.microsoft.com/ja-jp/gateway/

インストールの流れは @yugoes1021 さんのスライドを参考に行いました。

https://www.slideshare.net/yugoes1021/20170520-power-bi

今回は新機能Datamartに読み込ませてみます。画面はDatamartを使用して解説しますが、Dataflowでもデータ読み込みまでの流れは同じです。

ワークスペースの**新規**をクリックして**データマート**を選択。
**別ソースからデータを取得**を選択。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/dcf9995f-8ad5-a5f6-d305-2bbd123da3e5.png)

**Azure SQL server** と **SQL Server データベース**は別物なのでご注意ください。前者はクラウドサービスAzure上にたてられたSQL serverで、後者が今回のターゲットとなるオンプレミスのSQL serverです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/2a1fcde3-200e-9998-7110-a1bf89700cce.png)

**SQL Server データベース**をクリックしたら、一度SSMSに戻ります。今回取り込みたいデータベース名の上で右クリックをして、プロパティを選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/d812fc65-a9cb-f964-7a7a-546e4cea6e07.png)

そこで出てくる情報をもとに、データソースの設定画面に入力していきます。基本はPower BI Desktop上で行う作業と同じですが、サーバー名などに先ほどは**localhost**を使用していたのですが、今回はそれではうまくいきません。SSMSで確認できるサーバー名を使用してください。Windows認証の**ユーザー名**も、自PCにログインしているユーザー名そのままではうまくつながりません。SSMSに表示されているユーザー名を使用のうえ、パスワードを入力してください。

:::note info
オンプレミスゲートウェイインストール時に設定する「回復キー」はログイン時には使用しません。Windows認証の際は自PCログイン時に使用しているパスワードを記入します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/0f28a8ac-ff13-f3e3-85d2-11c5905c2c5e.png)

設定をすればあとは読込をするだけです。
Power BIにデータベースを読み込ませる際は、Viewを読み込ませるのがベストプラクティスです。
今回は更新されないサンプルデータなのであまり関係ないですが、データをきれいに結合したりしてくれているので、Viewを読み込みます。

:::note info
PowerQueryの練習をするならViewを読み込まずに、生のテーブルからデータをETLするのもいいかも😊
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/36e536f8-0804-3042-8564-6dbd761568f6.png)

Contoso 10Mを読み込んでいるので、Salesテーブルが1,000万行あることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/a2873484-a6ff-b4a7-061f-e9a007c31305.png)

DatamartはWeb上でリレーションも作成できます。
先ほどと同じデータモデルを作成することができました🎉

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/e501f30a-010d-36a3-677f-ff0e7c3f6d76.png)

# ローカルServerを停止する

普段SQL Serverを使用する必要がない方は、SQL Serverを停止しておきましょう。
スタート画面から、構成マネージャーを立ち上げます。
動いているServerをクリックして「停止」を選択。これで完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/0b1f99c0-aeb7-4498-f552-39abcac9e1b8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/d0761fc6-f568-2475-9504-6cafcf4735d8.png)

# まとめ

最初はすこーしめんどくさいですが、更新されるデータではないため、DatamartやDataflowに一度読み込んでおけばあとはいつでも使える **スタースキーマ**のサンプルデータとなります。オンプレミスデータゲートウェイやSSMSなどに普段触る機会が少ない方もぜひチャレンジしてみてください👍

# 参考リンク

https://qiita.com/ishiayaya/items/b7a603a0812611c1818d

https://www.slideshare.net/yugoes1021/20170520-power-bi

https://www.sqlbi.com/blog/marco/2022/06/06/creating-your-own-contoso-star-schema-database/

https://github.com/sql-bi/Contoso-Data-Generator

https://github.com/sql-bi/Contoso-Data-Generator/releases/tag/v1.0.0

https://docs.microsoft.com/en-us/power-bi/transform-model/datamarts/datamarts-overview