Power BI の定期更新で発生しがちなエラー 3種はこう解決する

# こんな方のための記事です
Power BI デスクトップで「発行」を使い始めて、Power BI サービスのワークスペース（Proライセンスを持っていないユーザーは、マイワークスペースのみ）にアップロードすると、ブラウザ上で最新データに更新されたレポートを見ることができるようになります。

最初はうまく動作していた更新で急にエラーが出始めて修正の仕方がわからない、と困って放置している人のための記事です。よく発生しがちな更新に関するエラーと、その対応方法を紹介するのがこの記事の趣旨です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/7b5308d2-8a6a-7a7c-4629-3107d37330f9.png)

# この記事を書いている人
職場でPower BIを使ったり困っている人のサポートをしたりしてます。[Qiitaの記事](https://qiita.com/daddydaddy)　や　[個人的なブログ](https://mocabrown.com/blog/powerautomate/)　ではPower AutomateクラウドフローについてのTIPSのようなものを作ったりしているので、良かったら読んだり「いいね！」していただけると励みになります。

# エラーメッセージを確認する
## セマンティックモデルの場合
更新にエラーが発生したら、その原因をエラーメッセージから確認しましょう。
問題のセマンティックモデルの三点リーダーから「更新履歴」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/b4c1cb64-43b9-01e7-4c12-0bd3d34e70bd.png)
更新失敗の状態がわかります。一番左側の詳細列から「表示」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/611979d5-1d56-6fb4-b81c-72cffb1a2e7f.png)

## データフローの場合
データフローも更新履歴の出し方は同じですが、具体的なエラーの内容は画面右端にある↓矢印をクリックすることで、CSVファイルがダウンロードされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/18844da6-31f1-265f-02b7-c3af28c93426.png)

# エラーの原因とその解決方法
## 原因1 資格情報がないためのエラー
### データセットのエラー表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/2b09d6fb-1a23-904a-f98e-4706fa897603.png)
```
データ ソース エラー:	少なくとも 1 つのデータ ソースの資格情報がないため、スケジュールされている更新が無効です。更新を再度開始するには、このデータセットの設定ページに移動し、すべてのデータ ソースの資格情報を入力してください。その後、スケジュールされている更新を再アクティブ化します。
```
### データフローのエラー表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/8c4705f5-52fb-d3d9-37fe-493dacdb78f2.png)
```
Error: Credentials not found for data source '<Reducted data source>'
```

Power BIは基本的に１つ以上のデータソースに接続し、そこから情報を吸い上げて表やグラフにするアプリケーションです。インターネット上のWEBサイトなどはID,パスワードが不要なものがほとんどですが、そうはいかないデータソースもあります。

一番よくつかわれるのは、SharePoint Onlineのドキュメントライブラリ上に置かれたCSVファイルやExcelファイル、SharePointリストなどではないでしょうか？
## 資格情報不足の解決方法
データソースに対する資格情報がうまく設定されていないことが原因なので、設定してやればOKです。
### セマンティックモデルの場合
セマンティックモデル＞設定＞「データソースの資格情報」から警告マークがついているデータソースの「資格情報を編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/7a4a356b-1c15-3898-11c8-aa80fbe9dfe5.png)
SharePointの場合は認証方式に「OAuth2」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/3b9350df-fa49-9ccc-0007-90f55e4457b4.png)
プライバシーレベルについては、こちらを参考にしてください。

https://learn.microsoft.com/ja-jp/power-bi/enterprise/desktop-privacy-levels#data-source-settings

### データフローの場合
エラーとして、データソースへの認証情報がないことが記載されています。同じ行の前半を見てみるとテーブル名の列に「financials」とあります。これはデータフローのクエリを表しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/8c4705f5-52fb-d3d9-37fe-493dacdb78f2.png)
ワークフローを編集で開くと確かに資格情報がないことがわかります。「接続の構成」をクリックして認証を加えてやればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/d95e68bc-122e-edf7-d1a9-d3d49305c72d.png)


