松本美穂と松本崇博が執筆した Power BI 自習書シリーズの「Power BI を試しみよう」(改訂第2版)の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。なお、記載している内容は、2017年 3月に提供されていた powerbi.com のサービスおよび Power BI Desktop をもとにしています。[2018年12月29日]
Power BI Desktop には、データ モデルを操作可能な[モデリング]タブおよび[データ ツール]があります。前の項では、[モデリング]タブを利用して、[新しい列]の追加を行って、次のように DAX 式(単価と数量を乗算した売上金額の計算)を記述していました。
DAX(Data Analysis Expressions)は、Excel における「式(fx)」と似たような機能で、Power BI の以前のバージョンで提供されていた「PowerPivot」(Excel のアドイン ツール)に搭載されていたものです。DAX は、Excel 2016 の PowerPivot や SQL Server Analysis Services(SSAS)の Tabular Mode でも全く同じよう利用できます。
DAX 式は、上の画面のように[モデリング]タブを開いて、[新しい列]や[新しいメジャー]、[新しいテーブル](メジャーやテーブルについては後述)をクリックすることで記述していくことができます。DirectQuery ではなく、「インポート」を利用して、SQL Server からデータを取得している場合には、[データ ツール]を利用して、DAX 式の計算結果を確認することもできます。
DAX と同じようなこと(列同士の乗算や文字列連結、日付データの部分抽出など)は、前掲の M 言語を利用しても実現することができますが、両者の大きな違いは、DAX では、「メジャー」と呼ばれる計算式を定義できる点です。
メジャーは、合計(SUM)や平均(AVG)、最大値(MAX)、最小値(MIN)、カウント(COUNT)、一意の値のカウント(DISTINCT COUNT)などです。さらには、DAX の組み込み関数(CALCULATE や DATEADD、CALENDAR、SAMEPERIODLASTYEAR など)を利用することで、構成比率の計算や、日付ディメンションの作成、前年比/前年金額、累積金額の計算などをしていくこともできます。
ここまでの手順で説明してきたグラフは、自動的に「合計」が計算されているものを利用してきました。このように、合計が自動計算されるものは、(内部的には)暗黙的なメジャーが利用されています。これを確認してみましょう。
1.ここでは、前の Step と同様、SQL Server からの接続で利用した NorthwindJ データベースから取得したデータで試してみます。
まずは、次のように[視覚化]ペインで[マトリックス]をクリックして、グラフをマトリックス(クロス集計表)に変更します。
[フィールド]ペインからは、[商品区分]テーブルの[区分名]列を[行]、[受注明細]テーブルの[売上金額]列を[値]に配置します。この「売上金額」列は、前の Step で作成したもので、DAX 式で「売上金額 = [単価] * [数量]」と記述していたものです。
2.マトリックスは、次のように[書式]タブを開くことで、文字の大きさや色などを変更して、見栄えを良くすることができます。
3.次に、[フィールド]タブに戻って、[値]に配置した[売上金額]の計算方法を確認してみます。
計算方法を確認するには、[売上金額]の[▼]ボタンをクリックします。表示されたメニューには、合計や平均、最小値、最大値、カウントなどが一覧されて、[合計]にチェックマークが付いていることを確認できます。これによって、自動的に合計が計算されています。
したがって、このメニューから平均(AVG)や最小値(MIN)、最大値(MAX)、カウント(一意の値のみ)(DISTINCT COUNT)、カウント(COUNT)を選択することで、別の計算方法に変更することができます。
4.次に、[値]に[売上金額]をもう1つ配置して、これの計算方法には[平均]を選択してみましょう。
平均に変更すると、「魚介類」区分は「30,700.5236」円、「飲料」区分は「12,312.8109」円のように平均が表示されていることを確認できます。
1.次に、DAX を利用して、メジャーを作成して、売上金額の平均を取得してみましょう。これを行うには、まず[モデリング]タブをクリックします。
[モデリング]タブを開いたら、[フィールド]ペインで[受注明細]テーブルを選択します。
2.次に、[新しいメジャー]ボタンをクリックします。
これで、DAX 式が入力できるようになるので、平均を計算することができる AVERAGE 関数を利用するために、「AV」と入力します。これで、インテリセンス(入力補完)機能が働いて、AVERAGE 関数が選択候補に表示されるので、これを選択して、Tab キーを押下します。
3.次に、どの列を対象とするのか、テーブルと列の一覧が、「'テーブル名'[列名]」形式で表示されます。
ここでは、「'受注明細'[売上金額]」を選択します。DAX 式では、テーブル名は「'」(単一引用符)で囲んで、列名は [ ] で囲む決まりがあります。なお、DAX 式では「RELATED」という関数を利用すれば、(リレーションシップのある)別のテーブルの列を指定することもできます。
4.最後に「)」を入力して、引数を閉じれば、メジャーの作成が完了です。
5.メジャーの名前を変更するには、次のように「メジャー =」の部分を変更したい名前に置き換えます。
6.次に、作成したメジャーをマトリックスの[値]に配置します。
1つ前の手順で配置した「売上金額 の平均」と、作成したメジャーが同じ値になっていることを確認できます。
このように、メジャーを作成することで、メジャーを配置するだけで、指定した計算方法(今回は AVERAGE を利用)でグラフやマトリックスを作成していけるようになるので便利です(暗黙的なメジャーの場合だと、既定で「合計」の計算になってしまうので、他の計算方法に変更するには、1ステップ余計な手順が増えてしまいます)。
また、暗黙的なメジャーの場合は、マトリックスなどに配置した列の名前を変更できないので、前の手順で配置した「売上金額 の平均」という名前は変更できません。これに対して、メジャーを事前定義したものであれば、任意の名前を設定することができます。
7.作成したメジャーは、[モデリング]タブで書式を変更することもできます。例えば、小数点以下の桁数を 1桁にする場合は、次のように設定します。
DAX では、構成比率を計算することもできます。ここでは、各商品区分の構成比率(各商品の受注金額が全体の何%なのか)を計算する例で説明します。
1.構成比率は、各商品区分の受注金額を「全体合計」で割り算すれば良いので、次のように DAX 式を記述します。
「SUM('受注明細'[売上金額])」で商品区分ごとの売上金額の合計を計算して、「/」で割り算を行っています。分母の CALCULATE という関数では、第2引数に「ALL('商品区分'[区分名])」と指定することで、全体合計(商品区分全部の合計)を計算することができます。
2.次に、作成したメジャーをマトリックスの[値]に配置します。
3.作成した「構成比率」メジャーは、「0.20」や「0.17」のような形で 10進数形式の結果になるので、次のように[書式]を[パーセンテージ]に変更しておくことで、「19.66%」や「16.60%」のように表示できるようになります。
これで、構成比率(各商品の受注金額が全体の何%なのか)が分かりやすくなったと思います。
上の手順では、構成比率を DAX 式で記述しましたが、比率に関しては、「簡単な計算」機能を利用することでも計算できます。
これを利用するには、次のようにマトリックスの[値]に配置した列(売上金額)に対して、[▼]ボタンをクリックして、[簡単な計算]をクリックします。
[簡単な計算]をクリックすると、[簡単な計算]ダイアログが表示されるので、[値の表示方法]で[列 集計に対する比率]を選択します。
構成比率が表示されることを確認できます(前の手順で配置した DAX 式で作成した構成比率メジャーと同じ値が表示されることを確認できます)。このように、[簡単な計算]機能を利用すると、比率を簡単に追加できるので便利なのですが、マトリックスなどに表示される名前が「売上金額の 列合計のパーセント」のようになって、これを変更できないのがデメリットです(今後の Power BI のバージョンアップ版では変更できるようになると思います)。したがって、表示される名前を自由に設定したい場合には、前掲の DAX 式で比率を計算(事前定義)するようにします。
マトリックスでは、Excel でお馴染みの「条件付き書式」機能を利用して、色分けすることができます。これを行うには、[値]に配置した列の[▼]ボタンをクリックして、[条件付き書式]をクリックします。
第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 へ参加