Power BI: Excel で使える「リンクされたデータ型」で［SharePoint のサイトメンバー一覧］を作る

# 背景
Excel のリンクされたデータ型、使ってますか？
以下の画像にある「データの種類」の部分のやつです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b5b13676-b97b-d295-d7e8-26ed1a63b84b.png)

今回はここでで使える社員一覧データ型を Power BI で作って、Excel で使ってみようというお話。

これによって、以下が簡単にできるようになります。

- [Forms に記録された ID (UserPrincipalNameとか) から、所属や氏名などを追加する](https://qiita.com/baku2san/items/eaa8d80ccee2e8d06876)
- Teams の Attendance.csv に含まれる メール や UPN から、所属や氏名などを追加する
- メール一覧から、社員一覧へ変換する


## リンクされたデータ型とは？

https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%95%E3%82%8C%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B-973d28d9-c51d-4dde-83be-898ecdf3efab

Excel での提供時期とVersion
> May 2021 update
> Here's what's new in Version 2105 (14026.20246).

https://support.microsoft.com/en-gb/office/what-s-new-in-excel-for-microsoft-365-5fdb9208-ff33-45b6-9e08-1f5cdb3a6c73

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/26a0b447-9eee-d5c0-ccf9-142ba82938a3.png)

# 環境
- 無償版: マイワークスペースへ発行で、個人利用可能
- Pro/Premium: Premium領域メンバーで共有可能

::: note info
上記二環境で同一名称にしても、問題ないですが、分かりにくくなるので個人用を名称変更するなりした方がよさそう
:::

# 制約
- Linked Data Types 機能自体が表示されない
    - Linked Data Types を非サポートなアカウントがログインされている場合。（片方がサポートしていても）

詳細は以下
[Excel Linked Data Types missing when using multiple Microsoft 365 accounts](https://answers.microsoft.com/en-us/msoffice/forum/all/excel-linked-data-types-missing-when-using/d687f82f-5f0f-4d2c-a657-5b5cfa727278#:~:text=Unfortunately%2C%20the%20Linked%20Data%20Types%20feature%20in%20Excell,Types%20and%20like%20magic%20Linked%20Data%20Types%20reappear)


# 概要
1. [Power BI でお勧めのテーブルを準備する](#odata-%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%81%B8%E5%8A%A0%E5%B7%A5)
    1. [OData でユーザー情報を取得して必要なデータへ加工](#odata-%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%81%B8%E5%8A%A0%E5%B7%A5)
    1. [おすすめのテーブルの作成](#%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)
1. [Excel で利用する](#excel-%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B)

# 詳細
## Power BI でお勧めのテーブルを準備する
基本は以下

https://docs.microsoft.com/ja-jp/power-bi/collaborate-share/service-create-excel-featured-tables

### OData でユーザー情報を取得して必要なデータへ加工
- Odata コネクターを探す<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/5e55c5dd-3ec3-9fd8-a269-733a287f7d85.png)
- SiteUserInfoList で特定のサイトのメンバー一覧を取得する<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/51cfd88e-5e7e-10a4-4c25-4cb5584beb09.png)

SiteUserInfoList の詳細は以下で

https://docs.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.spweb.siteuserinfolist?view=sharepoint-server


::: note info
故に、必要な人が全員いるサイトが必要
ここに関しては、ActiveDirectory で取得したり、Automate で グループメンバー一覧取得したりと色々方法はあるかと
:::


- 必要な情報に整形してやる。まぁ、ここはよしなに<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/f2f15821-c723-3d06-5c28-c39dde5b81ba.png)

### おすすめのテーブルの作成
- おすすめのテーブルを「はい」にして、行ラベル・キー列を設定<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/98ddd280-1839-6d32-e848-79cbc9daa067.png)

|対象|説明|
|-|-|
|説明|Excel でデータ型（おすすめのテーブル）として説明が表示されるので、使う際に分かりやすいように|
|行ラベル|セルの値を認識させたあとは、この値がセルに表示されるので、一意にわかる値がおすすめ|
|キー列|テーブル内の PrimaryKey って考えればよいかと|

::: note info
列を非表示にする事でデータ型の列には当然出てきません。Excel では以下のように表示にした列を追加可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/d9569943-92ec-43f2-451c-bef62f7d666e.png)

