Power Platformでノンコーディングで筋トレ成果を記録するアプリを作ってみた - 3.Common Data Service編 -

# 1.やったこと
iPhoneのアクティビティアプリのスクショを画像認識して、筋トレ結果を抽出、データを格納してダッシュボードで表示する…までを、Power Platformの各種サービスを駆使してノンコーディングでやってみたことのうち、**Common Data Service**でやったことのメモです。

1. [Power Platformでノンコーディングで筋トレ成果を記録するアプリを作ってみた - AI Builder編 -](https://qiita.com/miokawa/items/17d84d8811fe38ff4704)
2. [Power Platformでノンコーディングで筋トレ成果を記録するアプリを作ってみた - Power Apps編 -] (https://qiita.com/miokawa/items/0f3dc6ac6a1be01984d6)
3. [Power Platformでノンコーディングで筋トレ成果を記録するアプリを作ってみた - Common Data Service編 -](https://qiita.com/miokawa/items/da330e778afabf46579d)←コレ
4. [Power Platformでノンコーディングで筋トレ成果を記録するアプリを作ってみた - Power Automate編 -](https://qiita.com/miokawa/items/2ca2c75fdb52fcc90e78)
5. [Power Platformでノンコーディングで筋トレ成果を記録するアプリを作ってみた - Power BI編 -](https://qiita.com/miokawa/items/c7afe408e076cb9f7578)

人恋しさと運動不足解消のため、定期的にオンラインフィットネス（Teams繋ぎながらyoutubeのトレーニング動画を流してみんなでやる）を会社の人とやり始めたことがきっかけで作りました。

最終的な成果物はこんな感じ（細かいデザイン方法については触れません）。
<img width="250" alt="サンプルスクショ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/5369c570-2e83-4f8e-c113-e0be8f557090.jpeg"> <img width="250" alt="サンプルスクショ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/badb9fb8-1fea-ea0e-387b-f1a46ac248b9.jpeg"> <img width="250" alt="サンプルスクショ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/ed233619-7794-1379-2ef0-c5e85ac2b356.jpeg">

※試行錯誤した結果、こうしたらできた！って感じなので、これが一番スマートなのかどうかは不明ですのでご注意ください。

# 2.本アプリでのPower Platformの各サービスの役割
- **Power Apps**：iPhoneのアクティビティアプリのスクショをアップロードする。Power BIで筋トレ記録見られる。
- **AI Builder**：アクティビティアプリのスクショに含まれる筋トレ時間、消費カロリー、日付などを画像認識する
- **Power Automate**：Power Appsのアップロードボタンをトリガーに、アップロードされたスクショをAI Builderに投げ、結果のデータをCommon Data Serviceに格納する
- **Common Data Service**：ひたすら筋トレ結果を格納する
- **Power BI**：Common Data Serviceに格納された筋トレ成果たちをそれっぽく表示する

図にすると以下のような感じです。
気づいたら割といろいろ使ってた。わお。

![筋トレアプリ図解.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/17447ad0-bd5a-0f5f-e48a-20bddeeb914e.png)

# 3.開発環境
今回はこちらの無料ライセンスを使いました。
[Power Apps Community Plan](https://powerapps.microsoft.com/ja-jp/communityplan/)


# 4.実現したいこと
[AI Builder編](https://qiita.com/miokawa/items/17d84d8811fe38ff4704)で以下のスクショから画像認識して抽出した筋トレデータを格納するCommon Data Serviceを準備する。
<img width="200" alt="サンプルスクショ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/b6884342-d77a-dc4e-496f-42e1473656da.jpeg">

抽出できるデータ  

- 曜日（例：Mon）
- 月（例：Dec）
- 日（例：14）
- トレーニングカテゴリ（例Fitness Game）
- 合計時間（例：0:40:01）
- アクティブキロカロリー（例：118KCAL）
- 合計キロカロリー（例：159KCAL）
- 平均心拍数（例：114BPM）

# 5.作成過程
[Power Apps](https://make.powerapps.com/)にログインし、**データ**から**テーブル**を選択し、**新しいテーブル**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/5a923aaa-053f-86ef-2133-ddd10f9f6527.png)

テーブル作成に必要な項目を入力して**作成**をクリックします。
各項目の意味はこちらの[公式サイト](https://docs.microsoft.com/ja-jp/powerapps/maker/common-data-service/data-platform-create-entity)を参照ください。
<img width="300" alt="サンプルスクショ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/111055e5-97ef-743f-52eb-7be273f45cdf.png">

少し待つと、ぶわっとたくさんの列が生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/9b5dac4a-ed47-ee51-7f21-093eb3b71c51.png)

今回格納するデータの列を追加していきます。最終的にPower BIで何を表示したいかにもよりますが、私の場合、試行錯誤の結果少なくとも以下の列が必要となりました。なお、括弧内は選択したデータ型を表しています。

- Date（日付のみ）
- Training Category（テキスト）
- Active Kilocalories（整数）
- Total Training Minutes（整数）
- Avg. Heart Rate（整数）

左上の**列の追加**から、列の名前の入力やデータ型の選択をし、**作成**をクリックします。
必要な列の分だけ繰り返します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/a8d8627a-d174-9f87-68f8-a86609e7ffee.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/63100309-2101-6e92-3288-7f9c1e7c1a31.png)

一通り列の追加が終わったら、右下の**テーブルの保存**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596292/8a48bdc5-8698-e2e5-5e4e-ebb69851332d.png)

# 6.次のステップ
次は[Power Automate編](https://qiita.com/miokawa/items/2ca2c75fdb52fcc90e78)で[AI Builder編](https://qiita.com/miokawa/items/17d84d8811fe38ff4704)で作成したAIが画像認識で抽出した筋トレデータを格納していきたいと思います。