見出し画像

ランニング記録データの利活用③

分析屋 研究開発チームのkです。前回に続いて、約半年前に趣味で始めたランニングと勉強中のBIについて書きます。

編集の都合により、本記事の執筆時期(6月20日から6月30日、7月5日から7月10日)と公開時期に多少の時差があります。ご了承ください。

前回のまとめと今回の概要

前回の記事では、複数のjsonファイルを加工してcsvに変換し、Power BIとデータを接続し、ダッシュボード作成を始めました。

今回はダッシュボードにゲージ、カード、カレンダーのビジュアルを追加します。




ダッシュボード作成

ダッシュボード作成の続きをします。タイトルとスライサーは作ったので、残りはゲージとカードとカレンダーです。

ビジュアルの設定

ゲージの設定

ゲージは以下のように、「値」、「最小値」、「最大値」、「目標値」の4つの値で構成されるビジュアルです。

ゲージの例

左下の「0」が「最小値」、真ん中の「84.61」が「値」、右上の「80.00」と黒い線が「目標値」、右下の「100」が「最大値」です。

「最小値」から「値」までが塗り潰されるようになっていて、進捗度合いを可視化するのに便利です。このビジュアルを活用して、その月の走行距離と目標走行距離を比較し、目標を達成しているかいないか、目標を何km上回っているか下回っているかを確認できるようにします。

「値」は「走行距離」列の合計、「最小値」は0km、「最大値」は100kmとします。「目標値」は80kmとします。80kmにしたのは、1週間に20km(平日に5km走を2回、土日に10km走を1回走るペース)ならギリギリ継続できそうだったからです。参考までに、日本橋から小田原までの距離が約80kmです。

さて、「最小値」「最大値」「目標値」に設定する値が決まったので、これらの値に対応するメジャーを作成します。「ホーム」、「計算」、「新しいメジャー」から以下の3つのメジャーを作成します。

ゲージ最小値 = 0

ゲージ最大値 = 100

月間目標走行距離 = 80

メジャーを作成したら、「値」、「最小値」、「最大値」、「目標値」を設定します。自動生成されたタイトルが長いので、「ビジュアルの書式設定」、「全般」、「タイトル」からタイトルを「進捗(km)」に変更します。

ゲージの設定が終わったときの画面

テストのため、画面右上のスライサーから「2024年5月」を選択します。先月は100km走ったようです。

スライサーで「2024年5月」を選択したときの画面

今度はスライサーで「2024年6月」を選択します。今月は47km走ったようです。「ゲージ目標値」の80kmと比べると33km足りていません。

スライサーで「2024年6月」を選択したときの画面

今月の走行距離が全然足りていないことは一旦置いておいて、固定値である「月間目標走行距離」を「目標値」として表示することには1つ問題があります。

それは、毎月月初に「目標値までの残り距離」が80kmになってしまうことです。1か月間あるとはいえ、日本橋から小田原まで走るのは途方もない距離に感じてしまいます。それよりは、マラソンのようにペースメーカーとして「目標値」を置き、その進度に合わせて運動計画を立てられるようにした方が役立つでしょう。

ペースメーカーの進度を計算するために、具体例を考えます。
例えば、今月が28日ある月で、今日が7日で、「月間目標走行距離」が80kmだった場合、7 / 28 * 80= 20km 走っていれば、このペースを維持することで月末には目標を達成できることになります。 

つまり、80kmではなく20kmを「目標値」とすることで、目標値を上回っていれば多めに休息を取り、下回っていれば運動頻度を上げたり、1回の走行距離を長くすることで、目標に追いつくことができます。

上記の仕様を再現するために、以下のDAXで新しくメジャーを作成します。スライサーで今月を選んでいない場合は「月間目標走行距離」を「目標値」とします。

ゲージ目標値 =

VAR days_passed = DAY(TODAY())
VAR days_of_this_month = DAY(EOMONTH(TODAY(), 0))
VAR this_month = YEAR(TODAY()) & "年" & MONTH(TODAY()) & "月"

RETURN IF(
    SELECTEDVALUE(exercise[年月]) = this_month,
    exercise[月間目標走行距離] * days_passed / days_of_this_month,
    exercise[月間目標走行距離]
)

ゲージの「目標値」に「月間目標走行距離」が入っているので、新しく作成したメジャー「ゲージ目標値」で置き換えます。

スライサーで「2024年6月」を選択したときの画面

先ほどは目標値が80kmになっていましたが、58.67kmに代わっています。今日は6月22日で、今月は30日あるので、22 / 30 * 80 = 58.66 から「ゲージ目標値」が正しく計算されていることがわかります。目標値まで約11km不足しているようです。

過不足距離を暗算で計算してもいいのですが、せっかくなのでDAXで計算して表示します。目標を達成している場合は「目標達成!」とニコちゃんマーク(実務で使うことはないと思いますが)を2つ表示し、達成していない場合は残り距離を表示することにします。DAXでは UNICHAR(10) を使って改行することができます。

ゲージ補足テキスト =

