OpenOLAPを使う

(2004.12.31新規作成。)
(2005.8.28, 2007.8.9 更新。)

OpenOLAPはオープンソースのOLAPソフトウェア。例えば、販売実績、費用実績を、製品別、販売経路別、月別といった切り口(軸)を組み合わせて表・グラフにすることができる。

OpenOLAPは、Apache Tomcat 上で動く。また、バックエンドのDBMSとしてPostgreSQLを使う。PostgreSQLに販売実績・費用実績などのデータを流し込んだり、製品テーブルや販売経路テーブルを作ったりするのは、OpenOLAPの範囲外となっていて、別途手当てが必要。

クライアントのWebブラウザはInternet Explorerでなければならない。Mozillaは不可。

下準備

(この節、2006.7.2更新。)

この節では、OpenOLAPの実行に必要な、PostgreSQL, Tomcatをインストールする。

PostgreSQLのインストール

PostgreSQLの管理 を参照。

jdkのインストール

(2007.8.23 追記。)

Fedora 7には、gcj版のJava VMが含まれている。しかし、これはOpenOLAPを走らせたときにエラーになるので、Sunのサイトからjdk (Java Platform Development Kit) Standard Edition (SE) をダウンロードしてきて、インストールする。

Java 6 (jdk-1.6.0_02) をインストールしてみた。rpm.binファイルをダウンロードしてきて、実行するだけ。

フォントが文字化けして豆腐になってしまう。kochiフォントを想定しているのが原因。次のようにfallbackディレクトリを掘り、リンクを張ればOK。

# cd /usr/java/jdk1.6.0_02/jre/lib/fonts/
# mkdir fallback
# ln -s /usr/share/fonts/japanese/TrueType/sazanami-*.ttf fallback
# ls fallback
sazanami-gothic.ttf  sazanami-mincho.ttf
# 

Tomcatのインストール

(2007.8.9 更新。)

Fedora 7にはTomcat5-5.5.23 (gcj版) のパッケージが含まれている。これをインストールするのが一番簡単。yumコマンドでインストールする。

# yum install tomcat5

Linuxディストリビューションによっては、Tomcatのパッケージがないかもしれない。そのときは、(1) Tomcatのサイトで配布しているバイナリパッケージを使うか、(2) 何かにバンドルされているバイナリを使う。

Tomcatのサイトはこちら;

OpenOLAPを試すだけなら、Tomcat Web Server Connectors はなくても大丈夫。バイナリ版をダウンロードして、bin/startup.sh (Windowsではstartup.bat) を実行する。

何かにバンドルされているものだと、例えば、NetBeans IDE 5.0にはTomcat 5.5.9が添付されている。

話を戻して、Fedora 7では、/usr/bin/tomcat5 がインストールされるが、起動するときはこれではなく、/etc/rc.d/init.d/tomcat5 を使う。

設定ファイルのほうも、/etc/tomcat5/tomcat5.conf は触らない。/etc/sysconfig/tomcat5 ファイルを編集する。

JAVA_HOME, JAVA_OPTS などを設定する。JAVA_HOME の初期値は"/usr/lib/jvm/java" で、

/usr/lib/jvm/java -> 
    /etc/alternatives/java_sdk ->
        /usr/lib/jvm/java-1.5.0-gcj
となっていて、gcj版のJavaを指している。SunのJava VMを使うように指定する。
JAVA_HOME="/usr/java/latest"

OpenOLAPのインストール

(2005.8.28 更新)

現在のOpenOLAPの最新バージョンは、バージョン2.1.0。インストールは、基本的に『OpenOLAPインストールガイド』にある通りにすればできる。

データベースユーザ、データベースの作成

まず、データベースユーザ、データベースを作成する。コマンドラインから実行してもいいし、pgAdmin IIIを使ってもよい。

  1. データベースユーザolapの作成 -- パスワードは省略してはいけない。MetaToolのインストールで進めなくなる。
  2. データベースopenolapを作成する -- エンコーディングEUC-JP、所有者olap
  3. データベースopenolapに、スキーマoo_metaを作成 -- oo_metaのオーナー(所有者)はolapにする。

PostgreSQLは、(MySQLと違い)一つのデータベースに複数のスキーマを持てる。OpenOLAPはそれを利用して、publicなどのスキーマに分析対象のデータ、oo_metaスキーマにストアドプロシージャを保存する。

MetaToolの実行

WindowsではMetaTool.jarファイルをダブルクリックしてMetaToolを起動してもよい。Linux(Windowsのコマンドプロンプトでも同じ。)では次のようにする。

set CLASSPATH=MetaTool.jar
java MetaTool
あるいは
java -jar MetaTool.jar

PostgreSQL接続情報で、スキーマ名はoo_metaにする。

エラーが発生した場合は、MetaTool.jarと同じディレクトリにmetaTool.logが生成されるので、それを見る。私が試したときは、CREATE TABLEのコメント「〜」の文字コードの問題で、エラーが1件(付随してもう1件)発生した。pgAdminで直接SQLクエリを発行してテーブルを作成した。

JDBCドライバのインストール

下記サイトからダウンロードし、Tomcatのディレクトリ common/lib に配置する。現在の最新バージョンは、8.1-407 JDBC 3。

Tomcatへのアーカイブの配置

あらかじめ、Tomcatサーバが正しく実行でき、localhost:8080にWebブラウザでアクセスできるかどうか確認しておく。

WAR (.war) ファイルをtomcatのwebappsディレクトリに置くと、server.xmlの設定によってはすぐさま自動的に展開される。手動で展開する場合はwebappsディレクトリにWARファイルを置いておかないこと。

mkdir openolap-designer
cd openolap-designer
jar xvf <OpenOLAPのpath>/exe/designer/designer.war

WARファイルの自動展開

Tomcat 5.0では、Hostコネクタ(server.xmlファイルのHostタグ)のautoDeploy、unpackWARs属性による。

autoDeploy="true"の場合は、server.xmlに各Webアプリケーションを表すコンテキスト (Context) 要素を明示的に書かなくても、自動的にデプロイ(配備;利用可能な状態にする)してくれる。

autoDeploy="true"かつunpackWARs="true"のとき、appBaseで指定されるディレクトリにアーカイブと同名のディレクトリがない場合には、自動的にディレクトリが作成され、アーカイブが展開される。また、WARファイルを更新した場合には、(Tomcatが実行中であればすぐさま)自動的に同名のディレクトリが削除され、アーカイブが再展開される(Tomcat 5.0.30-betaでの挙動)。ということは、設定ファイルなどをWebアプリケーションのディレクトリに置く運用は、難しいように思える。

unpackWARs="false"のときは、WARファイルのまま直接実行される。

workers2.propertiesファイルは、Tomcat Web Server Connectors を使わないときは、不要。

設定ファイルの編集

webapps/ModelDesigner/login.ini ファイルを次のように編集する。Windowsの場合、パス区切りは「\」を使い、文字コードはシフトJISでいい。

[Environment]
DESIGNER_CLASSES_PATH=c:\netbeans-4.1\enterprise1\jakarta-tomcat-5.5.7\webapps\ModelDesigner\WEB-INF\classes
JDBC_DRIVER=c:\netbeans-4.1\enterprise1\jakarta-tomcat-5.5.7\common\lib\postgresql742.jar

[Connect 1]
LIST_NAME=メタ1
USER_NAME=olap
SCHEMA_NAME=oo_meta
CONNECT_SOURCE=jdbc:postgresql://localhost:5432/openolap

ReportDesigner, Viewerは、それぞれconf/Catalina/localhost/ReportDesigner.xml ファイルを編集してデータベースのホスト名、データベースユーザ、パスワードを設定する。

ここで一度、ModelDesigner (MOLAP, ROLAPとも), ReportDesigner, Viewerにログインできるかどうか確認しておく。

サンプルデータの登録

OpenOLAPにはサンプルデータが用意されている。pg_restore でデータをリストアする。

Windowsでは、pg_restoreでエラーになってリストアできなかった。pg_restore: [archiver (db)] connection to database "openolap" failed: FATAL: password authentication failed for user "olap"

Note.

PostgreSQL 8.0.4でこのバグは修正されている。pg_restoreで復元できる。

サンプルデータのスキーマ図は、OpenOLAPドキュメントの sample_data_mart.pdf にある。psqlで表示すると、テーブルは下記12ヶ。

openolap=> \d
            List of relations
 Schema |      Name      | Type  | Owner 
--------+----------------+-------+-------
 public | channel        | table | olap
 public | fact_sales     | table | olap
 public | geog_account   | table | olap
 public | geog_customer  | table | olap
 public | geog_industry  | table | olap
 public | geog_mfg       | table | olap
 public | geog_region    | table | olap
 public | geog_territory | table | olap
 public | prod_class     | table | olap
 public | prod_family    | table | olap
 public | product        | table | olap
 public | self_ref       | table | olap
