シニア テクニカル アーキテクト
清水 優吾(しみず ゆうご) / 株式会社セカンドファクトリー
@yugoes1021
yugoes1021 Microsoft MVP
for Data Platform - Power BI
(2017.02 -)
情報の伝え方が変わる!
Power BI でレポートを作ってみよう(前半戦)
~東京都 新型コロナウイルス陽性患者発表詳細~
2020-07-15
行政職員向けICT体験型セミナー #03
2020.07.15 行政職員向けICT体験型セミナー 1
https://www.slideshare.net/yugoes1021
自己紹介:
清水 優吾 (Yugo Shimizu)
株式会社セカンドファクトリー
CTO, シニア テクニカル アーキテクト
UX を看板に掲げて、飲食業を営んでいる IT 企業に勤めている会社員で
Data Platform をメインに活動をしている Technical Architect
専門・興味:
Data Platform (Azure),
Power Platform (Power Apps, Power Automate, Power BI, Power Virtual Agents)
Qiita: https://qiita.com/yugoes1021
Power BI 勉強会: https://powerbi.connpass.com (次回: 7月18日)
Japan Power BI User Group: https://www.facebook.com/groups/JapanPBUG/
Japan Power Virtual Agents User Group: https://www.facebook.com/groups/JPVAUG/
Japan Power Platform User Group: https://power.users.community/
Japan Power of Humans Community: https://jpohc.connpass.com/ (次回: 7月30日)
Microsoft MVP
for Data Platform -
Power BI
(2017.02 - )
MVP
プロフィールページ
Twitter: @yugoes1021
Facebook: yugoes10212020.07.15 行政職員向けICT体験型セミナー 2
BI とは
2020.07.15 行政職員向けICT体験型セミナー 3
What is BI?
データベース
ダッシュボード
レポート
会議で JUDGE現場へ GO
Business Intelligence
現場で DO
意
思
決
定
の
た
め
に
通常業務により自然と溜まるデータ
どこでも SEE
現場で DO
データベース
ダッシュボード
レポート
Business Intelligence
現場で DO
通常業務により自然と溜まるデータ
どこでも SEE
現場で DO
データベース
ダッシュボード
レポート
会議で JUDGE現場へ GO
Business Intelligence
現場で DO
意
思
決
定
の
た
め
に
通常業務により自然と溜まるデータ
どこでも SEE
Artificial
Intelligence
Power BI
2020.07.15 行政職員向けICT体験型セミナー 7
Power BI service
On-premises data sources
Power BI dataflows
Power BI Desktop
ADLS Gen2
Power BI datasets
Power BI Reports Paginated Reports
Power BI Report Builder
AI / ML
Power BI
Admin
On-premises
data gateway
Cloud
data sources
9
レ
ポ
ー
テ
ィ
ン
グ
モ
デ
リ
ン
グ
1.データソース接続
2.データ取得 (Extract)
3.変換、整形 (Transform)
4.モデルへの読み込み (Load)
5.リレーションの設定
6.レポート作成
7.ダッシュボード作成
8.レポート、ダッシュボードの共有
9.通知設定
Power BI のレポートを作成するまでに必要な手順
7 ~ 9はオプションです
2020.07.15 行政職員向けICT体験型セミナー
今日のハンズオン
東京都オープンデータカタログ
東京都 新型コロナウイルス陽性患者発表詳細
https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068
これが今日のデータソースです
データソース URL:
https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
これを使って、皆さんには Power BI Report を作成していただきます。
2020.07.15 行政職員向けICT体験型セミナー 10
今日のハンズオン
私が作成した完成形は既に公開済みです ⇒ https://bit.ly/PBI-Tokyo-Covid19
(2020.07.11 の画像)
今日のハンズオン
必要な手順
1. データソース接続
2. データ取得 (Extract)
3. 変換・整形 (Transform)
4. データ読み込み (Load)
5. リレーションの設定
6. 新しい列、メジャーの作成
7. レポート作成
2020.07.15 行政職員向けICT体験型セミナー 12
今日のハンズオン
始める前に Power BI Desktop のおすすめの設定について(必須ではありません)
[ファイル] – [オプションと設定] – [オプション] をクリック
2020.07.15 行政職員向けICT体験型セミナー 13
今日のハンズオン
始める前に Power BI Desktop のおすすめの設定について(必須ではありません)
[ファイル] – [オプションと設定] – [オプション] をクリック
2020.07.15 行政職員向けICT体験型セミナー 14
1.データソース接続 ~ 2.データ取得
1. Power BI Desktop を起動
2. [データを取得] – [その他] – [Web] – [接続] をクリック
3. URL に https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv を入力して、接続
4. 不要な列を削除
2020.07.15 行政職員向けICT体験型セミナー 15
3.変換・整形 (Transform)
1. クエリ名を「陽性患者詳細」に変更
2. 以下の列について、余計な値を置換する
[患者_居住地]: (空白) ⇒ “不明”, “―” ⇒ “不明”
[退院済フラグ]: null ⇒ “0”
[患者_年代]: “'-” ⇒ “不明”
3. 条件列を追加(右の画面を参照)
4. [退院状況] 列を 文字列 型に変換
5. [退院済みフラグ] 列を削除
6. [No] 列で昇順にソート
2020.07.15 行政職員向けICT体験型セミナー 16
3.変換・整形 (Transform)
年代をマスター化します
1. [陽性患者詳細] を [参照] して、クエリを増やす
2. [患者_年代] を選択して、 [他の列の削除]
3. 重複の削除
4. ソート順
5. [患者_年代] を [年代] にリネーム
6. 条件列を追加 (右の画像を参照)
7. 列を並べ替え
8. [順序] の型を整数に変更
9. [順序] 列を昇順に変更
10. クエリ名を 年代 に変更
2020.07.15 行政職員向けICT体験型セミナー 17
3.変換・整形 (Transform)
性別をマスター化します
1. [陽性患者詳細] を [参照] して、クエリを増やす
2. [患者_性別] を選択して、 [他の列の削除]
3. 重複の削除
4. [患者_性別] を [性別] にリネーム
5. 条件列を追加 (右の画像を参照)
6. 列を並べ替え
7. [順序] の型を整数に変更
8. [順序] 列を昇順に変更
9. クエリ名を 性別 に変更
2020.07.15 行政職員向けICT体験型セミナー 18
4.データ読み込み (Load)
ETL を完了させるため、データを読み込みます
1. [閉じて適用] をクリック
2020.07.15 行政職員向けICT体験型セミナー 19
4.データ読み込み (Load)
カレンダーテーブルを作成します
1. リボンの [モデリング] – [新しいテーブル] をクリッ
クし、左記の DAX を貼り付ける
2020.07.15 行政職員向けICT体験型セミナー 20
カレンダー =
var BaseCalendar = CALENDAR("2020/01/01", TODAY())
RETURN
GENERATE(
BaseCalendar,
var BaseDate = [Date]
var YearNumber = YEAR(BaseDate)
var MonthNumber = MONTH(BaseDate)
var DateNumber = DAY(BaseDate)
var DayNumber = WEEKDAY(BaseDate, 1)
RETURN ROW(
"年番号", YearNumber,
"年", FORMAT(BaseDate, "yyyy年"),
"月番号", MonthNumber,
"月", FORMAT(BaseDate, "mm月"),
"年月番号", FORMAT(BaseDate, "yyyymm"),
"年月", FORMAT(BaseDate, "yyyy年mm月"),
"日番号", DateNumber,
"日", FORMAT(BaseDate, "dd日"),
"曜日番号", DayNumber,
"曜日", SWITCH(DayNumber, 1, "日", 2, "月", 3, "火", 4, "水", 5, "木", 6, "金", 7, "土",""),
"週番号", (YearNumber * 100) + WEEKNUM(BaseDate, 1),
"週", FORMAT(WEEKNUM(BaseDate, 1), "第00週"),
"相対月数", DATEDIFF(TODAY(), BaseDate, MONTH)
)
)
4.データ読み込み (Load)
2020.07.15 行政職員向けICT体験型セミナー 21
5.リレーションの設定
2020.07.15 行政職員向けICT体験型セミナー 22
各テーブル間のリレーションを設定します
1. 画面左の [モデル] ペインをクリック
2. [カレンダー].[Date] をクリックし、[陽性患者詳細].[公表_年月日] へドラッグ&ドロップ
3. [年代].[年代] をクリックし、[陽性患者詳細].[患者_年代] へドラッグ&ドロップ
4. [性別].[性別] をクリックし、[陽性患者詳細].[患者_性別] へドラッグ&ドロップ
6.新しい列、メジャーの作成 の前に…
2020.07.15 行政職員向けICT体験型セミナー 23
[データ] ペインでカレンダー、年代、性別の各テーブルに対する
表示設定、書式設定、列で並べ替えを設定します
1. カレンダー
[Date] の書式設定
各列を [~番号] 列で並べ替え
[~番号] 列を非表示に設定
2. 年代
[年代] 列を [順序] 列で並べ替え
[順序] 列を非表示に設定
3. 性別
[性別] 列を [順序] 列で並べ替え
[順序] 列を非表示に設定
6.新しい列、メジャーの作成
2020.07.15 行政職員向けICT体験型セミナー 24
今回は [新しい列] を作成しません。メジャーのみ作成します。
Power BI ではこれらは DAX (Data Analysis Expression) と呼ばれる関数で記述します
DAX 関数リファレンス:
https://docs.microsoft.com/ja-jp/dax/dax-function-reference
• 新しい列
計算列のこと。行単位の計算をすることが可能
• メジャー
集計値を求める際に使用する。複雑な計算も可能だが、モデリングに依存する。
6.新しい列、メジャーの作成
2020.07.15 行政職員向けICT体験型セミナー 25
作成するメジャーは以下5つ
• 陽性者数
• 陽性者累計
• 陽性者数 7日間移動平均
• 陽性者数 7日間移動平均(前週)
• 7日間移動平均 増加率 対前週比
6.新しい列、メジャーの作成
2020.07.15 行政職員向けICT体験型セミナー 26
[陽性患者詳細] は陽性者1人=1行なので、行数が陽性者数になる
⇒ 対象となるテーブルのデータ単位を把握することは非常に大事!!
-- [DAX-01] --
陽性者数 = COUNTROWS( '陽性患者詳細' )
6.新しい列、メジャーの作成
2020.07.15 行政職員向けICT体験型セミナー 27
ある数値が表現できると、それを時系列で累計にしたくなる。
(ある単位の合計値 + 時系列 ⇒ 累計)
-- [DAX-02] --
陽性者数累計 =
VAR CurrentDateTime = MAX( '陽性患者詳細'[公表_年月日] )
VAR CumulativeValue =
SUMX(
FILTER(
ALL( '陽性患者詳細' ),
'陽性患者詳細'[公表_年月日] <= CurrentDateTime
),
[陽性者数]
)
RETURN CumulativeValue
6.新しい列、メジャーの作成
2020.07.15 行政職員向けICT体験型セミナー 28
今週の7日間移動平均が見たい
今週:7日前~今日
-- [DAX-03] --
陽性者数 7日間移動平均 =
IF(
ISFILTERED('陽性患者詳細'[公表_年月日]),
ERROR("タイム インテリジェンスのクイック メジャーは、Power BI が指定する日付階層またはプライマリの日付列でのみグループ化またはフィ
ルターできます。"),
VAR __LAST_DATE = LASTDATE('陽性患者詳細'[公表_年月日])
RETURN
AVERAGEX(
DATESBETWEEN(
'陽性患者詳細'[公表_年月日],
DATEADD(__LAST_DATE, -7, DAY),
__LAST_DATE
),
CALCULATE([陽性者数])
)
)
6.新しい列、メジャーの作成
2020.07.15 行政職員向けICT体験型セミナー 29
前週の7日間移動平均が見たい
前週:15日前~8日前
-- [DAX-04] --
陽性者数 7日間移動平均(前週) =
IF(
ISFILTERED('陽性患者詳細'[公表_年月日]),
ERROR("タイム インテリジェンスのクイック メジャーは、Power BI が指定する日付階層またはプライマリの日付列でのみグループ化またはフィ
ルターできます。"),
VAR __LAST_DATE = LASTDATE('陽性患者詳細'[公表_年月日])
RETURN
AVERAGEX(
DATESBETWEEN(
'陽性患者詳細'[公表_年月日],
DATEADD(__LAST_DATE, -15, DAY),
DATEADD(__LAST_DATE, -8, DAY)
),
CALCULATE([陽性者数])
)
)
6.新しい列、メジャーの作成
2020.07.15 行政職員向けICT体験型セミナー 30
今週の7日間移動平均と前週の7日間移動平均を比較したい。
前週に比べて、今週は増加傾向にあるのか?あるいは減少傾向にあるのか? その指標が欲し
い
-- [DAX-05] --
7日間移動平均 増加率 対前週比 =
DIVIDE([陽性者数 7日間移動平均], [陽性者数 7日間移動平均(前週)], 0)
7.レポート作成
2020.07.15 行政職員向けICT体験型セミナー 31
これで必要な値は揃ったので、あとは表やグラフを作成していくビジュアライズです
今日はとりあえず
赤枠のみ作成してみましょう
7.レポート作成 (おまけ)
2020.07.15 行政職員向けICT体験型セミナー 32
これで必要な値は揃ったので、あとは表やグラフを作成していくビジュアライズです
なんでこれ赤いの…?
データラベルに条件付き書式
を設定しているからです
青: 0D6ABF
黄: FFB300
赤: FF0006
(付録)今日使った DAX 関数
2020.07.15 行政職員向けICT体験型セミナー 33
CALENDAR
https://docs.microsoft.com/ja-jp/dax/calendar-function-dax
GENERATE
https://docs.microsoft.com/ja-jp/dax/generate-function-dax
ROW
https://docs.microsoft.com/ja-jp/dax/row-function-dax
FORMAT
https://docs.microsoft.com/ja-jp/dax/format-function-dax
SWITCH
https://docs.microsoft.com/ja-jp/dax/switch-function-dax
DATEDIFF
https://docs.microsoft.com/ja-jp/dax/datediff-function-dax
COUNTROWS
https://docs.microsoft.com/ja-jp/dax/countrows-function-dax
MAX
https://docs.microsoft.com/ja-jp/dax/max-function-dax
SUMX
https://docs.microsoft.com/ja-jp/dax/sumx-function-dax
(付録)今日使った DAX 関数
2020.07.15 行政職員向けICT体験型セミナー 34
FILTER
https://docs.microsoft.com/ja-jp/dax/filter-function-dax
ALL
https://docs.microsoft.com/ja-jp/dax/all-function-dax
ISFILTERED
https://docs.microsoft.com/ja-jp/dax/isfiltered-function-dax
ERROR
https://docs.microsoft.com/ja-jp/dax/error-function
AVERAGEX
https://docs.microsoft.com/ja-jp/dax/averagex-function-dax
DATESBETWEEN
https://docs.microsoft.com/ja-jp/dax/datesbetween-function-dax
DATEADD
https://docs.microsoft.com/ja-jp/dax/dateadd-function-dax
CALCULATE
https://docs.microsoft.com/ja-jp/dax/calculate-function-dax
DIVIDE
https://docs.microsoft.com/ja-jp/dax/divide-function-dax
まとめ
2020.07.15 行政職員向けICT体験型セミナー 35
いかがでしたでしょう?うまくできましたか?
今日ハンズオンでご紹介したのは、 Power BI でレポートを作成する方法のほんの一部です。
が、基本は今日のようにデータを取得して、ビジュアライズをしていく。ビジュアライズに
必要なデータが不足していることに気が付いたら、データを取得するところに立ち戻って、
再度作業をする。
この繰り返しです。
最初からすべて必要なものを手に入れて、作るべきメジャーも定義して…なんて、不可能で
す。
繰り返し、繰り返し、考えて、考えて、考え抜いて、できあがります。
できたと思っても、「あ、あれを追加しよう!こういう表現の方がわかりやすいかも!」と
思ったら、ひたすらに試す。永遠のベータ版でよいのです。
まとめ
2020.07.15 行政職員向けICT体験型セミナー 36
ですので、現場の方が自分で作れると、どれだけ強いか、お分かりですね。
これを外注するのは、非常に効率が悪いと、私は思います。
本当の意味での DX (Digital Transformation)
ぜひ、考え抜いてみてください。
次回 7/29 は今日作成したレポートを使って、より詳細に解説していくことを予定しています。
ぜひ次回までに、私が https://bit.ly/PBI-Tokyo-Covid19 で公開しているレポートを見て、近づ
けてみてください。 今日説明していない機能も使用していますが、Excel や PowerPoint と
同様で、触ってるうちにできるようになるのもまた事実です。
ぜひトライしてみください。
まとめ (宣伝)
2020.07.15 行政職員向けICT体験型セミナー 37
https://powerbi.connpass.com/event/180122/
まとめ
2020.07.15 行政職員向けICT体験型セミナー 38
本日はご参加、ありがとうございまし
た!

情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)