VAR this_month = YEAR(TODAY()) & "年" & MONTH(TODAY()) & "月"
VAR total_distance = SUM(exercise[走行距離])
VAR remaining_distance = exercise[ゲージ目標値] - total_distance

RETURN IF(
    remaining_distance > 0,
    "目標まで" & UNICHAR(10) & ROUND(remaining_distance, 1) & "km",
    "目標達成!" & UNICHAR(10) & "😊😊"
)

画面にカードのビジュアルを追加したら、フィールドに「ゲージ補足テキスト」を指定します。ビジュアルの配置を微調整して、表示内容のテストをします。「ビジュアルの書式設定」から「カテゴリラベル」は非表示にしました。

スライサーで「2024年5月」を選択したときの画面
スライサーで「2024年6月」を選択したときの画面

!!!

目標達成している場合もしていない場合も、補足テキストが正しく表示されることが確認できました。

カードの設定

カードでは、「運動回数」、「合計走行時間」、「合計消費カロリー」、「平均ペース」の4つを表示します。

「運動回数」は、「日付」列の「カウント」で求められます。滅多にないですが、1日に2回以上ランニングすることもあるので、日時ではなく日付を使っている場合は「カウント(一意の値のみ)」を使うと正しい集計結果が得られません。

「合計走行時間」は「走行時間」列の「合計」、「合計消費カロリー」は「消費カロリー」列の「合計」で求められます。

「平均ペース」は以下のDAXで求められます。

平均ペース = SUM(exercise[走行距離]) / SUM(exercise[走行時間])
カードの設定が終わった画面

カレンダーの設定

最後にカレンダーの設定をします。Power BIにはデフォルトでカレンダーのビジュアルが入っていないので、「その他のビジュアルの取得」からカレンダーのビジュアルを探します。

今回は画面真ん中の「Beyondsoft Calendar」を使います。

Data Fieldに「日付」列、Measure Fieldに「走行距離」列を設定したら、タイトルやフォントサイズを調整します。

このままだと走行距離の違いが視覚的に分かりにくいので、「ビジュアルの書式設定」、「ビジュアル」、「Data Colors」、「Minimal Color」に薄い黄色、「Maximum Color」に濃い目の緑を設定します。

ビジュアル間の境界がわかりにくいので、「挿入」、「要素」、「図形」から線を追加します。「図形の書式設定」、「シェイプ」、「スタイル」、「罫線」からカラーを薄い灰色にすると目立たなくていいでしょう。

参考までに、当初はカレンダーではなく、横軸が日付、縦軸が走行距離の棒グラフを表示していました。しかし、距離の長さよりは、周期性(月曜と火曜は5km走ることが多い、水曜と木曜は休みが多い、金土日は10km走ることが多い)を見たかったため、カレンダーに置き換えました。


モバイル用画面の作成

デスクトップ用の画面を作ったので、これを元にモバイル用の画面を作ります。画面左下の「モバイルレイアウトビュー」を開きます。

ビジュアルの配置を考えた時に、空のビジュアルを仮置きしていたので大まかなデザインは出来上がっていますが、スライサーが「2023年12月」しか表示されていなかったり、カレンダーで文字がはみ出していたり、目標までの距離が表示されていなかったり、いくつか手直ししないといけません。

なお、モバイルレイアウトビューで行った変更はデスクトップのレイアウトには影響しません。スマホの画面でも操作しやすいように修正しましょう。

編集前のモバイル用の画面

まず、タイトルを「1か月間のまとめ」に変えて、フォントサイズを調整し、太字にします。次に、スライサーのスタイルを「パネル」から「ドロップダウン」に変更します。

左:タイトルとスライサーを修正した画面 / 右:スライサーをクリックしたときの画面

次に、ゲージの隣に補足のテキストを配置します。

その次に、カードの数値とラベルのフォントが大きすぎるので小さくします。カードの上下の余白が気になるので、カードの高さを少し減らします。

左:カードの数字とラベルのフォントを調整した画面 / 右:カードの高さを調整した画面

最後に、カレンダーのフォントを調整して、区切り線を2本配置します。

左:カレンダーのフォントを調整した画面 / 右:区切り線を2本置いた画面

ダッシュボードが完成したので、「ホーム」、「共有」、「発行」から発行します。Power BIのアプリから画面を確認します。

左:スライサーで「2024年5月」を選んだ画面 / 右:スライサーで「2024年6月」を選んだ画面

デザインはもっとよくできそうですが、一旦これで完成とします。


次回予告

ダッシュボードの作成が完了したので、次回は動作テストを行います。また、1か月単位でデータを見られるダッシュボードだけでなく、全期間の集計データを見られるダッシュボードも作ります。

最終回はこちらからどうぞ!



ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!

分析屋ではBIを使ったデータ可視化に関するサービスサイトもございます。Power BIに関するお困りごとがございましたらお気軽にお問い合わせください。

株式会社分析屋について

弊社が作成を行いました分析レポートを、鎌倉市観光協会様HPに掲載いただきました。

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!

【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。

【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。

【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。

【SES】
SESサービスも行っております。



この記事が参加している募集