.mdbを.sqlに変換してRedashで活用する

Windows7でしか動かない販売管理ソフトとは?

私の入社する前に外注で作られた販売管理システムがある。Windows7専用のアプリケーションで、データベースはMicrosoft Accessを利用していると思われる。

新しいフォルダや、商品管理データ2といったディレクトリ階層を解読しながら抜けていくと、どうやら本番DBと思われるファイルを発見した。

その拡張子は、.mdbとなっており、どうやらAccess2007より前のバージョンかと推測された。

私自身にMicrosoftのアプリケーションを構築する能力がなく、強いて言うならWebアプリケーションしか作ったことがない。よってこれをWindows10に対応させたり、クラウド化するのは骨が折れる作業であった。

欲しいデータが取得できない問題

現状、Windows7専用のアプリとなった販売管理システム。「顧客名から販売履歴を検索したい!」と言った要望が出てきた場合、このアプリケーションにコードを追加する必要がある。しかし、販売管理システムをカスタマイズするには、次の問題があった。

  • IDEが必要
  • Microsoft 製品のコーディング知識

旧システムである現状の販売管理システムに関する知識を今から覚えるのは気が進まない。

そこで販売管理システムは活かしつつ、検索だけでも自由にできないかと考えた。そこで、OSSのBIツールでもあるRedashを用いて、現状の販売管理システムのデータを参照できないかと考えた。

Redashからデータ参照できるようにする

AWS Lightsail上にRedashを構築する方法

Redashは多くのデータソースに対応しているが、もちろん.mdb形式には対応していない。そこでまずは.mdb形式のデータを、慣れ親しんだ.sql形式に変換できないかと考えた。

現状の販売管理システムのデータが、MySQL化するだけで検索能力は飛躍的に向上するでしょう。

今回は、MDB/ACCDB Viewerというソフトを使って手動で.mdb.sql変換を行うこととした。作業の流れとしては次の通りである。

  1. 販売管理システムのデータ.mdbを、MDB/ACCDB Viewerを使用して.sqlに変換する
  2. .sqlファイルを、MySQLサーバに転送する
  3. RedashからそのMySQLサーバのデータを参照する
  4. 自由にクエリを書き、検索専用のミニマムアプリにように使う

これらの流れを行う。少なくとも1日1回はデータの抽出からインポートを行うので、若干面倒になった。そのあたりは、シェルスクリプトを作成し、コマンド一発で実行できるような環境を用意。

#!/bin/sh

cd `dirname $0`
mv ./data/商品管理.sql ./data/admin.sql

echo "File Formatting..."
sed -i -e 's/UTF8/UTF8MB4/g' ./data/admin.sql

echo "admin.sql >>> Glue server..."
scp ./data/admin.sql redash:/opt/redash/maki-data/data/admin.sql
CONTAINER_ID=`ssh redash "cd /opt/redash/maki-data && sudo docker-compose ps -q db"`
ssh redash "sudo docker cp /opt/redash/maki-data/data/admin.sql $CONTAINER_ID:/data/admin.sql"

echo "scripts copy..."
ssh redash "sudo docker cp /opt/redash/maki-data/db/script $CONTAINER_ID:/"

echo "UPDATE..."
ssh redash "sudo docker exec $CONTAINER_ID /script/update_admin.sh"

Redashで統計分析やデータ検索が高速化!

Redashを導入することによって、素早く顧客データにアクセスできるだけでなく、統計分析も行えるようになった。Windows7専用の販売管理システムでは統計分析はできなかったが、過去のデータは蓄積されていたので過去10年以上の販売データが統計分析に役立っている。例えば次のような恩恵が受けられた。

  • 週毎の売上データで、週間進捗を確認
  • 顧客名をlike検索して素早く購入履歴にアクセス
  • 商品分類別売上

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です