## 原因2 ユニークなテーブルになっていなかった（Duplicate value）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/1c44e46c-0fcb-1413-c133-d013cae8a0fd.png)
```
データ ソース エラー:	Column '<oii>Country</oii>' in Table '<oii>dim_Country</oii>' contains a duplicate value 'Canada' and this is not allowed for columns on the one side of a many-to-one relationship or for columns that are used as the primary key of a table. Table: dim_Country.
```
エラーの内容をよく読むとわかりますが、今回の場合は dim_Countryとういテーブルのなかに「Canada」とうい文字が複数あると指摘されています。

なぜこれがエラーになるかというと、テーブルが１対多のリレーション状態になっているからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/695c3071-a65b-8697-c084-d0489daf4817.png)
dim_Countryのテーブルをデータの変換から開き、最新状態に更新してみると、たしかにCanadaが重複していますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/bb62c6b3-ebbf-07bd-8890-71e917816be0.png)
リレーションで1対他の１になる側はかならずユニーク（一意）でなくてはいけません。リレーションを作成した時点ではユニークでも、データが増えるにしたがって重複してしまうこともあります。

### Duplicate valueエラーの解決方法
これはもうシンプルで、PowerQueryで一意にならなければいけないキー値の重複を取り除いておくことです。ヘッダー部分で「重複の削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/f9ce988b-e073-5811-b127-4970e76c3ced.png)
テーブルの値がユニークになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/58e555a9-ce11-3bf5-41cb-ce89638d11a2.png)
Power BIでデータ準備をする際にはこのようなディメンションテーブルの整備が非常に重要で、大量のデータを処理するような場合には特に動作パフォーマンスに影響してきます。テーブル名にdim_とつけていますがこれはディメンションテーブルとわかりやすくしています。
Power BIのディメンションテーブルとファクトテーブルを整備して、スタースキーマを形成することがPower BIでは重要というお話は[こちらのQiita記事](https://qiita.com/yugoes1021/items/12a40a5089fc5b5167c5)が非常に勉強になりますのでお勧めです。

https://qiita.com/yugoes1021/items/12a40a5089fc5b5167c5

## 原因3 型変換ができなかった(DataFormat.Error)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/2febb53e-c5e4-c166-0e08-8f08576462c7.png)

```
Error: DataFormat.Error: We couldn't convert to Number.
```
セマンティックモデルだとエラーにならなくても、データフローの場合には問題となるようです。
Power Queryでは列の型をしっかりと指定するために型変換を行います。たとえば数値ばかりが入っているセルの中に文字列が紛れ込んでいた場合、その列が型変換をおこなうとエラーとなってしまいます。
たとえば今回の場合はSales列の中にabcという文字を紛れ込ませてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/98810064-d8c3-4930-014a-17313fc82299.png)
データフローの編集画面でテーブルを最新状態にしてみると、確かにエラーになっています。日付型の列に日付に変換できない値が含まれているような場合にも同じ状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/e7f00f7c-0f5e-3738-a55b-ed7184b929d8.png)

### 型変換 DataFormat.Errorの解決方法
型変換エラーを起こしそうな列には「エラーの置換」を追加しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/76f058a9-4b93-cc46-5e2a-d4eefce76505.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/1ce2406f-f054-bd85-24ec-c22b6be96603.png)
置換先はnullとか、数値なら0に置き換えるのもよいでしょう。このあたりはデータの性質でケースバイケースです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/c861c417-9aa6-a39b-fed9-6906aada186d.png)


# 事前にできるエラー対策をしておこう
Power BIで発生しがちな更新エラーについて、見分け方とその原因、解消法を紹介しました。最初のうちは問題なくても、データソースが更新されていくうちに更新エラーが発生してしまうことがあります。とくに原因２と３はあらかじめ対処が可能なので、こういうケースがあると知っていると対策もとれて安定します。

なるほどね！　と思っていただけたら記事にいいね！　していただけると励みになります。