データベース設計(Access)

【中級者】Accessをより便利に活用するために必要な設計(バッチ集計)

この記事で学習できること
  • Accessでより便利に集計を行うための基本がわかる
  • Accessを使ったバッチ処理の方法がわかる

こんにちは。システム担当の父親、katsuです。
Excel歴20年、Access歴10年ですが、ブログ歴は2年です。
今回は、Accessに溜めたデータに価値を見出すための方法についてまとめました。

Accessなどのデータベースを運用させるために大事なことは、入力したデータをどうやって意味を見出せるかということです。
データベースを構築する場合、きっと何かの目的を持ってデータを溜めているはずです。
本記事では、データベースを構築するための基本的な考え方から、インプットからアウトプットへ変換する手順について、とても大事なところを紹介していきます。
更に、今回はAccess歴10年の経験から独自に見出した方法も紹介しますので、Accessの品質を上げたい方にとってきっと役に立つ内容です。

ただし、本記事はあくまでもAccessの基本が理解できている方が対象になりますので、「これからAccessの基礎を学びたい」という方は別の記事からごらんください。

Accessのデータを活かすために必要な考え方

Accessだけでなく、Excelや他のデータベースシステムにも共通して言えることですが、入力されたデータをどのような形に出力できるかが重要です。

例と挙げてみると

・購買データ入力の期間別の集計表
・点検データの最新情報一覧を表示

といったような感じで、さまざまな形にデータを加工したい時がありますよね?

入力されたデータの形を変えずそのまま活用するのはむしろレアケースではないでしょうか?
まずは、入力から加工を経て、出力を経てデータの中に隠れた価値がみえてくるということを知っておきましょう。

出力のテーブル構成を前もって考えておく

Accessでデータベースを作る場合、「正規化」を意識して設計しておくことは大事になりますが、さらに完成度を上げるためには、「正規化」だけにとどまっていてはいけません。
「どのような形式でデータを並べ替えて価値を見出したいのか」ということも、データベース設計を行うときには併せて考えておきましょう。

もし、本記事で「正規化」という言葉を初めて聞いたという方は、こちらの記事を先にごらんください。
Accessデータベース設計の基本(正規化)

出力を意識したときとそうでない時とは、データベースの完成度が大きく変わってきます。
何事においてもあてはまりますが、ゴールをあらかじめ設計しておいた方が、より早く、より楽に目的地に到達できますよね?

ゴールを意識していないということは、暗闇の中を灯りを持たずに進んだり、砂上の楼閣を作るようなものです。

目安は、出力データをそのままクロス集計できる直前くらいの状態までに加工しておきましょう。
項目をまとめすぎると後で細分化しづらくなりますので、Excelに出力してパワーピボットで視覚化するくらいが、よりシンプルで使いやすいでしょうね。
ピボットグラフで簡単にグラフを作ることができます。

当ブログではExcelパワーピボットについての記事も書いています。
ExcelのPowerPivotを使ってデータを見える化する

また、ピボットグラフの作り方については書籍「Excelパワーピボット」がとても分かりやすく、ダントツでおすすめです。
『Excelパワーピボット 7つのステップでデータ集計・分析を「自動化」する本』をAmazonでチェック

内容によっては先に進まないと見えないものもありますが、考えられる範囲で出力側を意識してデータベースの設計を進めることで、Accessデータベースの完成度を今よりさらに高めることができるでしょう。

中間テーブルと中間クエリを作って消す

どうやって入力側から出力側にデータを加工するかとういうことも大事ですね。

Accessの弱点は、選択クエリ(ビュー)を何段階にわたって作ることができてしまうことです。
一見便利なように見えますが、後先考えずにクエリを作ってしまうと、スパゲティコードならぬ「スパゲティクエリ」が出来上がってしまいます。
作り込む時はいいけど、改修する時に手を付けられない状態は最悪ですよね?

そんな事態を避けるためにも、バッチ集計用の中間オブジェクト(中間テーブルや中間クエリ)を活用することをおすすめします。
必要な時に作られた中間オブジェクトは用が済んだところで削除されます。
オブジェクトブラウザもごちゃごちゃせずスッキリします。

中間オブジェクトを設定するときは、どのような順番でテーブルに必要な情報を入れてあげればいいかを意識しておくといいです。
例えると、真っ白な紙にどうやって無駄なくデータを入れていくイメージでしょうか?
挿入クエリ(Inrert)やテーブル作成クエリ(select〜into)で大部分を作り、更新クエリで残りを少しずつ埋めていくことで、価値あるデータに加工されます。

流れが出来上がったら、中間オブジェクトの作成から削除までをVBAでコード化しておきましょう。
更新ボタンを押せば何度でも同じ動きを再現できます。

あと、中間オブジェクトを導入するときは、Accessファイルを毎回最適化できるよう設定しておいてくださいね。

最適化せずに何回もバッチ集計を行うと、ファイル容量が膨れ上がってしまいます。

一連の流れをコードマスタ用のテーブルにまとめておく

また、一歩進んだ手法として、SQL文をコードマスタに記録しておくこともおすすめです。

テーブルに書かれた情報を元に、VBA側でループのプログラムを組むことで同じ動作を実現できます
コードの行数も減らせますので、更に解析しやすいものに仕上がります。

下にテーブル構成の一例をまとめておきますので、興味ある方はぜひ参考にしてくださいね!

フィールド名動作・目的
番号SQLを実行する順番を記載する
SQL文実行されるSQL文そのものを記載
中間Obj作成中間オブジェクトを作成するかを判断させる
「クエリ」か「テーブル」が入力される
空白の場合、追加(Insert)や更新(Update)などのオブジェクトが不要な動作を実行
中間オブジェクト名作成される中間オブジェクト名をここに記載

まとめ

今回は、「Accessに溜めたデータを活かすための設計」について解説しました。
「出力を意識したデータベース設計」を実践すると、これまでのAccessとは見違えるほどメンテナンスしやすいものになります。
Accessを使ったデータベースをひととおり構築できるようになった方は、本記事を参考に更に質の高いAccessに挑戦してみてはいかがでしょうか?

本日もありがとうございました。

スポンサーリンク

-データベース設計(Access)