(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の管理 を参照。
(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 #
(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"
(2005.8.28 更新)
現在のOpenOLAPの最新バージョンは、バージョン2.1.0。インストールは、基本的に『OpenOLAPインストールガイド』にある通りにすればできる。
まず、データベースユーザ、データベースを作成する。コマンドラインから実行してもいいし、pgAdmin IIIを使ってもよい。
PostgreSQLは、(MySQLと違い)一つのデータベースに複数のスキーマを持てる。OpenOLAPはそれを利用して、publicなどのスキーマに分析対象のデータ、oo_metaスキーマにストアドプロシージャを保存する。
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クエリを発行してテーブルを作成した。
下記サイトからダウンロードし、Tomcatのディレクトリ common/lib に配置する。現在の最新バージョンは、8.1-407 JDBC 3。
あらかじめ、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
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"
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行ある。
OpenOLAPでは、MOLAPとROLAPの両方が扱える。MOLAPは、あらかじめ詳細データ(ファクトテーブル)からキューブ (cube) を作っておき、リポートを見る側は、そのキューブに対してドリルダウン (drill down; 掘り下げる)、ロールアップ (roll up; 巻き上げる) を加えていく。
ロールアップのことを「ドリルアップ」と書いているサイトがあるが、掘り上げる?
ROLAPは、リレーショナルデータベースをそのままにしておき、リポーティングのときにいろいろな処理を加える。
MOLAPでは、ファクトテーブルに1行でも加わったらキューブを作り直さないといけない。一方、ROLAPでは、リポーティングが見るからに重そう。この辺りは、扱うデータの量などでどちらがいいかを考えることになりそう。
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 (以下略)
ファクトテーブルをディメンションと結びつける。
(この節、2006.7.4追加。)
今度は、キューブを作らずに、ROLAPとして分析できるようにしてみる。これも『OpenOLAP Model Designerトレーニングマニュアル』に沿って操作すると一通りのことができる。
TODO: