カテゴリー別アーカイブ: Power BI

DAXで定量的にランク分けして集計を行う~分析の基本~

【分けることが分析の基本です。DAXを使用して一発で定量的なランク分けを行いましょう!】

今回の記事では修正が面倒なIF式を使わないままDAXで定量的に分類を行います

仮にエクセルで同じことを行うのであれば「VLOOKUP関数(近似値検索)」やIF式を組み合わせて行う必要があります

DAXであれば一つのメジャーをすれば一発で集計できます

使用するテーブル

使用するテーブル:DATAは次のテーブルになります

ランクテーブルの作成

まずはDAXでランクテーブルを作成します

エクセルなどでランクテーブルを作成した上でPower BIに取り込むよりずっと楽です

ランクテーブルの作成には「DATATABLE関数」を使用します

DATATABLE関数は2つのパートに分かれています

1.列の作成⇒列名と列の形式を指定します(例:”NO”、INTEGER:数字形式、STRINGで文字列形式)

2.列の中身の作成⇒{}の中に、更に{}を使用して行を表現します

今回のDAXの中身は次のようになります

RankTable = DATATABLE(

“NO”,INTEGER,”NAME”,STRING,”Min”,INTEGER,”Max”,INTEGER, 

{

  {1,”A”,50,200},  {2,”B”,30,50},  {3,”C”,0,30}

 }

)

ランク分けのメジャーの作成

ランク別にカウント

ここからは前述のランクテーブルを使用してランク別にカウント処理を行います

つまり、DATAテーブルの金額列とランクテーブルの各行を互いに評価する形になります

ですのでFILTER 関数が2つ(DATA、ランクテーブル)出ててきます