(12 rows)

fact_salesがファクトテーブル (fact table)。また、ディメンション (dimension) として、製品 (productテーブル)、販売チャネル (channelテーブル)、地域(geog_customer) がある。製品ディメンションは、[製品クラス]→[製品ファミリー]→[製品]の3レベルとなっている。

fact_salesテーブルには、データが193,248行ある。

MOLAPとROLAP

OpenOLAPでは、MOLAPとROLAPの両方が扱える。MOLAPは、あらかじめ詳細データ(ファクトテーブル)からキューブ (cube) を作っておき、リポートを見る側は、そのキューブに対してドリルダウン (drill down; 掘り下げる)、ロールアップ (roll up; 巻き上げる) を加えていく。

ロールアップのことを「ドリルアップ」と書いているサイトがあるが、掘り上げる?

ROLAPは、リレーショナルデータベースをそのままにしておき、リポーティングのときにいろいろな処理を加える。

MOLAPでは、ファクトテーブルに1行でも加わったらキューブを作り直さないといけない。一方、ROLAPでは、リポーティングが見るからに重そう。この辺りは、扱うデータの量などでどちらがいいかを考えることになりそう。

キューブの構築 (MOLAP)

OpenOLAP 2.1では、ファクトテーブルとディメンションテーブルからキューブを構築するところまでをOpenOLAP Model Designer(アプリケーション=MOLAP)で、その後をOpenOLAP Report Designer / Viewerで操作する。

『OpenOLAP Model Designerトレーニングマニュアル』に沿って操作すると、キューブ構築までの一通りのことができる。

次の画像は、OpenOLAP Designerでの、ディメンションの設定画面である。GUIで、ディメンションテーブルをディメンションとして指定することができる。

次の画像は、その内容を表示させたところ。ディメンションは、このように、階層構造になっていることが多い。

fact_salesテーブルの内容は、次のようになる。これは、明細データではなく、すでに日単位で集計されている。

すでに述べたように、fact_salesテーブルの売上高(sales)および費用(costs)への集計は、別途、行わなければならない。この時点で、一定の集計を行うことになる。(個別の販売データまではファクトテーブルとしては持たない。)

openolap=> select * from fact_sales;
    time    | time_id | prod_id | geog_id | chan_id | units | sales  | costs  |  quota  
------------+---------+---------+---------+---------+-------+--------+--------+---------
 2001-12-31 | TT46    | PP11    | GG10    | CC2     |    13 |  33171 |  34994 |   23351
 2002-01-31 | TT47    | PP11    | GG10    | CC2     |    11 |  28391 |  27581 |   22843
 2002-02-28 | TT48    | PP11    | GG10    | CC2     |    11 |  28772 |  28517 |   22438
 2002-03-31 | TT49    | PP11    | GG10    | CC2     |    12 |  31571 |  32958 |   21765
 2002-04-30 | TT50    | PP11    | GG10    | CC2     |    10 |  25727 |  25814 |   22345
 2002-05-31 | TT51    | PP11    | GG10    | CC2     |    12 |  31065 |  31860 |   19550
 2002-06-30 | TT52    | PP11    | GG10    | CC2     |     8 |  20518 |  21804 |   26618
 2002-07-31 | TT53    | PP11    | GG10    | CC2     |    21 |  53678 |  57389 |   29756
 2002-08-31 | TT54    | PP11    | GG10    | CC2     |    17 |  43474 |  43879 |   39822
 2002-09-30 | TT55    | PP11    | GG10    | CC2     |    24 |  60325 |  63788 |   36646
(以下略)

ファクトテーブルをディメンションと結びつける。

ROLAPでのモデリング

(この節、2006.7.4追加。)

今度は、キューブを作らずに、ROLAPとして分析できるようにしてみる。これも『OpenOLAP Model Designerトレーニングマニュアル』に沿って操作すると一通りのことができる。

データを分析する

TODO:

外部リンク

SourceForge.jp: Project Info - OpenOLAP
OpenOLAPの配布サイト。
[ThinkIT]システム企画担当者のためのBIシステム導入の勘所 第1回:BIの世界を体験する−イントロダクションオープンソースBIツールOpenOLAP
OpenOLAPを使った、基本的な分析ツールの解説。