「Elixir Report」をWebアプリケーション向けのクエリ/レポートツールとして活用する 4ページ

レポートを作成する

 また、データソースを元にPDFを出力するためのレポートも作成しておく。作業的には『コードを記述することなしにデータを表やグラフとして出力できる帳票ツール「Elixir Report」』記事や「Elixir Report」を使ってクラウド上のデータをグラフ化してみよう』記事で紹介した手順と変わらないので詳しくは割愛するが、今回はチャートタイプとして「エリアグラフ」を使用した(図26)。

図26 チャートタイプとして「エリアグラフ」を使用する
図26 チャートタイプとして「エリアグラフ」を使用する

 グラフのキーには「Date」列を、値には「PageViews」「Sessions」「Users」「NewUsers」列を使用した(図27、28)。

図27 グラフのキーとして「Date」を指定する
図27 グラフのキーとして「Date」を指定する
図28 「値」には「PageViews」および「Sessions」、「Users」、「NewUsers」を指定する
図28 「値」には「PageViews」および「Sessions」、「Users」、「NewUsers」を指定する

 また、「エリア」タブの「値」で「データの反転」にチェックを入れておく。これにより、「PageViews」および「Sessions」、「Users」、「NewUsers」という4つのデータを同じグラフ上に並べることができる(図29)。

図29 「エリア」タブの「値」で「データの反転」にチェックを入れる
図29 「エリア」タブの「値」で「データの反転」にチェックを入れる

 この設定で生成したレポートは図30のようになる。

図30 生成されたレポート
図30 生成されたレポート

レポートサーバーの設定

 以上でレポートデザイナ側での作業は完了だ。最後にレポートサーバーを起動して、データソースやレポートテンプレートが格納されているディレクトリをファイルシステムとして登録しておく(図31)。

図31 「管理」-「ファイルシステム」でデータソースやレポートテンプレートが格納されているディレクトリを登録しておく
図31 「管理」-「ファイルシステム」でデータソースやレポートテンプレートが格納されているディレクトリを登録しておく

 また、必要に応じてアプリケーションからアクセスするためのアカウントを作成したり、レポートの生成テストを行っておくと良いだろう。これらの作業についても、『コードを記述することなしにデータを表やグラフとして出力できる帳票ツール「Elixir Report」』記事で紹介しているので詳しくはそちらを確認してほしい。

 なお、筆者が試したところ、レポートの生成時などに「java.lang.OutOfMemoryError: PermGen space」といったエラーが発生してサーバーの挙動が不安定になることがあった。これは、Java仮想マシンのPermGen領域が不足していることで発生するエラーだ。これを回避するには、Elixir Reportのインストールディレクトリ(デフォルトでは「C:\Program Files\ElixirReport8.4JT」)以下の「bin」ディレクトリ内にある「reportserver-start.lax」ファイルを修正すれば良い。

 具体的には、次のように「lax.nl.java.option.additional=」で始まる行に、「-XX:MaxPermSize=128m」というオプションパラメータを追加する。

lax.nl.java.option.additional=-mx512M -XX:MaxPermSize=128m -Duser.home=../license -Delixir.home=../server -Delixir.ext=../ext -Delixir.config=../server/config -Djava.security.auth.login.config=../server/config/auth.conf -Djava.security.policy=../server/config/java2.policy

アプリケーションおよびクライアント側の作成

 今回作成したアプリケーションはPythonで実装されており、アプリケーションフレームワークとして「tornado」を使用している。「server_app.py」がアプリケーション本体で、「report_server.py」にはレポートサーバーへのアクセスを行うためのコードが記述されている。また、クライアント側のHTMLおよびJavaScriptコードはそれぞれindex.htmlおよびindex.jsファイルに記述されている。

 Pythonの使い方が本記事のメインではないため、コードの紹介についての詳細は割愛するが、アプリケーションサーバーの「/」にアクセスするとアプリケーションのメインページが表示される。このメインページでは図32のようにフォームが表示されており、ここで年と月を指定して「Show」ボタンをクリックすると、AJAXで「/data/traffic?y=<指定された年>&m=<指定された月>」というURLに対しデータを取得するリクエストを送信する。

図32 サンプルアプリケーションのトップ画面
図32 サンプルアプリケーションのトップ画面

 アプリケーションサーバー側では「/data/traffic?y=<年>&m=<月>」というURLに対するリクエストを受信すると、レポートサーバーにリクエストを送り、traffic_and_pageview_monthly_cachedデータソースを使って指定された月のデータを取得してそれをXML形式で返す。これをクライアント側が受け取り、そのXMLデータを元にWebブラウザのCanvas機能を利用してグラフを描画する(図33)。

図33 年と月を指定して「Show」ボタンをクリックすると、その月のトラフィックデータがグラフ表示される
図33 年と月を指定して「Show」ボタンをクリックすると、その月のトラフィックデータがグラフ表示される

 また、「Show」ボタンでは無く「PDF」ボタンをクリックすると、「/pdf?y=<指定された年>&m=<指定された月>」というページに遷移する。アプリケーション側ではこのリクエストに対し、指定された月を元にstart_dateやend_dateパラメータを作成してレポートサーバーにPDF形式でのグラフ出力をリクエストし、それをクライアントに返す、という処理を行う(図34)。

図34 年と月を指定して「PDF」ボタンをクリックすると、その月のトラフィックデータのレポートがPDF形式で表示される
図34 年と月を指定して「PDF」ボタンをクリックすると、その月のトラフィックデータのレポートがPDF形式で表示される

 これらの詳細についてはOSDN.JP上の筆者リポジトリで公開されているサンプルコードを確認してほしい。

 また、今回はトラフィックに関するレポートを例として使用したが、データソースで指定したSQL文やレポートテンプレートを修正するだけで簡単に別のグラフを表示させることも可能だ。たとえば図35は、サイトへのアクセスに使用されたWebブラウザ比率情報を取得し、それを円グラフで表示させた例だ。

図35 アクセスに使用されたWebブラウザ比率グラフ
図35 アクセスに使用されたWebブラウザ比率グラフ

 このように、簡単に表示するデータ内容やグラフを変更できるのもElixir Reportのメリットと言えるだろう。

柔軟なデータの操作機能やキャッシュ機能でデータの扱いが容易に

 今回はElixir Reportのデータソース関連機能を中心に、WebアプリケーションでElixir Reportを活用する方法を紹介した。このように、データの処理部分に関してはほとんどコードを記述することなしに、GUIでパラメータを指定するだけで実装でき、さらにキャッシュまでも行うことが可能だ。これら処理を独自に実装しようとするとそれなりに工数がかかるため、これだけでもElixir Reportを活用するメリットはある。

 また、Elixir ReportはJavaベースで実装されているが、このようにJava以外の言語で実装されたアプリケーションとの連携も容易だ。すでにJava以外の言語で実装されたアプリケーションにレポート出力機能を追加する場合などにも利用できるだろう。

 Elixir Reportは無償のトライアル版も提供されており、すべての機能が一定期間制限なしに利用可能だ。トライアル版のライセンス申請はGrapeCityのElixir Reportページから行えるので、興味を持たれた方はぜひ試してほしい。