SQL Server のことなら SQL Quality SQL Server パフォーマンス チューニング、コンサルティング、アドバイス、相談、定期診断、トレーニング

ホーム > 技術情報 > Power BI 自習書 No.1 無料で利用できる Power BI を試しみよう

Microsoft Power BI 自習書シリーズ (HTML 版)
「No.1 無料で利用できる Power BI を試しみよう」

松本美穂と松本崇博が執筆した Power BI 自習書シリーズの「No.1 無料で利用できる Power BI を試しみよう」の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。[2015年12月29日]

目次へ | 前のページへ | 次のページへ

6.7 複数の Webページにまたがったデータの取得

Power BI Desktop では、複数の Web ページにまたがったデータでも、簡単に取得することができます(Formula Language を利用して、簡単に取得できます)。

ここでは、次のように ESPN サイトで閲覧可能な MLB(メジャー リーグ)の 2014年投手成績(Pitching Stats)を取得する場合を例に試してみましょう。

http://espn.go.com/mlb/stats/pitching/_/year/2014/order/false

00467

このページは、全部で 3ページ分あり(88件の選手データで、40件ずつページが分かれている)、次のように[NEXT]リンクをクリックすることで、次のページを参照できるようになっています。

00468

このように複数の Webページにまたがったデータであっても、Formula Language を利用することで、簡単に取得することができます。

◆ Let's Try ~複数の Webページのデータの取得~

それでは、これを試してみましょう。

1.まずは、Power BI Desktop を起動して、起動画面で、次のように[データを取得]から[その他]の[Web]をクリックします。

00469

2.Web から]ダイアログでは、前掲の Web ページ(ESPN の MLB ページ)のうち、2ページ目の URL を入力して、[OK]ボタンをクリックします。

2ページ目の URL(メジャー リーガーの 2014年の投手成績)
http://espn.go.com/mlb/stats/pitching/_/year/2014/count/41/qualified/true/order/false

00470

複数の Webページにまたがったデータの場合は、最初のページだと、ページ移動に関するデータが URL に含まれていないことが多いので、このように、2ページ目以降を利用するのがお勧めです。上の URL には、「41」という部分がありますが、これは 41件目以降のデータ(2ページ目)を取得するためのキーワードになっています。3ページ目を見る場合は、「81」というキーワードに変わり、「1」を指定すれば、1ページ目(1件目から)を取得することができる URL になっています。

3.Web への接続が成功すると、次のように[ナビゲーター]ダイアログが表示されるので、「Table 0」をチェックします。

00471

2ページ目のデータ(41件目の岩隈選手以降のデータ)が表示されることを確認して、[編集]ボタンをクリックします(クエリ エディターを開きます)。

4.クエリ エディターでは、取得したデータ(2ページ目のデータ)が表示されることを確認できます。

00472

5.次に、先頭にある不要なデータを削除するために、次のようにグリッドの左上のセルをクリックして、[上位の行の削除]をクリックします。

00473

上位の行の削除]ダイアログが表示されたら、[行数]で「1」と入力して、[OK]ボタンをクリックします。これで、1行目のデータ(先頭のデータ)を削除することができます

6.次に、新しい先頭行(元の2行目)を見出しに設定するために、グリッドの左上のセルをクリックして、[先頭の行を見出しとして使用]をクリックします。

00474

7.次に、余分なデータを削除するために、[PLAYER]列(選手名)の[▼]ボタンをクリックして、不要なデータのチェックを外します。

00475

この Web ページのデータには、10件ごとに、ヘッダー(PLAYER GPGS など)が挿入されているので、それを削除するために、上のように「PLAYER」のチェックを外して、[OK]ボタンをクリックします。

◆ 入力パラメーター付きの関数に変更

次に、この Webページを取得する「クエリ」を、入力パラメーター(引数)付きの「関数」に変更して、任意のページ(引数に 1 を指定すれば 1ページ目41 を指定すれば 2ページ目81 を指定すれば 3ページ目)が取得できるようにします。

1.関数を作成するには、[ホーム]タブを開いて、[詳細エディター]をクリックします。

00476

2.詳細エディターが表示されたら、先頭に「(PageNum) =>」と入力します。

00477

このように、「(引数名) =>」を先頭に付けることで、入力パラメーター付きの関数に変更することができます。今回、引数名は PageNum にしていますが、任意の名前を設定することができます。

3.次に、「Web.Page.Contents」メソッドがある行を探します。

00478

Web.Page.Contents」メソッドは、任意の Webページからデータを取得するためのメソッドで、引数に URL を指定して利用します。この URL には、ESPN サイトの 2ページ目を取得するための URL(41 が埋め込まれたもの)が指定されているので、上のように PageNum 引数を利用するように変更します。

Formula Language では、文字列二重引用符で囲み、文字列連結は「&」、数値データの文字列変換は「Number.ToText(数値)」で行えるので、「"http://~/41/~"」という URL を「"http://~/" & Number.ToText(PageNum) & "/~」に変更します。

変更後、[完了]ボタンをクリックします。

4.クエリ エディターに戻ると、関数に変更されて、[呼び出し]ボタンが表示されるようになっていることを確認できます。

00479

このように、Formula Language では、関数の場合は、[呼び出し]ボタンで、関数を実行できるようになっています。関数の名前は、クエリの名前と同様、上のように[プロパティ]の[名前]で変更します。ここでは「GetPage」という名前に変更しておきます。

もし、[呼び出し]ボタンが表示されない場合は、構文エラーなどがある場合で、次のようにエラー メッセージが表示されるので、詳細エディターを開いて、二重引用符& の場所が間違っていないかなどを確認してみてください。

00480

5.次に、[呼び出し]ボタンをクリックして、関数を実行してみます。

00481

パラメーターの入力]ダイアログが表示されたら、[PageNum]に「81」を入力して、[OK]ボタンをクリックします。これで、3ページ目(81件目以降のデータ)のデータを取得できたことを確認できます。

6.確認ができたら、関数を実行した」という操作を元に戻すために、次のように[呼び出された関数GetPage]の[×]をクリックします。

00482

×]をクリックすれば、[呼び出し]ボタンが復活する(関数に戻る)ので、以降の操作を行う前に、必ずこの状態に戻しておいてください(∵もし、戻さない場合は、関数としては認識されず、関数を実行した結果=クエリと認識されてしまいます)。

◆ 3ページ分をまとめて取得するためのテーブルの作成(リストの作成など)

次に、作成した GetPage 関数に対して、「1、41、81」(複数の引数)を与えて、3ページ分をまとめて取得するためのテーブルを作成します。

1.複数の引数を作成するには、別途クエリ(テーブル)を作成するのが一番簡単です。これを行うには、次のように[ホーム]タブで[新しいソース]の[空のクエリ]をクリックします。

00483

2.次に、[](fx)ボックスに「= {1..3}」と入力します。

00484

このように、「{初期値..終了値}」と入力することで、指定した値の数だけのリスト(テーブルではなく、単純な 1列分データ)を作成することができます。今回は、与える引数が 3つなので、1から 3 のデータ(リスト)を生成しました。

なお、このような「」も内部的には Formula Language で、詳細エディターを開いて、次のように生成されていることを確認することもできます。

00485

3.次に、リストをテーブルに変換します。テーブルに変換するには、[List]を右クリックして、[テーブルへの変換]をクリックします。

00486

テーブルへの変換]ダイアログが表示されたら、[OK]ボタンをクリックします。これで、テーブルへの変換が完了です。

4.テーブルに変換すると、列の追加を行えるようになるので、次のように[列の追加]タブを開いて、[インデックス列の追加]で[カスタム]をクリックします。

00487

カスタムをクリックした場合は、任意の初期値(開始インデックス)と増分を指定できるようになるので、上のように[開始インデックス]に「1」、[増分]に「40」と入力して、40ずつデータが増えるようにします。これで、「1、41、81」という関数の引数に与える値を作成することができます。

5.次に、作成した引数「1、41、81」を利用して、関数(GetPage)を呼び出していきます。これを行うには、[列の追加]タブで[カスタム列の追加]をクリックします。

00488

カスタム列は、任意の Formula Language を記述できる「」のことで、ここで「GetPage(」と入力することで、GetPage 関数を呼び出せるようになります。

6.次に、[使用できる列]から[インデックス]列をダブル クリックします。これで、「GetPage([インデックス]」という形で、関数の引数に[インデックス]列を与えられるようになるので、最後に「)」を追加して、引数のカッコを閉じます。

00489

インデックス]列には、「1、41、81」というデータが格納されているので、この値を使って GetPage 関数を呼び出せるようになり、[OK]ボタンをクリックすると、関数が実行されて、「Custom」という列が追加されて、ここに結果(関数の実行結果)が格納されています。

7.関数の実行結果は、「Table」形式で、この場合は[←→]ボタンが表示されて、「」に展開することができます。

00490

Table の持っている列の一覧(RK PLAYER など)が表示されたら、[元の列名をプレフィックスとして使用します]のチェックを外して、[OK]ボタンをクリックします。

8.これで、1~3ページ目までのデータ(全部で 88人分のメジャー リーガーの投手成績)を取得できるようになります。

00491

9.次に、[SO](Strike Out:奪三振)や「BB」(Base on Balls:与四球)列などは「整数」データ型、「IP」(Innings Pitched:投球回数)や「ERA」(Earned Runs:防御率)、「WHIP」などは「10進数」データ型に変換します。

00492

10.以上で、クエリ エディターでの設定は完了です。完了後、[ホーム]タブを開いて[閉じて適用]をクリックして、レポート デザイナーに移動します。

00493

◆ レポートを作成してみよう(2014年の MLB メジャーリーガーの投手成績)

1.まずは、[フィールド]ペインから[PLAYER](選手名)と[TEAM](球団名)、[ERA](防御率)をチェックして、表形式で表示します。

00494

この表は、列名をダブル クリックすると並べ替えを行うことができるので、[ERA]列をダブル クリックして、防御率の良い順に並べ替えてみます(1回のダブル クリックで降順、2回目で昇順に並べ替えられるので、昇順になるようにしてみてください)。1位は LAD(ドジャース)の Kershaw(カーショー)選手、2位は SEA(マリナーズ)のキングこと Hernandez(ヘルナンデス)選手であることが分かり、Web 上で確認したデータ(1ページ目のランキング)と同じであることを確認できます。

2.次に、[WHIP]や[IP](投球回数)、[SO](奪三振)、[BB](与四球)を追加します。

00495

WHIP(Walks and Hits Per Innings Pitched)は、投球回あたり与四球・被安打数の合計で、ピッチャーの凄さ、優秀さを表す数値として良く利用されている指標です。この WHIP の良い順に並べ替えると、岩隈投手が 7位、黒田投手が 23位にランクインしていることが分かります(もちろん、こういった WHIP での並べ替えは、Webページ上でも行うことができますが、手元に持ってきたデータで、自由に自分の見たい角度で分析をしていけるというのが、Power BI の強みです)。

3.次に、BB(与四球)の少ない順に並べ替えてみます。

00496

投球回数(IP)の問題もありますが、岩隈投手は、2位にランクインして、与四球が少ないことを確認できます。

Note: ランキングを表示するには ~DAX~
Power BI では、後述の DAX 式を利用すれば、ランキング値を表示することも簡単に行えます。例えば、次のような DAX 式を作成しておけば、BB(与四球)の少ない順にランキングを作成しておくことができます。
BB_rank RANKX(ALL('クエリ1'), CALCULATE(SUM('クエリ1'[BB])), , ASC)
00497
DAX では、RANKX という関数を利用して、任意の列に対して、ランキングを生成することができます。

4.次に、こちらもピッチャーの優秀さ(特に制球力)を表す指標として良く利用される「K/BB」(奪三振と与四球の比率で、奪三振数を与四球数で除算したもの)を計算してみましょう。奪三振は「SO」列、与四球は「BB」列にあり、これを除算するだけですが、こうした計算は、クエリ エディター(Formula Language)でも行えますが、ここでは後述の DAX 式を利用して、計算してみます。DAX 式を利用するには、次のように[データ]をクリックして、[データ ツール]を開きます。

00498

データ ツールでは、[新しい列]をクリックして、式ボックスに「KBB= [SO] / [BB]」と入力して、奪三振数を与四球数で除算したものを取得します。DAX 式では、列名を [ ] で囲む決まりがあるので、このように記述しています。

5.DAX 式を作成したら、レポートに[KBB]列を追加して、この列で並べ替えてみます。

00499

岩隈投手は、与四球が少なくて、奪三振数も多いので、(メジャー全体で)3位にランクインしています。なお、ESPN サイトでは、次のように「Expanded II」をクリックすると、[K/BB]を確認することもできます(Power BI で別途取得して、MERGE することもできます)。

00500

6.次に、レポートの何もない領域をクリックして、[フィールド]ペインから[TEAM]をチェックして、[視覚化]ペインで[スライサー]に変更して、TEAM(球団名)でデータの絞り込みが行えるようにしてみましょう。

00501

このように、Power BI では、スライサーでデータの絞り込みを行うことも簡単にできるので、Web ページ上のデータを利用して、より自分に合った、自分流にカスタマイズした分析を簡単に行っていくことができます(見栄えの良いグラフも作成していけます)。

◆ Formula Language の参考情報

以上のように、Formula Language を利用すれば、複数の Webページからデータを取得することも簡単に行えます。Formula Language を利用すれば、さまざまなデータの取得やデータ加工を自動化/プログラミングしていくことができるので、ぜひ活用してみてください。Formula Language 詳細については、以下の Power Query のヘルプ ページが参考になると思います。
http://msdn.microsoft.com/library/Mt253322

00502

目次へ | 前のページへ | 次のページへ

事例1

SQLQualityは執筆とセミナーを通じて技術の啓蒙やエンジニアの育成支援も行っています
最新刊
SQL Server 2016 の教科書
SQL Server 2016 の教科書(ソシム)

弊社オリジナル制作の
SQL Server 2016 自習書も
マイクロソフトのサイトで公開中!
ダウンロードはこちら
セミナー風景
セミナー風景

ロングセラー
ASP.NET でいってみよう  SQL Server 2000 でいってみよう
ASP.NET でいってみよう
第7刷 16,500 部発行
SQL Server 2000 でいってみよう
第12刷 28,500 部発行
SQL Server 2014 CTP2 インメモリ OLTP 機能の概要
SQL Server 2014 CTP2 インメモリ OLTP 機能の概要(Amazon Kindle 書籍)

弊社執筆の
SQL Server 2014 自習書
マイクロソフトのサイトで公開中
目次はこちら

弊社執筆の
SQL Server 2012 自習書
マイクロソフトのサイトで公開中
ダウンロードはこちら
松本美穂のコラム
(公開活動などのお知らせ)

第60回:SQL Server 2017 自習書 No.3「SQL Server 2017 Machine Learning Services」のご案内
第59回:SQL Server 2017 自習書 No.2「SQL Server 2017 on Linux」のご案内
第58回:SQL Server 2017 自習書 No.1「SQL Server 2017 新機能の概要」のご案内
第57回:SQL Server 2017 RC 版とこれまでのドキュメントのまとめ
第56回:「SQL Server 2016 への移行とアップグレードの実践」完成&公開!
第55回:書籍「SQL Server 2016の教科書 開発編」(ソシム)が発刊されました
第54回:「SQL Server 2016 プレビュー版 Reporting Services の新機能」自習書のお知らせ
第 53 回:SQL Server 2016 Reporting Services の新しくなったレポート マネージャーとモバイル レポート機能
第 52 回:SQL Server 2016 の自習書を作成しました!
第 51 回:PASS Summit と MVP Summit で進化を確信!
第 50 回:新しくなった Power BI(2.0)の自習書を作成しました!
第49 回:Excel 2016 の Power Query を使う
第 48 回:新しくなった Microsoft Power BI ! 無料版がある!!
第 47 回:「Microsoft Azure SQL Database 入門」 完成&公開!
第 46 回:Microsoft Power BI for Windows app からの Power BI サイト アクセス
第 45 回:Power Query で取得したデータを PowerPivot へ読み込む方法と PowerPivot for Excel 自習書のご紹介
第44回:「SQL Server 2014 への移行とアップグレードの実践」ドキュメントを作成しました
第43回:SQL Server 2014 インメモリ OLTP 機能の上級者向けドキュメントを作成しました
第42回:Power Query プレビュー版 と Power BI for Office 365 へのクエリ保存(共有クエリ)
第41回:「SQL Server 2014 CTP2 インメモリ OLTP 機能の概要」自習書のお知らせです
第40回: SQL Server 2012 自習書(HTML版)を掲載しました
第39回: Power BI for Office 365 プレビュー版は試されましたか?
第38回: SQL Server 2014 CTP2 の公開
第37回: SQL Server 2014 CTP1 の自習書をご覧ください
第36回: SQL Server 2014 CTP1 のクラスター化列ストア インデックスを試す
第35回: SQL Server 2014 CTP1 のインメモリ OLTP の基本操作を試す
第34回: GeoFlow for Excel 2013 のプレビュー版を試す
第33回: iPad と iPhone からの SQL Server 2012 Reporting Servicesのレポート閲覧
第32回: PASS Summit 2012 参加レポート
第31回: SQL Server 2012 Reporting Services 自習書のお知らせ
第30回: SQL Server 2012(RTM 版)の新機能 自習書をご覧ください
第29回: 書籍「SQL Server 2012の教科書 開発編」のお知らせ
第26回: SQL Server 2012 の Power View 機能のご紹介
第25回: SQL Server 2012 の Data Quality Services
第24回: SQL Server 2012 自習書のご案内と初セミナー報告
第23回: Denali CTP1 が公開されました
第22回 チューニングに王道あらず
第21回 Microsoft TechEd 2010 終了しました
第20回 Microsoft TechEd Japan 2010 今年も登壇します
第19回 SQL Server 2008 R2 RTM の 日本語版が公開されました
第18回 「SQL Azure 入門」自習書のご案内
第17回 SQL Server 2008 自習書の追加ドキュメントのお知らせ
第16回 SQL Server 2008 R2 自習書とプレビュー セミナーのお知らせ
第15回 SQL Server 2008 R2 Reporting Services と新刊のお知らせ
第14回 TechEd 2009 のご報告と SQL Server 2008 R2 について
第13回 SQL Server 2008 R2 の CTP 版が公開されました
第12回 MVP Summit 2009 in Seattle へ参加

技術コミュニティでも活動中