Count_by Segment = CALCULATE(

    COUNTROWS(‘DATA’),

    FILTER(‘DATA’,   

  NOT(ISEMPTY(

         FILTER(‘RankTable’,NOT(ISBLANK([金額]))&&’RankTable'[Min]<[金額]&&’RankTable'[Max]>=[金額])

        

      

   )
)

上記に出てくる「ISEMPTY関数」「ISBLANK関数」についてはこちらをご参照ください

ランク別の合計金額

ランク別に合計金額を集計する場合にはCALCULATE関数内でSUM関数を使用します

SUM_by Segment = CALCULATE(

    SUM(‘DATA'[金額]),   

  FILTER(‘DATA’,(省略)

<まとめ>

今回はDAXを使用してランク分けする方法について解説しました

DAX式は少し複雑ですが、一度作成してしまえば何度でも使いまわすことができるのでとても便利です

ぜひ有効活用してみてください

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

レポートで説明文章を更新データに合わせて可変にする方法

【更新データを手動で書いたような文章で自動表示する方法を解説します】

データの更新に合わせてPower BIのレポート上の文章を可変にするには、メジャーの作成に加えて「改行」などの書式の工夫が必要です。今回は最終月の売上を表示する事例に基づいて様々なテクニックの解説を行います

やりたい事

売上データの毎月の報告を自動化するのが一番やりたいことです

「〇年×月の売上は△△△でした」

上の文章内の「〇年×月」、売上「△△△」をメジャーで自動取得できるようにします

書式の方も「月」と「の売上」の間に改行を入れつつ、売り上げもきちんと桁区切りにします

なお、今回使用するデータ/OrderDataは以下です

OrderData

一番右のyyyyMMの列は「新しい列の作成」にて追加しました

こちらの列で最後の月を判断します

SUMMARIZECOLUNS関数による集計

今回の記事の内容で一番難しいのはデータの最後の月を集計する点です

最後の月の抽出はMAX関数を使えば簡単そうです

ただそこから最後の月の売上を集計する必要があります

Power Queryでグループ化を行い、その後に集計する方法もあります

今回の記事ではDAXを組み合わせて、直接、最終月の売上を集計します

中心となるのSUMMARIZECOLUNS関数です

この関数はグループ化したテーブルを作成します

上の画像を見ると、「201904」「201905」と月単位で売上が集計されています

SUMMARIZECOLUNS関数の文法は次の通りとなります

SUMMARIZECOLUMNS(グループ化する列,新列名,集計式)

今回で言えば次の通りの式となります

SUMMARIZECOLUMNS(

‘OrderData'[yyyyMM] ⇒グループ化する列

,”月小計”, ⇒新列名:集計式で計算した列

SUM(‘OrderData'[受注数]) ⇒集計式

)

但し、SUMMARIZECOLUNS関数を使用して新たなテーブルを作成しておくわけではありません

SUMMARIZECOLUNS関数で作成したテーブルは変数に代入します

上の画像では変数:myTableに代入されています

最終月と売上の集計

まずは前述の通りSUMMARIZECOLUNS関数にてグループ化されたテーブルを作成します

そして最終月を計算した上で新たに作成したテーブルから最終月の売上を抽出します

最終月は以下の要領で算出して変数:MaxMonthに格納します

そして、myTableとMaxMonthを組み合わせて最終月の売上をSUMX関数を使用して集計します

SUMX関数の第一引数ではFILTER関数を使用します

グループ化したテーブルから、最終月と同様の行を抽出します

そして第二引数ではグループ化した際に集計した売上を指定します

文章となるメジャーの作成

文字の切り取り

文章で使う「年」や「月」は事前に分解してメジャーを作成しておきます

改行コード

改行はUNICHAR関数を使用します

UNICHAR関数の引数には「10」を指定します

桁区切り

売上の桁区切りにはFORMAT関数を使用します

FORMAT関数の第二引数では”#,###”で桁区切りを表現します

テキストボックスへのメジャーの設定

事前に文章となるメジャーは「TEXT」という名称で作成してあります

テキストボックスをレポート画面に設定すると、+ボタンが見えますのでこちらをクリックします

するとメジャーを設定できるようになります

メジャーの設定は「この値の計算方法」の欄にて行います

これでフォント文字や文字の位置などを調整したら終了です

<まとめ>

今回はメジャーを組み合わせて文章を可変にする方法を解説しました

記事の中では様々なテクニックが出てきました

・グループ化するDAX⇒SUMMARIZECOLUNS関数

・DAXによる改行⇒UNICHAR関数

・桁区切り⇒FORMAT関数

他の場面でも有効活用できる内容です

ぜひ手を動かしてトライしてみてください

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

複雑なリレーションを分かりやすく分解して編集する方法

【Power BIを活用する上で難所の一つであるリレーションの編集を分かりやすい画面で行えるようにする】

Power BIのリレーション画面を一目見て「操作しにくい」と感じたことはないですか?

どうも全体像がつかめなかったりする場合もありますし、表示されているテーブルが多すぎる場合には関係性がよくつかめなかったりします

今回の記事では「モデルビュー」画面をうまく活用して、リレーションを編集しやすい単位でブロックを分けられるようにします

自動レイアウト

今回の記事ではリレーションを分解して編集する方法を解説するのですが、全体をすっきり表示する方法もあります

まず「+ボタン」でモデルビュー画面のページを増やします

ページを増やしたら「自動レイアウト」をクリックします

すると次のGIF動画のように、全体がすっきりした形で表示されます

こちらの画面でリレーションを新規に作成してみます

上のGIF画像では「顧客1」と「売上データ1」との間で新規にリレーションが作成されました

すると「すべてのテーブル」ページでも新規に作成されたリレーションが反映されます

リレーションの分解

ここから本題のリレーションの分解について解説します

まずページを新規に追加します

こちらに分解するリレーションにおいて中心となる「テーブル」を追加します

次に「ページの空白箇所」で右クリックをします

すると次のようなポップアップが表示されます

こちらの「関連テーブルを追加する」をクリックします

すると中心とするテーブルと既にリレーションがあるテーブルが表示されます

新規にリレーションを追加する場合にはテーブルを右から挿入します

逆に上の表示からテーブルを消したい場合にはこちらの「ダイアグラムから削除」をクリックします

なお、こちらで作成したリレーションは「すべてのテーブル」にきちんと反映されます

<まとめ>

今回はPower BIのモデルビュー画面にて、リレーションを分けて編集する方法を解説しました

画面を追加するだけで行えるのでとても便利です

Power BIでうまくリレーションする鍵は「分解」です

ぜひ今回紹介した画面をうまく活用して「分解」上手になりましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power BIでレーダーチャートを作成する

【レーダーチャートはメニューにはないですが、その他のビジュアルから作成することができます】

エクセルでは定番のレーダーチャートは、Power BIではメニューから作成できません

その代わり、3点リーダーから選択することができます

その他のビジュアルの取得

ビジュアルのビルドの「3点リーダー」をクリックすると「その他のビジュアルの取得」が選択できます

こちらから「Radar」と検索してみてください

すると数種類の「レーダーチャート」が選択できるようになります

グラフの作成

前述の「その他のビジュアルの取得」の一番左「Radar Chart」を選択すると、ビジュアルのビルドに次のように表示されます

このレーダーチャートのマークをクリックすると次のようにフィールドが表示されます

設定するフィールダーは2つだけです

<まとめ>

今回の記事ではレーダーチャートを「その他のビジュアルの取得」から作成する方法を解説しました

注意点としては複数の線を作成する場合です

リレーションを組んだとしても、複数のテーブルから線を作成することができません

同じテーブルから複数の線に対応する値を作成する必要があります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

複数のメジャーを集約して分かりやすくまとめる方法

【複数のテーブルに散らばったメジャーを分かりやすく1つのテーブルに集約します】

メジャーを作成していたら、いろんなテーブルに散らばってわからなくなった・・・そんな経験はないですか?

今回の記事ではメジャー専用のテーブルを作成してまとめる方法を解説します

テーブルの手動作成

まず最初に複数メジャーのまとめ先になるテーブルを作成します

テーブルの作成は手動で行います

次に開いた画面では、ダミーデータを入力します

列名を指定したりする必要はありません

どのみち、後で削除します

但し、テーブル名は指定してください

メジャーの選択

前述の手動で作成したテーブルに複数メジャーを移動します

移動の指定は「モデル」画面で行います

モデル画面の右にあるデータで移動元のメジャーをまとめて選択します

各テーブルにて3点をクリックすると「メジャーの選択」があります

このメジャーの選択をクリックすると、該当テーブル内のメジャーをまとめて選択できます

メジャーの移動

次に選択したメジャーの移動先を「プロパティ」欄の「ホームテーブル」で指定します

テーブルの整理

最初にダミーで入力したデータは消去しておきます

<まとめ>

今回は、複数のメジャーを一つのテーブルにまとめて整理する方法を解説しました

今回の記事のように常にメジャーは分かりやすく一か所にまとめておくと他の人も分かりやすいので、常に「メジャーテーブルの作成」は行っておきましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

グラフに平均値の線や中央値の線を追加して見やすくする

【Power BIはエクセルと違って、参考用の線を簡単に追加することができます】

今回はグラフの中に平均値や中央値または自作した線をグラフの中に追加する方法を解説します

今回解説する方法は「グラフを見やすくしたい!」という方に一つの有効な方法になると思います

平均値線

まずは「さらに分析をビジュアルに追加する」をクリックします

更に平均値線から「行の追加」をクリックします

次に「系列」で平均値を計算する対象データを指定します

この時点でPower BIに線が追加されます

値の表示

データラベルを「オン」にすると線に「値」が表示されます

このような形です

名称の表示

値ではなく線の名称を表示する方法もあります

スタイルを「名前」に変えると線の名称の表示に変えることができます

名称自体を変えるにはこちらを変更します

中央値線

中央値線を追加する場合には、以下から追加します

後の内容は「平均」と一緒です

ちなみに、値を線の左ではなく右に表示する場合は以下を指定します

このような形です

線の自作

自作した線を追加する場合には定数線から追加を行います

定数線の追加では、データテーブルを参照することができます

上の関数ボタン(fx)を押すと次の画面が開きます

こちらで、対象データと参照の仕方を指定できます

「基準にするフィールド」では作成したメジャーも参照することができます

<まとめ>

今回はPower BIのグラフに平均値などの線を追加する方法を解説しました

見やすいグラフを追求した時、シンプルさがあるかどうかがとても重要になります

こうした線を追加することで、シンプルにグラフを解説できるようになります!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

画像でスライサーを選択する~スライサーを一目で分かるようにしよう!~

今回の記事では、画像でスライサーを選択できるようにします

この仕組みであれば、何を選択するか?何を選択しているか?は一目で分かります!

エクセルでも似たようなことはできます

ただ、画像に名前を付けるなどの面倒な処理が必要です

Power BIであれば、複雑な処理不要で画像スライサーを作成できます

画像URLの準備

画像はURLを使用して表示します

Power BI Desktop内で、画像のURLを管理する仕組みがあります

URLは今回の記事では、Googleフォトで用意しました

Googleフォト上で右クリックすると「画像アドレス(URL)」をコピーできます

コピーしたURLは、スライサーにする項目に紐づけられるようにコピーします

今回の記事では「データの入力」から新たにテーブルを作成しました

エクセルで別途、URLを指定したテーブルを作成するのもOKです

スライサーの作成

スライサーの作成を行う前に、データ管理画面で一つ事前処理が必要です

データ管理画面で「URL」を設定した列を選択した上で、データカテゴリを「画像のURL」に指定します

これで、通常のスライサーの作成処理と同じです

フィールドにはデータカテゴリを「画像のURL」に設定した列を指定します

これで完成です!

<まとめ>

今回はスライサーを画像で選択できるようにしました

画像はURLで処理するのが一番のポイントです

画像を活用すると、レポートが華やぎます!

ぜひ有効活用してみましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

DAXを使用して注文数毎に会員を分類する~会員のセグメント~

【IF式をわざわざ重ねなくても、DAXを使用すれば注文数で会員をセグメントできます】

下の画像のようなデータから会員/Customer_IDを注文数でセグメントする場合はIF式やピボットテーブルを組み合わせる必要がありました

OrderData1

DAXとパラメーターを使用すれば、簡単にセグメントが行えます

ポイント

今回は注文データからセグメントを行いますので、一旦、SUMMARIZE関数を使用して会員番号毎に注文数を紐づけるテーブルを作成するのがポイントです

上記のテーブルからFILTER関数を使い、注文数毎に会員数を集計します

パラメーターの作成

まずはFILTER関数内で、注文数のフィルターに使用するパラメーターを作成します

次の画像で、フィルターに設定する数値範囲を設定します

上記の数値範囲を設定すると2つのものが作成されます

1つは数値範囲を設定したテーブルです

もう一つはメジャーです

こちらのメジャーをFILTER関数内で使用します

セグメントをするメジャーの作成

顧客別注文数 =

①VAR CustomerOrders=   

SUMMARIZE(

‘OrderData1’,

OrderData1[Customer ID], 

“注文数”, 

COUNT(OrderData1[Order ID])

)

RETURN

②COUNTROWS(   

FILTER(

CustomerOrders,

[注文数]=③[パラメーター 値]

)

)

③は前述のパラメーターを作成した時のメジャーになります

画像に alt 属性が指定されていません。ファイル名: image-33-644x63.png

パラメーターで設定した値(1~10)毎(行毎に)に会員を抽出する形になります

FILTER(CustomerOrders,[注文数]=③[パラメーター 値])

会員を抽出したら②の「COUNTROWS関数」でセグメント毎の会員数を集計します

マトリックスの作成

最後にマトリックスを作成します

行には下の画像のパラメーターを使用します

画像に alt 属性が指定されていません。ファイル名: image-32.png

<まとめ>

今回は注文データから、注文数で会員をセグメントしたデータを作成します

エクセルのワークシートで行おうとすればIF関数やピボットテーブルを組み合わせる必要があります

DAXを使用する場合は、FILTER関数をうまく使えば簡単に行えます

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

DAXを使いコホート分析~顧客のリピート状況を把握~

【もしエクセルで行おうとしたら、非常に手間なリピート状況の把握をDAXを使用して一発で解決】

前回は、新規と既存をDAXで集計しました。今回は同じ条件で顧客を並べた上でリピート状況をDAXで把握できるようにします!

上の画像のマトリックス表では、縦に顧客を初回受注月で並べ、横は初回受注月の経過月(1~12)別にリピート率を並べています

下の上の画像のズームアップを見てください

例えば、初回の受注月が2019年4月だった会員がもし100名いたとしたら、その100名のうち次の月に受注があったのは33名ということになります

このマトリックス表を作成することで、単に金額の増減を把握するだけではわからない、具体的な増減の要因をつかめるようになります

使用データ

使用するデータには、会員別の受注データを使用します

OrderData

ポイント

作成は3段階になります

1段階目で、新しい列を追加します

OrderData

会員毎の初回受注日を抽出する列を作成し、前述のマトリックス表の縦軸にします

2段階目で横軸にする連番をテーブルで作成します

3段階目でリピート率を計算するDAXを作成します

こちらのDAXは1段階目、2段階目で作成した縦横の軸を組み入れます

会員毎の初回受注日の抽出

CALCULATE関数とMIN関数を使用して、会員毎の初回受注日を抽出する列を作成します

CALCULATE関数の第二引数の条件にはFILTER関数を使用して、会員毎のテーブルを繰り返し作成し、会員毎の初回受注日を繰り返し抽出します

ただリピート率の計算は月単位で行うので、最小受注日は月末に揃えます

月末に揃える作業はEOMONTH関数を使用して行います

FirstOrderDate =

①VAR CurrentCustomer=’OrderData'[会員番号]
RETURN
②CALCULATE(

EOMONTH(MIN(‘OrderData'[受注日]),0),

FILTER(‘OrderData’,’OrderData'[会員番号]=①CurrentCustomer)

)

EOMONTHは第二引数に0を指定することで、第一引数の日程の月末日を抽出します

連番テーブルの作成

マトリックス表の横軸になる連番(0~12,増分は1)を作成します

こちらは新しいテーブルの作成となります

テーブルの作成にはGENERATESERIES関数を使用します

MonthAfter = GENERATESERIES(0,12,1)

リピート率を計算するDAXの作成

変数の作成

まず縦横の位置を変数で指定します

A: VAR CurrentMonthAfter=SELECTEDVALUE(MonthAfter[Value]) 

B: VAR CurrentFirstMonth=SELECTEDVALUE(OrderData[FirstOrderDate])

マトリックスの位置の行を抽出

テーブル:OrderDataから前述のAとBを組み合わせた位置に該当する行を、FILTER関数を使用して抽出します

この時に、EOMONTH関数を使用して月末日に揃えて行を抽出するのもポイントです

FILTER(‘OrderData’, EOMONTH(‘OrderData'[受注日],0)=EOMONTH(B: CurrentFirstMonth,A: CurrentMonthAfter))

CALCULATE関数による会員数抽出

上記のFILTER関数により抽出した行から、CALCULATE関数とDISTINCTCOUNT関数を使用して該当する会員数を抽出します

 CALCULATE(         

DISTINCTCOUNT(‘OrderData'[会員番号]), 

FILTER(‘OrderData’,

EOMONTH(‘OrderData'[受注日],0)=EOMONTH(CurrentFirstMonth,CurrentMonthAfter)

) ),

DIVIDE関数による率の計算

DIVIDE関数によって、分子:マトリックスの位置の会員数と分母:全体の会員数(実際には行でフィルターされる)で割ります

CustomerRetension% =  

A: VAR CurrentMonthAfter=SELECTEDVALUE(MonthAfter[Value]) 

B: VAR CurrentFirstMonth=SELECTEDVALUE(OrderData[FirstOrderDate])

RETURN  

DIVIDE(   

CALCULATE( 

DISTINCTCOUNT(‘OrderData'[会員番号]),

FILTER(‘OrderData’,

EOMONTH(‘OrderData'[受注日],0)=EOMONTH(B: CurrentFirstMonth,A: CurrentMonthAfter) 

),

DISTINCTCOUNT(OrderData[会員番号]) 

)

マトリックスの作成

実際にマトリックス作成の際には、2つの作業を事前に行います

日付の変更

個人の好みにもよりますが、そのままですと縦軸の初回の受注月はJan、Febなどの英語名になります

ですので、事前に日付を変換しておくことをお勧めします

仮メジャーの作成

マトリックスの「行」には上記の画像のFirstOrderDate、もしくは変換した内容、列には2段階目で作成した0~12の連番を指定します

値には普通にいけば、リピート率を配置します

ただ、このケースの場合には一旦、仮で作成したメジャーを一旦配置します

この仮メジャーを配置した後、リピート率を計算するDAXを配置します

<まとめ>

今回の記事では、初回受注月で会員を並べ、横軸に経過月毎にリピート率を並べるコホート分析のためのDAXの作成方法を解説しました

実際の作成はマトリックスの縦軸、横軸と値の3段階で行います

DAX関数は様々な関数を組み合わせて作成しますが、特にFILTER関数をどう使うかがポイントとなります

FILTER(‘OrderData’,’OrderData'[会員番号]=①CurrentCustomer)

FILTER(‘OrderData’,

EOMONTH(‘OrderData'[受注日],0)=EOMONTH(B: CurrentFirstMonth,A: CurrentMonthAfter) 

上記2つのFILTER関数はCALCULATE関数と組み合わせますが、この組み合わせは色々な場面で使用できるのでぜひ覚えておきましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

DAXを使い一発で新規顧客・既存顧客別に会員数と金額を集計する

【売上金額が単に増えた減ったとは別に新規と既存の切り口があると、金額の増減をストーリーで語れます】

数字の増減の理由を聞かれた時に、返答に困ったことはありませんか?

なかなか数字の増減の理由をつかめないのは、原因がずっと前に起こっていることもあるからです

例えば、ある企業の売上金額の80%が僅か顧客の20%から生まれていたとします

この優良顧客の離脱率は完全に0にはできません

しかも獲得した顧客もすぐに優良になるわけではありません。優良顧客になるまでに時間はかかるものです

優良顧客が離脱するペース以上に新規顧客を獲得して成長させないと売上は維持できません

ですので、新規顧客の獲得の減少が後々売上に響くこともあります

逆に新規顧客と既存顧客に分けた切り口で集計ができると、中長期期間での分析がしやすくなります

ところが、この新規既存の集計はエクセルのワークシートで行おうとすると猛烈に時間がかかります

今回の記事では、DAX一発で新規既存の数字を集計できるようにします

なお、新規と既存の切り口は売上金額の分析でなくても、在庫分析などでも活用できます

ポイント

新規と既存の違いとは何か?この定義がとても重要です

初回購入とはまた違いますので、その点は明確に意識しておきましょう!

次の図を見てみてください

対象期間より前に購入があった会員は新規と既存、どちらに区分されるでしょうか?

これは既存に区分されます

この「対象期間より前」の定義を数式で表すと次のようになります

<MIN(対象期間)

この数式を活用して既存会員をDAXで表現します

逆に新規はどう表現するか?

全会員-新規会員

上記で表現できますので、既存会員を式で表すことができれば難しい式を使う必要はありません

使用データ

使用するデータは次のデータになります

テーブル名:myData

横の軸は会員番号別の軸になります

4月1日から4日まで新規会員を1会員づつ獲得しており、新規会員からの金額は1日100となっています

上記のテーブルはPower BI内に取り込んだ後、ピボット解除で変換した上で使用します

尚、上記は売上データから新規・既存を集計しますが、会員データを別途作成しておくともう少しDAX式が簡単になります

会員データと売上データの間にリレーションを作成したうえで、DAXを使用する方法も少し紹介します

使用DAX(抜粋)

VALUES関数

今回のDAXではVAR/変数を使って複数のDAX関数を組み合わせます

その中の一つがVALUES関数です

VALUES関数はテーブル操作関数なので「新しいテーブル」を作成できます

上の画像では、全会員をテーブル化しています

CALCULATETABLE関数

こちらの関数はテーブル式をフィルター評価する関数です

CALCULATETABLE_NewTable = CALCULATETABLE(VALUES(myData[会員番号]),’myData'[日付]=MIN(‘myData'[日付]))

上のVALUES関数に加えて、フィルターを加えています

今回の記事では、この関数を使用して既存会員をテーブル化します

新規会員数

ポイントで前述したように、全会員から既存会員を引いたのが新規会員となります

NewCustomers =  
VAR CurrentCustomers= Values(myData[会員番号]) 

VAR CurrentDate=Min(myData[日付]) 

VAR OldCustomers=CALCULATETABLE(VALUES(myData[会員番号]),ALL(myData[日付]),myData[日付]<②CurrentDate) 

VAR NewCustomers=EXCEPT(①CurrentCustomers,③OldCustomers)

⑤RETURN COUNTROWS(④NewCustomers)

解説

①新規・既存会員を含めて全会員をリスト化します

②対象期間の最小日付、つまり新規と既存の境目となる日付を算出します

③②で算出した最小日付を基にして既存会員をテーブル化します

④①の全会員から③の既存会員をEXCEPT関数により差し引いて新規会員をテーブル化します

⑤COUNTROWS関数により、NewCustomersテーブルから新規会員数を出力します

既存会員数

上記の新規会員数を算出するDAX関数の一部を省略するだけです

OldCustomers =

① VAR CurrentCustomers= Values(myData[会員番号]) 

②VAR CurrentDate=Min(myData[日付]) 

③VAR OldCustomers=CALCULATETABLE(VALUES(myData[会員番号]),ALL(myData[日付]),myData[日付]<②CurrentDate)

④RETURN COUNTROWS(③OldCustomers)

新規会員金額

新規会員数を算出するDAXの最後のRETURNを変更します

 SUMX(NewCustomers,CALCULATE(SUM(myData[金額])))

SUMX関数を使用するのですが、第二引数でCALCULATE関数を使用することでNewCustomersテーブルの1行1行*を計算させるのがポイントです

行評価

NewCustomersAmount =

①VAR CurrentCustomers= Values(myData[会員番号]) 

②VAR CurrentDate=Min(myData[日付]) 

③VAR OldCustomers=CALCULATETABLE(VALUES(myData[会員番号]),ALL(myData[日付]),myData[日付]<CurrentDate) 

④VAR NewCustomers=EXCEPT(CurrentCustomers,OldCustomers)

⑤RETURN     SUMX(NewCustomers,CALCULATE(SUM(myData[金額])))

既存会員金額

OldCustomersAmount =  

①VAR CurrentCustomers= Values(myData[会員番号]) 

②VAR CurrentDate=Min(myData[日付]) 

③VAR OldCustomers=CALCULATETABLE(VALUES(myData[会員番号]),ALL(myData[日付]),myData[日付]<②CurrentDate)

④RETURN SUMX(③OldCustomers,CALCULATE(SUM(myData[金額])))

会員データを使用するパターン

使用する会員データは次の通りとなります

新規会員数

NewCustomers =  

①VAR CurrentDates=VALUES(myData[日付])               

②RETURN COUNTROWS(FILTER(‘CustomerFirstSale1’,’CustomerFirstSale1′[最小] in ①CurrentDates))

既存会員数

OldCustomers =

①VAR CurrentDates=VALUES(myData[日付])

②VAR CurrentCustomers=COUNTROWS(VALUES(myData[会員番号]))

③VAR NewCustomers=COUNTROWS(FILTER(‘CustomerFirstSale1’, ‘CustomerFirstSale1′[最小] in ①CurrentDates))    

④RETURN ②CurrentCustomers-③NewCustomers

新規会員金額

NewCustomersAmount =

①VAR CurrentDates=VALUES(myData[日付]) 

②RETURN SUMX(FILTER(‘CustomerFirstSale1’,’CustomerFirstSale1′[最小] in CurrentDates),’MeasureTable (2)'[SalesAmount]*)

*事前にSUM関数で合計を計算するメジャーを作成しておきますSalesAmount = SUM(myData[金額])

既存会員金額

OldCustomersAmount =  

①VAR CurrentCustomers= Values(myData[会員番号]) 

②VAR CurrentDate=Min(myData[日付]) 

③VAR OldCustomers=CALCULATETABLE(VALUES(myData[会員番号]),ALL(myData[日付]),myData[日付]<②CurrentDate)

④RETURN     SUMX(③OldCustomers,CALCULATE(SUM(myData[金額])))

<まとめ>

今回の記事ではDAX関数を使用して、新規と既存を区分して集計する方法を解説しました

複数の関数を組み合わせて集計しますが、一番重要なのはMIN(対象期間)により全期間から新規と既存の境目となる「時」を算出することです

DAX関数を使用することで、エクセルで複数シートをまたいで処理するのとは違い、即時に新規と既存を集計できます

今回は新規と既存の切り口での集計を紹介しましたが、後日、新規と既存の切り口以上に重要なリピートについても解説を行います

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