タグ別アーカイブ: メジャー

脱エクセルについて考える~資金繰り表をPower Platformで作成~第9回

【エクセルは本当に便利なツール。但し、効率と効果を上げるには限界があります】

資金繰り表はエクセルに向いている業務の典型です

それは何故か?

上の画像の黄色のセルには数式が入っており、預金残高の予想残高を計算しています

但し、この数式を必要に応じて実際の預金残高「数値」で上書きすることができます

実はこれってエクセル以外のソフトだと難しいんです

「数式」と「数値」を共存できるエクセルは本当に便利なんです

ではエクセルで業務を続けていたらそれでいいのか?

それはそれで問題があります

下の画像の「2023/1/5」の売上高の欄には120と入っています

入力数字は120でも、実は120という数字を別な表で複数の顧客の数字を積み上げて入力されているかもしれません

それに、表に存在する日付/列単位が膨大になってくると、入力箇所を見つけるのも面倒です

つまり量が膨大になってくると、この資金繰り表の1セルを入力する作業がかなり面倒になってきます

その理由は一般的なエクセルの資金繰り表では「データ蓄積」「作業」「計算」「表示」が分かれていないからです

ですので、作業や計算スペースを作る関係上、データの並びが不規則になってしまったりしますし、入力しやすいようなスペースを作ることも困難です

更に言えば、資金繰り表のシートのデータを活用して他のシートで別の目的の表を作成しようとするとかなり複雑なものになってしまいます

実は、Power BIのDAXを使用すれば預金口座の残高も、実残高と予想残高を共存させながら計算できます

今回の記事ではPower BIPower Appsを使用して、エクセルの資金繰り表の「データ蓄積」「作業」「計算」「表示」を分けて管理できる仕組みの概要を紹介します

そして、Power Platformの便利さに触れて頂けたら幸いです

ポイント

Power Platformを使って資金繰り表を作成するには、分解が結合がポイントです

データの分解・結合

預金残高は数式と数値を共存できるように、以下にデータを分けて管理します

・預金残高(実残高)

・入金

・出金

更にカレンダーテーブル

上記の4つをDAXで結合して使用します

今回はSharepointリストを使用します

入出力と表示の分解

今回は入出力はPower Appsで行います

Power Appsならページを分けて、売掛金や経費などの入出力専用ページを作成できます

そして、表示や主な計算はPower BIで行います

Power BIは集約計算の簡単にできるし、DAXで複雑な計算も行えますので、Power BIの機能もフル活用します

エクセルで日付毎に複数の顧客の売掛金を合計していた作業は、前述のテーブルを作成しておけば勝手にPower BIが行ってくれます

入出力と表示が分かれていると不便だろうという場合は、後述するPower BI内でPower Appsを使う方法もあります

預金残高を表示するDAXの作成

ここがエクセルの資金繰り表を他のソフトで行う最大の難所です

日付の管理がとても重要です

・実際に預金残高を入力した日付の残高⇒そのまま残高を表示

・預金残高を入力していない日付の残高⇒実際に預金口座を入力した日付以降の入出金を加味して計算

例えば、1月1日の残高が100、1月2日の入金が100、1月3日の出金が100だったとします

この場合は

1月1日残高⇒100/実績残高

1月2日残高⇒200(100+100)/予想残高

1月3日残高⇒100(100+100ー100)/予想残高

となります

こちらを実際にDAX式に直したのが以下です

*CashBalance:実際の預金残高、Receipt:入金、Disbursement:出金

預金残高 =  

