レポートで売上グラフなどダッシュボードをつくる。美容室向け顧客管理システム 開発日記14日目

2020/06/20

ダッシュボード機能

Accessでの開発。顧客管理と顧客ごとの売上入力ができると、それをまとめたくなります。日別、月間の売上グラフ。担当者ごとの売上一覧。客数や客単価の分析。せっかくデータがあるのに使わないのはもったいない。

百聞は一見に如かず。できたのはこんな感じのダッシュボードです。(当たり前のように言ってますが、ダッシュボードってなんやねん?ってことですが、まあ情報を一目でわかるようなものってイメージもってます。)

こういうグラフが簡単にできるのがAccessの良いところですが、あまり使われているところをみかけませんね。ともかく、グラフを作るにはデータが必要ですから、その元をクエリで作ってやります。

このクエリの中身は以下のようになっています。

とてもシンプルです。凝っているのは抽出条件につかっているDateSerialでしょう。DateSerialはかっこの中に、年、月、日が並びます。Year、Month関数は年月日から年、月も数字だけを取り出す関数。

よく見るとYearの後ろで1を引いてます。日のところには1を直接入力しています。つまり、1年前のその月の1日を示しています。>=なので、昨年同月の1日以降を指定していることになります。

グラフをつくるにはレポートをつかう

グラフの追加についてはいまいちわかりにくい場所にあります。まずはレポートを新規作成します。リボンメニューの「作成」の中にある「空白のレポート:をつかえばOKです。

ここがポイント!レポートが開けたら、タブ部分を右クリックして「デザインビュー」で開きます。

クリックで拡大

「グラフの挿入」をクリックすると、挿入できるグラフの種類が現れるので、適当なグラフを選択します。どこに配置するか選べるようになりますので、画面の適当な場所においてやります。サイズもグラフの種類もあとでプロパティで修正できるので適当でよいです。

最初に表示されているグラフはダミーなので、右側に表示された「グラフの設定」でデータソースを選択します。データソースは先ほどクエリで用意した日付ごとの売上一覧です。「Dash_日別売上」という名前をつけていたので、選択してやります。

クリックで拡大

データソースを選択すると、軸の選択ができるようになります。

軸(項目)というのは横軸です。「売上日(月)」となっています。下にある軸(Y軸)が縦軸。こちらは「売上(合計)」にします。

つまり、これだけで1か月ごとの売上合計をグラフにできるわけです。感がよい方ならもうお分かりですね? 合計以外にも「カウント」や「平均」が選択できることを。つまり同じ手順、同じデータで売上だけでなく客数のグラフを作ることができました。

こんどはグラフの設定から「書式」を選んでやります。「データラベルを表示」にチェックをいれるだけで、月ごとの売上合計が表示されました。グラフの色もここから変更することができます。

グラフのタイトルなどは「プロパティシート」で編集します。「グラフのタイトル」という項目をかえてやると、グラフのタイトルが変化します。凡例は今回のグラフでは要素が1つで役にたたないので、「いいえ」に切り替えてやると、グラフが大きくなって見やすくなりました。

クエリの期間を変えれば様々な切り口で分析できる。

ところで、プロパティのデータを見ると、データソースにSQL文字列が入っているのがわかります。

SELECT Format([売上日], "yy 年 mmm"), Sum([売上]) AS [SumOf売上] FROM [Dash_日別売上] GROUP BY Format([売上日], "yy 年 mmm"), Year([売上日])12 + Month([売上日])-1 ORDER BY Year([売上日])12 + Month([売上日])-1

これならお尻にWHEREをつけてやれば期間の指定もできるかな?と思ったのですが、残念ながら読み込み専用ということで追記ができませんでした。

仕方がないので、参照するSQLを期間に合わせて別に作ってやることにします。方法は簡単で、最初につくったクエリの条件を変えてやるだけです。

期間の指定をするときには、以下をサンプルにつかうとよいでしょう。

前年同月の1日以降~現在まで

>=DateSerial(Year(Date())-1,Month(Date()),1)

前年同月の1日~月末

Between DateSerial(Year(Date())-1,Month(Date()),1) AND  DateAdd("m",-11,DateSerial(Year(Date()),Month(Date()),1))-1

本年1月1日~現在

>=DateSerial(Year(Date()),1,1)

当月1日~現在

>=DateSerial(Year(Date()),Month(Date()),1)

前月1日~前月末

Between DateAdd("m",-1,DateSerial(Year(Date()),Month(Date()),1)) And DateSerial(Year(Date()),Month(Date()),1)-1

前年1月1日~前年年末

Between DateSerial(Year(Date())-1,1,1) And DateSerial(Year(Date())-1,12,31)