:::

- 発行することで、利用可能にします<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/4daa0fc8-a3a2-2059-f305-0618e98c510c.png)


::: note warn
発行をしない限り、Excel で利用できません。
> Power BI サービスに対してデータセットを発行またはインポートすると、Excel のデータ型ギャラリーにおすすめのテーブルが表示されます。 

おすすめのテーブルを修正した場合は、毎回更新が必要になります。
:::

::: note warn
おすすめのテーブルを更新した場合は、Excelを再起動する必要があります
> Excel ではデータ型の一覧がキャッシュされるため、新しく発行されたおすすめのテーブルを表示するには、Excel を再起動する必要があります。

:::

## Excel で利用する
- 変換範囲を選択して、データ型を選択することで変換完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/5f7d8f9a-e00c-6ba3-3751-4cd16a88e7c7.png)

- あとはよしなに列追加

### 列追加方法
1. テーブル右上に出てくるアイコンから<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/471c1b51-9915-f1bb-da7d-9281269e7804.png)
1. ユーザー型のアイコンから<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/9aeba09e-18c4-a3d0-b4db-3d5f602fb789.png)
1. 式をインテリセンス使いながら入れる<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/f4599893-6b82-e7bb-b624-9c8a09e2d3ab.png)




基本は以下

https://docs.microsoft.com/ja-jp/power-bi/collaborate-share/service-excel-featured-tables

# 参考情報

詳細は以下で

https://docs.microsoft.com/ja-jp/power-bi/collaborate-share/service-create-excel-featured-tables


# あとがき
> ・Excel でのデータ型のエクスペリエンスは、lookup 関数に似ています。 Excel シートから提供されるセル値を受け取り、Power BI のおすすめのテーブルで一致する行が検索されます。 検索エクスペリエンスには、次のような動作があります。
  　・**行の一致は、おすすめのテーブルに含まれるテキスト列に基づいています**。 これには **Power BI Q&A 機能と同じインデックスが使用されます**。これは英語での検索用に最適化されています。 その他の言語で検索すると、正確な一致が得られない場合があります。
  　・おすすめのテーブルには、ユーザーがそのテーブルのデータのクエリを実行する際に Power BI Q&A のインデックスが使用されます。 詳細については、「インデックス作成と Q&A が連動するしくみ」を参照してください。
  　・ほとんどの数値列は、照合の対象とは見なされません。 行ラベルまたはキー列が数値である場合は、それらは照合の対象に含められます。

上記のような記述があるが、以下現象があったので、何かが変・・
- Q&A に対して、テーブル＆列を含めてなくても反応した。一致しないと思ったのだが・・
- Email も何もかもが一致しないことがあった。（500万 Index の上限に引っかかったのかも？

> ・Q&A ツール内で**明示的にオフにされていない限り、列名とテーブルはすべて、インデックスに挿入**されます。
  ・**100 文字未満のテキスト値はすべてインデックス化**されます。 100 文字以上のテキスト値のインデックスは作成されません。
  ・Q&A インデックスには、**最大 500 万の一意の値が格納**されます。 この数を超えると、インデックスにすべての潜在的な値が保持されないため、Q&A の正確性が低下することがあります。
  ・インデックス作成中に**エラーが発生した場合、インデックスは部分的な状態のまま**になり、次の更新で再作成されます。

Q&A 自体、まだプレビュー扱いなので、しょうがないのかな、という感覚

とはいえ、データ型はとっても便利なので、Excel 自体がなくならない限り是非使っていきたいですね。

https://docs.microsoft.com/ja-jp/power-bi/natural-language/q-and-a-data-sources#how-does-indexing-work-with-qa

# keyword

create sharepoint site member list in Excel Organization Data Types Gallery