VAR currentDay=MAX(‘Calendar'[Date]) 

VAR maxDay=CALCULATE(MAX(‘CashBalance'[Date]),FILTER(All(CashBalance),’CashBalance'[Date]<=currentDay)) 

VAR cashAmount=SUMX(FILTER(ALL(‘CashBalance’),’CashBalance'[Date]=maxDay),’CashBalance'[CashBalance]) 

VAR cashReceipt=CALCULATE(SUM(‘Receipt'[Amount]),FILTER(All(‘Receipt’),’Receipt'[Date]>maxDay &&’Receipt'[Date]<=currentDay)) 

VAR CashDisbursement=CALCULATE(SUM(‘Disbursement'[Amount]),FILTER(All(‘Disbursement’),’Disbursement'[Date]>maxDay &&’Disbursement'[Date]<=currentDay))


RETURN cashAmount+cashReceipt-cashDisbursement

今回の記事では詳細には解説を行いませんが、一見複雑なこの式の最大のポイントは「預金残高の最大日付:maxDay」を算出することです

冒頭のたとえを使って説明すると、今日が1月3日だとしたらその前に預金残高がテーブル:CashBalanceに貴重された日付の1月1日を算出するということになります

最大日付が算出できれば、おのずと入金金額を算出する期間と出金金額を算出する期間が求まります

ただ実際には、フィルターを意識してAll関数をうまく組み合わせていく必要があります

専用アプリによる預金残高表示

Power BIには様々なアプリ/ビジュアルがあります

今回は資金繰り表に活用できるビジュアルを1つ紹介します

その他のビジュアルの取得をクリックして「Calendar」と検索してください

すると「Beyondsoft Calendar」というビジュアルをダウンロードできます

こちらのビジュアルは日々の預金残高をカレンダー上で表示できるという優れものです

残高の状態によって色を変えたりもできます

エクセルではなくPower BIを使用することで、専用アプリを活用することもできるんです

Power BIとPower Appsの連携

Power AppsをPower BI内で使用したい場合は、こちらをクリックするところからはじめます

すると、Power Appsに使用するフィールドの入力ができるようになります

実は、こちらはなんでも構わないんです。取り合えば何か設定すればPower BI内で表示したいPower Appsのアプリを選択できるようになります

<まとめ>

今回は脱エクセルについて考えると称して、エクセルの資金繰り表をPower AppsとPower BIを連携させて作成する方法の概要を紹介しました

紹介したのはあくまで概要ですが、エクセル作業が改善されていく可能性を感じて頂けたら幸いです

現実に、エクセルは表計算ソフトですので大量のデータを処理するには向いていません

なので、Power PlatFormの仕組みを利用して「データ蓄積」「作業」「計算」「表示」を分解・結合できるようにすることはとても意義があります

そうは言っても、誰でも手軽に使えるエクセルと違ってPower BIのDAXなどが複雑であったりするので専門知識が必要です

それに当然、手間暇も必要です

ですので、最終的にはどの程度の量の業務をどんな風に変えたいかが一番のポイントなのかもしれませんね

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

にほんブログ村

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

スライサーではできない操作をパラメーターで行う~メジャー連動~

【パラメーター機能の内容をメジャーに組み込めば、スライサーではできないような操作ができることがあります】

Power BIにパラメーターという機能をご存じでしょうか?例えばグラフの表示数が多すぎて、重要な数字が読み取れないことがあります。そんな時はパラメーターでグラフの表示数を変えることができます

今回の記事ではパラメーターとメジャーを組み合わせた上記の事例を紹介します

パラメーターとは?

パラメーターは一見スライサーと似ていますが、設定するのはあくまで数字の範囲となります

パラメーターはモデリングタブから追加することができます

実際に追加する時には「数値範囲」を指定します

次に開く画面では、出力する数値範囲を設定します

パラメーターを設定すると同時に専用のテーブルも作成されます

メジャーの設定

パラメーターを設定したら、メジャーの中にパラメーターで出力される値を組み込みます

折れ線グラフの各内容はそれぞれメジャーになっています

こちらにIF式を追加します

IF式にはパラメーターとの連動を組み込みます

このIF式によりパラメーターの値が1になった場合には、BLANK=グラフ表示なしになります

<まとめ>

今回はパラメーターを使用してメジャーを操作し、グラフの表示本数をコントロールできるようにしました

パラメーターの操作は今回紹介した「数値範囲」に加えて「フィールド」というのがあります

フィールドには直接メジャーを設定することができます

この場合はパラメーターをスライサーのように使用できます

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

にほんブログ村

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

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

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

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

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

テーブルの手動作成

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

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

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

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

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

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

メジャーの選択

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

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

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

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

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

メジャーの移動

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

テーブルの整理

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

<まとめ>

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

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

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

にほんブログ村

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

カレンダーテーブルの活用により、数字を時系列の軸で自由に集計するツアー

今回のシリーズ記事では、カレンダーテーブルを使用してデータを「前年データ」や「累計」などの時系列で簡単に整理し直す技術を解説したいと思います

カレンダーテーブルとは、売上データなどの日付が入ったデータをカレンダーのそれぞれの日付に割り当てて整理するためのテーブルです

カレンダーテーブル

このカレンダーテーブルが活用できるようになると、今までエクセルのワークシートで手動での転記処理に頼っていた「時系列でのデータの整理」が簡単にできるようになります

カレンダーテーブルの作成・準備

作成

ここまでの解説だと「カレンダーテーブルとはなんなのか?」が具体的にはよくわからないと思います

シンプルに言えば、まさにカレンダーのような連続した日付列を起点として作成されたデータテーブルです

この連続した日付データに年や月などを紐づけておき、売上データなどを時系列で括りなおせるようにします

リレーション

作成したカレンダーテーブルは、他テーブルとリレーション(紐づけ)を行って使用します

このリレーションを適切に行わないと、カレンダーテーブルを活用できません

会計年度の調整

日本の企業は大抵が3月決算です

ですから、1月~3月のデータは実際の年より前の年で会計年度が割り当てられます

この会計年度の調整を事前にカレンダーテーブルで行っておきます

メジャーの作成(前年比、累計など)

前年比や累計など、作成したカレンダーテーブルを活用して作成する数字はメジャーで作成します

エクセルを使用してきた感覚の延長だと、このメジャーというのはなかなか理解しがたいものです

何故なら、テーブルの列にメジャーで作成した数字はでてこないからです

これはメジャーで作成する前年比などの数字は穴埋め問題みたいなものだからです

穴埋め問題の答えは、あくまで前後の数字が決まってから答えが決まります

例えば、前年比ならば集計対象が2022年6月ということが決まってから2021年6月に対する前年比を算出することが決まります

このメジャーが穴埋め問題である点に慣れれば、後はDAXというPower BI(Power Pivot)独自の関数を使用して計算していくだけです

このDAXはワークシート関数と同じ感覚で使用できますが、文法が若干違うので注意が必要です

<まとめ>

数字を見ると時のツボは時系列で比較することです

私もこの辺の時系列のデータ整理はさんざん苦労しました

エクセルではどんなに頑張っても手動処理が入るからです

しかも、かなり気を遣うので疲れます

Power BIのカレンダーテーブルを活用して時系列でデータを自動整理する仕組みは、まさにPower BIの醍醐味といっても過言ではありません

ぜひ次回からの回でしっかりカレンダーテーブルを活用する技術を身につけましょう!

2回目:カレンダーテーブルを実際に作成する~カレンダーテーブルを活用するツアー~

3回目:カレンダーテーブルを実用的に調整する~カレンダーテーブルを活用するツアー~

4回目:前年の値や累計を使う~カレンダーテーブルを活用するツアー~

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

にほんブログ村

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

カレンダーテーブルを実際に作成する~カレンダーテーブルを活用するツアー~

今回は前回の内容に従って、カレンダーテーブルを実際に作成してみましょう!

カレンダーテーブルを作成する時にDAX(エクセルのワークシート関数のようなもの)も使用します

元のデータはこちらの3つのテーブルになります

ですので当初のリレーションはこのようになっています

こちらにカレンダーテーブルを組み込む形になります

新しいテーブルの作成

カレンダーテーブルの作成は最初、こちらをクリックするところから始まります

すると数式が入力できるようになります

左辺をCalendarとし、右辺にCaを入力すると、入力するDAXの候補がでてきます

こちらの候補から「CALENDAR」をTabキーで選択してください

CALENDAR()の〇括弧:()の中には、連続した日付を作成する際の開始日終了日を指定します

YEAR/年とMONTH/月の列の作成

連続した日付データができたので、今度は日付データを使用してYEARとMONTHの列を作成します

上の画像の「新しい列」をクリック後、まずはYEARの列を作成します

YEARの列を作成するにはDAX「YEAR」を指定します

その際に、コツが一つあります

丸括弧:()の中でを指定すると()中に入れる列名の候補が選択できます

今回は’Calendar[Date]の列を指定して、日付列(2021/04/01⇒2021)を年に変換して列を作成します

今、DAX:YEARをして列を作成しましたが、通常のエクセルのワークシート関数を使用した時との違いは、セルではなく列単位で関数を使用しているという点です

MONTHの列もYEARの列と同様に作成します

会計年度の調整

前回も触れましたが、3月決算の場合には会計年度を調整する必要があります

例えば、2022年1月の場合には、上記のYEAR関数で作成した列には「2022」と表示されます

ただ実際には会計年度は2022から1を引いた「2021」になります

ですので、MONTH列をもとにしてIF関数により1月~3月の会計年度を調整します

if(MONTH([Date])<4,YEAR([Date])-1,YEAR([Date]))

ちなみに四半期の列を作成するQUARTER関数を使用すると次のようになります

4月が第2QUARTERとなります

これは12月決算をもとにしてDAXが作成されているからです

この場合も3月決算にあわせてIF関数を使用します

IF(MONTH([Date])<4,4,if(MONTH([Date])<7,1,IF(MONTH([Date])<10,2,3))

リレーションシップの作成

カレンダーテーブルをひとまず、形にはしました

これだけでは、カレンダーテーブルを活用することはできません

他のテーブルとリレーションシップを作成・紐づけを行う必要があります

リレーションシップを作成するには、以下の画面で操作が必要です

こちらの画面で売上データの「日付データ」とカレンダーテーブルの「Date」を紐づけます

操作はいたって簡単です

該当する列の上でドラックをするだけです

これで下の画像のようなリレーション(売上データ:多⇒Calendar:1)が完成します

これで売上データとカレンダーテーブルを一緒に活用できるようになりました

では、レポート画面で「マトリックス」を作成してみましょう

マトリックスの行にカレンダーテーブルの「YEAR」を配置します

YEARの配置もドラックで行います

そしてマトリックスの値に売上データの売上金額を配置します

すると上記の画像のように「年」毎に売上金額の合計が算出されています

これはカレンダーテーブルと「多:1」の紐づけが行われているからです

では試しに、リレーションを消してみます

すると、以下のように2021年も2022年も同じ金額になってしまいます

これは、年ごとの多:1の紐づけが行われないまま、単純に売上金額の合計が算出されるからです

<まとめ>

今回はカレンダーテーブル自体を作成しました

エクセルと違い、テーブルも列も一から作る点がとても斬新だと思います

ただ、これだけだとまだ実用的なカレンダーテーブルとはいえません

次回、調整を加えていきたいと思います

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

にほんブログ村

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

前年の値や累計値を自動計算する~カレンダーテーブルを活用するツアー~

今回はカレンダーテーブルを活用して、時系列に関わる計算を行っていきます

前回でカレンダーテーブルを活用する準備が完全に整った状態です

数字を語る時にかならず「比較」が必要となりますが、この比較を自動的に行えるようにしましょう!

今回から「メジャー」という仕組み使用します

このメジャーの仕組みはエクセルのワークシートにはない仕組みです

メジャーはテーブルでもなく列でもなく、?の箇所の数字を埋めてくれる仕組みです

あくまで前後の文脈が決まってから数字が計算されます

例えば、「今年の4月」の数字があったとしたら、前年の4月の数字を、「2021年」の数字があったとしたら「2020年」の数字を自動的に穴埋めする仕組みです

このメジャーをつかいこなせば、レポート作業は格段に効率化されます

前年の値を計算するメジャーを作成する

まずはメジャーをクリックしてみましょう!

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

すると、下の画像のように数式を入力できるようになります

ここからはカレンダーテーブルを作成した時の要領で行えます

前年 = CALCULATE(SUM(‘売上データ'[売上金額]),DATEADD(‘Calendar'[Date],-1,YEAR))

これで、前年のメジャーが作成されました

このメジャーをマトリックスの「値」に配置してみます

すると、マトリックスの時系列の表示に合わせ、前年の値が埋められて表示されます

この前年の値の式はCALCULATE関数を基にして計算されます

前年 = CALCULATE(SUM(‘売上データ'[売上金額]),DATEADD(‘Calendar'[Date],-1,YEAR))

CALCULATE関数内では、SUM関数が使用されていますが、このSUM関数で売上金額の合計金額が算出されます

但し、売上金額を算出する際に「DATEADD関数」でフィルター処理が行われる仕組みです

ちなみにDATEADD関数の真ん中に「ー1」が指定されていますが、こちらをー2に指定すると前々年の数字が算出されます

仮にDATEADD関数の真ん中「ー1」のままで「YEAR」を「MONTH」に置き換えると前月の数字が算出されます

累計の値を算出するメジャーを作成する

今度は累計を算出するメジャーをTOTALYTD関数を使用して作成してみましょう

計算式は次の通りとなります

累計 = TOTALYTD(SUM(‘売上データ'[売上金額]),’Calendar'[Date])

実際にマトリックスに配置してみると、確かに月ごとの加算は行われています

但し、4月の累計値は4月の数字で開始されていません

これは、累計処理が1~12月を会計年度として処理されているからです

こちらを4月~翌年3月の仕様に変えてみます

こちらは、累計処理の終了基準を「3/31」で明確に示しています

これで累計処理が正しく行われます

前年比などの指標

前年比などの指標はクイックメジャーで簡単に作成することができます

クイックメジャーの中には様々な指標があらかじめ準備されています

試しに「差の割合」をクリックしてみます

すると、右のフィールドの値を左側の該当箇所にあてはめれば計算が行われるようになっています

数字を当てはめて「OK」ボタンを押せばメジャーが設定されます

新しく作成されたメジャーをマトリクスに配置すると次のようになります

「前年との相違は売上金額 %」となっていますが、こちらは変更することができます

「前年との相違は売上金額 %」を選択し、数式バーから変更します

<まとめ>

今回は前年の数字などの数字を算出するメジャーを作成しました

このメジャーを使用するとレポート作業の効率は格段に向上します

今回のシリーズでカレンダーテーブル活用に関する一連の必要事項を紹介しました

ぜひ、実際に手を動かしてものにしてみましょう!

最後に、「年」⇒「月」と階層を変えるドリルダウンの仕組みはとても便利ですので、こちらも有効活用しましょう

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

にほんブログ村

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