2.初心者向け PowerBI テーブルの作成～DAX使用～多対多リレーションシップ

### 初めに
前回に引き続きPowerBIの勉強を行っていきたいと思います。
今回は、エクセルにデータに新しく入社日という列を追加したので、このデータをBIに反映させて、時系列で分析ができるようにしていきたいと思います。
私もまだ初心者なので一緒に勉強していきましょう。

前回の記事はこちら

https://qiita.com/y-matsunaga/items/36e0a63a97e91805fa33

### データの更新

社員情報に入社日という列を追加しました。
これをBIに取り込んでいきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/7059ab73-a96c-261d-0011-003908e0847e.png)

とっても簡単で、BIを起動し、ホーム→更新をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/82b6169c-ac06-66b7-eeef-f0a65fa2a4ba.png)

画面右側のフィールドを確認してみると入社日が追加されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/cee7dc1e-4116-cb04-b2f4-10331799ebcf.png)

### DAXを使用し、新たに列を作成する

まず、データページに遷移し、追加した列のデータ型を確認
テキスト型になっています。プルダウンで日付型を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/ec92e241-89db-9274-fc63-a56cb2299a95.png)

間違えてもやり直せるのではいでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/e67adf50-c886-1cba-27b2-ba2e7229253a.png)

左上のデータ型を変更しました。それに伴い入社日の列の表示形式が変わりました。
以前と同じ表示形式yyyy/M/dに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/493f88bf-0351-6ea7-b728-3a677cbe4be7.png)

変更されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/ba431496-ba89-2655-7669-5b22632124f7.png)

これをもとに新たに日付用のテーブルを作成します。

### 新しいテーブルの作成

データの入力を使用してみます。（ベタで入力なので更新はされない）
まずは入社日の列を選択し、右クリックでコピーをします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/d7a9fac4-f507-19ab-1aef-2d68b0d03a27.png)

次にホームタブ→データの入力をクリックします。

左下で名前を変更し、列１をクリックして、貼り付けを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/9d5d0b3e-15d7-4555-3e68-863b2fb1fa87.png)

読み込みをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/4da6b4da-a6ed-b906-25c3-b6f2dd57b81e.png)

無事テーブルができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/47c8e5cd-b288-6cba-cab6-765526287169.png)

### DAX関数を使用して列を作成
今回やりたいこととしては、入社日が１５日か１日かで、新卒入社か中途入社なのか分けるために、日付のみを抽出した列を作成し、その列に応じて、新卒or中途という値の列を作成したいと思います。

新しい列をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/ccab767c-4acb-4621-1d2c-825f7bfc6b4f.png)

入力欄に、日付＝DAY('といれると入力補完が出てきます。
'日付テーブル'[入社日]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/73a0d8c7-67a5-ab43-944d-35201f16cc8b.png)

エンターを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/e8ad5f32-4f24-b07d-43aa-99642b7723c2.png)

反映されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/b8e6ed6f-57e2-27d9-c6b9-ae7875af776b.png)

次に日付の列に応じて中途か、新卒かを分ける列を作成します。
先ほど同様、新しい列の追加をして、以下のように入力します。
入力欄を広げるには三角のボタンを押せば広くなります。
必要に応じて字下げをして見やすくさせます。
今回はおなじみのIF関数で条件分岐して出力させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/49e19b23-c38c-ed4e-b852-abf60ed91a2f.png)

エンターを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/7340f241-27d8-2c88-ea22-2fa4c9a56592.png)

想定の動きになりました。
そして、リレーションシップで関連付けます。

入社日と入社日を繋げます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/96216a57-e10e-b1b3-9d2a-d4273f3da609.png)

多対多カーディナリティとなってしまったようです。
重複する項目同士があるのでうまく対応付けできない可能性があるというような意味合いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/55a83ac9-cbcd-5717-5a14-323c9cd7b68d.png)

対応策として、二つの列の重複を削除した中間テーブルを作成し、一対多の関係になるようにテーブルを作成します。

データの変換をおし、PowerQueryエディタ画面に行きます。
入社日の列を選択後、右上のクエリの追加→クエリを新規クエリとして追加をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/995ae229-f9cf-6ec0-4473-e76d2d9d75fe.png)


日付テーブルと結合します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/c217aa5b-b095-2642-b416-cbfd5ca98529.png)

1000行の社員情報に日付テーブルの情報がマージされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/ee60a2b5-de1e-ae9b-586c-50bd384281a2.png)

次に、必要なのは、一意となる日付テーブルだけですので、ほかの列を削除します。
テーブル名も変更しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/cbd68c84-3cb3-fbd7-e1a1-2f5cad2552ff.png)

列を削除したら、次は重複行を削除します。
行の削除→重複の削除をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/74d06b4f-a52d-91ac-b62a-a6744b1c69f7.png)

完了しましたのでもう一度リレーションシップしてみます。閉じて適用し、モデルへ移動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/e82b7caa-0bb6-953f-9bb0-fc330393533f.png)

中間テーブルに、それぞれ入社日をドラッグアンドドロップし、無事関連付けできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/ea6d5bcc-9ad2-44b0-15f4-c6e564f1bc78.png)

難しいことはまだ理解できていないですが、最近は多対多リレーションシップでもうまく設計すれば動くそうで、、、とりあえず試しに多対多でやってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/94289c0c-87f9-7a2b-ce66-1507c34a63a9.png)


### ビジュアルを追加して確認
入社区分でスライサーを置いてみる

![Animation7.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/1dfdfdda-18b5-81b8-68ec-01549e46ca81.gif)

できてるっぽい(笑)
時系列データも追加してみます。

うん、やはりベテランの方がスコアが高いんだな！
中途の方がなんかスコア高めに出てる！
理系の方が文系より割合多くて点数も高く出ているようだ。
昔は文系の採用は積極的ではなかったみたい！
というような情報が得られるかなと思います（ダミーデータですよ）


![Animation8.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/27b2683f-1b13-3dfd-0822-e0ca8af52a29.gif)

### 終わり
多対多リレーションシップの対応は初めてだった（そうならないようにデータ整形していた）
理解ができていない部分も多いのでまずはそうならないように工夫しようと思いました。
引き続きダッシュボード化に向けて進めていきたいと思います！