SQLShack

Microsoft Power BIは、データのフィルター、管理、可視化に使用できるM言語とDAX(データ分析式)の2種類の言語をサポートしています。

Mはクエリー式言語として考えられ、Power BIモデルにロードする前にデータを準備するためにPower BI Query Editorで使用することが可能です。

一方、DAX は分析的なデータ計算言語であり、データビューの段階で詳細なデータ分析に使用できる。

M と DAX は互いに依存せず、まったく異なる構造と論理に従い、異なる基本コードを持っている。 DAXは主にデータビューモデルで使用されるのに対し、M言語はクエリエディタで使用されるため、MとDAXを同時に使用することはできません。

このブログ記事では、Power BIにおけるMとDAXの違いを、例を用いて紹介します。 DAXの簡単な紹介はこちらの記事をご覧ください。

データセットのインポート

このセクションでは、M言語およびDAXクエリーを実行するために使用するダミーデータセットをインポートします。

新しいダイアログが Power BI で開いているすべてのデータ リンクを一覧表示します。

検索セクションに「web」を挿入すると、まもなく「web」データ オプションが表示され、「すべてのデータ ソース」オプションにもアイコンが表示されます。 Web “オプションを選択し、下部の「接続」をクリックします。

下のスクリーンショットにあるようなダイアログウィンドウが表示されます。 以下の URL を URL というフィールドに挿入する必要があります:

https://raw.githubusercontent.com/treselle-systems/customer_churn_analysis/master/WA_Fn-UseC_-Telco-Customer-Churn.csv

これが完了したら、「OK」をクリックして確認します。 このデータ ファイルは、通信事業者の顧客解約に関するデータセットの詳細を示しています。 ファイルのサイズによっては、リモート サイトからデータをダウンロードするのに時間がかかる場合があります。

データがダウンロードされたら、2 つのオプションがあります。 M言語はクエリエディタで動作するので、次のスクリーンショットに示すように、まず「Transform Data」をクリックしてクエリエディタにデータをロードします:

データセットには、性別、在職期間、電話サービス、インターネットサービス、依存者などの顧客に関する情報が含まれていることが確認できます。

Transformボタンをクリックすると、次のようなQuery Editorが表示されます。

Differences between M Language and DAX

前項では、Power BIとGitHub上のダミーデータセットとを接続しました。 このセクションでは、M言語とDAXの違いについて、例を挙げながら見ていきます。

M Language

まず、Mとは何か、Power BIでどのように使用されるかを見ていきます。 先ほども言いましたが、M言語はクエリエディタでデータを管理したり、フィルタリングしたりするために使用されます。 クエリエディタを閉じてしまった場合は、上部メニューの「クエリの編集」をクリックすることで開くことができます。

クエリエディタで、画面左パネルのテーブル名だけが、以下のように自分のテーブルになっているはずです。 以下のようにクエリエディタの左パネルから「WA_Fn-UseC_Telco-Customer-Churn」データテーブルをクリックします:

Mでクエリを見るには任意の列、例えば「パートナー」を選択し、上部メニューから「列を削除」ボタンをクリックしてください。 これは、以下のようにテーブルから「パートナー」列を削除します:

次に、以下のスクリーンショットで強調表示されているように、上部メニューから「表示」オプションをクリックします。 次のスクリーンショットで強調表示されているように、数式バーにクエリが表示されるはずです。 ここでのクエリは、「= Table.RemoveColumns(#”Changed Type”,{“Partner”}). このクエリは、選択したテーブルから「Partner」列を削除するために使用されるM言語クエリです。 M言語クエリはC#のSQLやLINQ(言語統合クエリ)コマンドに近いことがわかります。

データセットで以前に実行したすべてのMクエリを確認するには、次のスクリーンショットに示すように「表示 – 詳細編集」をクリックするとよいでしょう。

トップメニューから「Advanced Editor」オプションをクリックすると、以下のような「Advanced Editor」ウィンドウが表示されるはずです。 Advanced Editor」ウィンドウには、現在のセッションでこれまでに実行したすべてのM言語クエリが表示されます。

最後のクエリは、テーブルから「Partner」列を削除するものであることが分かります。 その前に、”Change Type” クエリは、データセット内の異なるカラムにデータ型を割り当てるために使用されます。 そしてその前の “Promoted Headers “クエリは、ヘッダーカラムを設定するために使用されます。 別のクエリを実行すると、それが「アドバンス・エディタ」のクエリリストの一番下に表示されます。

では、books テーブルに簡単な列を追加して、そのための M クエリを確認してみましょう。 下図のように、ウィンドウ上部のメニューから「列の追加 -> カスタム列」をクリックします:

下図のようなウィンドウが表示されるはずです。 TotalCharges」と「MonthlyCharges」の列を一つずつクリックし、「挿入」ボタンをクリックすると、クエリエディタウィンドウに挿入されます。 クエリエディタウィンドウで、2つの列名の間に「+」記号を追加し、「OK」ボタンをクリックします。

以下のようにテーブルに新しい列「月合計」が追加されるのが確認できます。 数式バーには、「Monthly-Total」カラムを作成するために生成されたMクエリも表示されます。 Monthly-Total」列は、基本的に「TotalCharges」列と「MonthlyCharges」列の値の合計を表示します。

ここで再び「アドバンスト・エディター」ウィンドウを開くと、アドバンスト・エディターのクエリーの一番下に「Monthly-Total」列を追加するために使用したクエリーが表示されます。

これでM言語の動作と外観が分かりましたね。 次のセクションでは、DAX(データ解析式)を介して同じ「月間-合計2」列を作成してみます。

DAXクエリはデータビューで実行されるので、クエリエディタからデータビューにデータを移動させる必要があります。 これを行うには、クエリエディタで、以下のように上部メニューから「閉じる & 適用」をクリックします:

「閉じる & 適用」をクリックすると、データビューが開かれます。

DAX (Data Analysis Expression)

このセクションでは、DAXを使ってBooksテーブルに新しい列を追加する方法を見ていきます。 データビューで、以下のように上部メニューから「モデリング -> 新しい列」オプションをクリックします:

「新しい列」オプションをクリックすると、以下のウィンドウが表示されるはずです。 数式バーには、デフォルトの列の名前が表示されています。 この数式バーでDAXクエリを実行できます。

数式バーに「月-合計2 = +」というクエリを入力し「Enter」キーを押してください。 Enterキーを押すと、新しい列「Monthly-Total 2」が表示され、「TotalCharges」列と「MonthlyCharges」列の値の合計が表示されます。

DAX クエリーは MS Excel とより似ていることがわかります。

Conclusion

M 言語と DAX はデータを操作、フィルター、分析するために Power BI がサポートしている 2 つの言語です。 両言語は似たような機能を持つが、それぞれ独立して動作する。 M言語はクエリエディタ内でデータを前処理するために使用され、DAXはデータがデータビューモデルにロードされた後にデータを分析するために使用される。

  • 著者
  • 最近の投稿
Ben RichardsonはSQLトレーニングのリーディングプロバイダーであるアキュティトレーニング、英国に実行されます。 入門コースから上級管理、データウェアハウス・トレーニングまで、あらゆる種類のSQLトレーニングを提供しています。 Acuityは、ロンドンとサリー州ギルフォードにオフィスを構えています。 また、Acuityのブログでも時々ブログを書いています
Ben Richardsonの投稿をすべて表示
Ben Richardsonの最新の投稿(すべて表示)
  • Power BIレポートテーマで作業 – 2021/02/25
  • Power BI.のレポートテーマで作業 – 2021/02/25

  • ベンRichardsonの最新の投稿を表示。 ウォーターフォールチャートと複合ビジュアル – 2021年1月19日
  • Power BI: 条件付き書式とデータカラーの活用 – 2021年1月14日

コメントを残す

メールアドレスが公開されることはありません。