複数シートを含むExcel出力についてはpagebreak機能がご使用いただけます。

具体的には、
スタイル>page-behaviorグループ内にある、pagebreak-beforeもしくはpagebreak-afterの値を「true/false」で設定します。

18100101.PNG


pagebreak-beforeは対応する要素に対し、その要素の前にブレイクを設定し、要素の表示前から次のシートに表示させるものです。
pagebreak-afterは対応する要素に対し、その要素の後にブレイクを設定し、要素の表示後から次のシートに表示させるものです。

たとえば、
レポート内に垂直に2つ並べられたサブレポートがあり、サブレポートごとにシートを分けたい場合は

・1つ目のサブレポートを選択後、pagebreak-afterにtrueを設定いただく
・2つ目のサブレポートを選択後、pagebreak-beforeにtrueを設定いただく

のいずれか1つとなります。


どちらも、1つ目と2つ目の間にブレークを設定するものですので、
出力結果は同じものとなります。

さらに、出力されるシートに名前をつける場合は、
名前を付けたいサブレポートを選択し、スタイル>excel>sheetnameの値に名前を入力することで
シート名を付けることが可能です。

18100102.PNG


JFree chartを使用しグラフオプションにない設定を追加することができます。
ここはその一例としてサンプルファイル「Bar Line chart」の折れ線に数値ラベルを表示させるカスタマイズを行います。

まずサンプルレポートをプレビューします。
ご覧の通り、折れ線グラフに数値ラベルはありません。
折れ線グラフの設定可能なオプションにない設定は
標準機能では実現できません。

18060100.PNG

ですが、「Scripting」機能を使用することで、グラフオプションにない項目でも
JFree chartで実現できる範囲において技術的に実現可能です。

「Scripting」を使用する場合は、チャートをダブルクリックし編集ダイアログを表示させます。
左ペインの最下部「Scripting」の「Chart Post-Processing Script Language」項目でValueのドロップダウンリストより使用スクリプトを設定します。
次に「Chart Post-Processing Script」項目のvalueのボタン「...」をクリックし、スクリプトソースを入力します。
ソースはこちらのJava Docを参照し作成します。

18060101.PNG

折れ線グラフの数値ラベルを表示させるために、ここでは次のように入力しています。

Chart Post-Processing Script Language : beanshell
Chart Post-Processing Script :
---
 chart.getCategoryPlot().getRenderer(1).setBaseItemLabelsVisible(true);

 

// 数値ラベルのフォーマット定義

//chart.getCategoryPlot().getRenderer(1).setBaseItemLabelGenerator(new org.jfree.chart.labels.StandardCategoryItemLabelGenerator("{2}", new java.text.DecimalFormat("#,###")));

 

// 数値ラベルのフォーマット定義(よりシンプル)

chart.getCategoryPlot().getRenderer(1).setBaseItemLabelGenerator(new org.jfree.chart.labels.StandardCategoryItemLabelGenerator());


---


入力後、OKボタンで閉じてレポートをプレビューすると、

折れ線グラフの数値ラベルが表示されます。

18060102.PNG


その他、setBaseItemLabelPaintメソッドを使用して、
数値ラベルに色を付けることも可能です。
あらかじめ用意された使用可能なメソッドを活用し、
より便利で見やすいグラフを作成してみてはいかがでしょうか。



PDIの暗号化・復号化ステップを使用して、ファイルやデータを暗号化・復号化してみます。

■暗号化の準備
1.GPGツールを端末にインストールします。
フリーソフトなので寄付なしでもダウンロード可能です。

2.ダウンロード後インストールします。設定はデフォルトで結構です。

3.ツールを起動しファイルから個人用のオープンキーを作成します。
名前、メールアドレス(ダミーでも構いません)、パスフレーズを設定します。
18050100.PNGのサムネール画像
準備はここまでです。

■ファイルを暗号化する
PDIより新規JOBを作成します。
「START」を起点とし、暗号化ファイルの「ファイル暗号化(PGP)」を配置し、最後に「成功」を配置します。
以下のようなフローになります。
18050101.PNG

「ファイル暗号化(PGP)」の設定は以下のようになります。

「GPGロケーション」にはGPGのツールのパスを設定します
(デフォルトではC:\Program Files (x86)\GnuPG\bin\gpg.exe)

「ソースファイル/フォルダ」には暗号化の対象のファイルパスあるいはフォルダパスを設定します。

「ユーザーID」には作成したキーのメールアドレスを設定します。

「出力先ファイル/フォルダ」には暗号化後のファイルを格納するファイルパスあるいはフォルダパスを設定します。

設定後実行すると暗号化されたファイルが出力されます。
暗号化されたファイルは復号化しない限り開けません。

■ファイルを復号化する
PDIより新規JOBを作成します。
「START」を起点とし、暗号化ファイルの「ファイル復号化(PGP)」を配置し、最後に「成功」を配置します。以下のようなフローになります。
18050102.PNG

「ファイル復号化(PGP)」の設定は以下のようになります。

「GPGロケーション」にはGPGのツールのパスを設定します
(デフォルトではC:\Program Files (x86)\GnuPG\bin\gpg.exe)

「ソースファイル/フォルダ」には復号化の対象のファイルパスあるいはフォルダパスを設定します。

「出力先ファイル/フォルダ」には復号化後のファイルを格納するファイルパスあるいはフォルダパスを設定します。

設定後実行すると復号化されたファイルが出力されます。
復号化されたファイルは通常に開くことができます。

■データを暗号化する
PDIより新規データ変換を作成します。
「テーブル入力」を起点としSampleDataのCUSTOMERSテーブルのデータを入力します。
暗号化の「PGPで暗号化」を配置し、最後に「ダミー」を配置します。
以下のようなフローになります。
18050103.PNG

「PGPで暗号化」の設定は以下のようになります。

「GPGの場所」にはGPGのツールのパスを設定します
(デフォルトではC:\Program Files (x86)\GnuPG\bin\gpg.exe)

「キー名」にはキーの名前を設定します。

「データフィールド名」には暗号化したいフィールを設定します。

「結果フィールド名」には暗号化後のデータのフィールド名を設定します。

設定後、実行すると暗号化されたデータが出力されます。
暗号化されたデータは復号化しない限り閲覧できません。

■データを復号化する
先ほどのデータ変換の「PGPで暗号化」と「ダミー」の間に「PGPで復号化」を配置します。
以下のようなフローになります。
18050104.PNG

「PGPで復号化」の設定は以下のようになります。

「GPGの場所」にはGPGのツールのパスを設定します
(デフォルトではC:\Program Files (x86)\GnuPG\bin\gpg.exe)

「パスフレーズ」にはキーのパスフレーズを設定します。

「データフィールド名」には復号化したいフィールを設定します。

「結果フィールド名」には復号化後のデータのフィールド名を設定します。

設定後、実行すると復号化されたデータが出力されます。
復号化されたデータは暗号化する前のそれと一致します。

データのマスキングなど、これらの暗号化や復号化のステップを使用することで、
簡単に実装できるのでぜひお試しください。


レポートデザイナーのManual Linkingを使用したハイパーリンクの方法をご紹介します。

まず、ハイパーリンクを設定したいオブジェクトを選択し、
右クリックから「ハイパーリンク」を選択します。

「位置:」には「Manual Linking」を選択します。
Manual Linkingではリンク、タイトル、ウィンドウに対して、固定値、あるいはフォーミュラを使用した可変値を設定できます。

ここでは、リンクに対してフォーミュラを使用し環境変数やパラメータ変数をPathに使用してみます。

■環境変数を使用する
環境変数として「pentahoBaseURL」があります。
こちらを使用することで、ベースURLにおいて、パブリッシュ先のサーバとレポートとの間の依存関係をなくすことができます。

例えば、以下のようなパスのレポートへのリンクがあるとします。
http://localhost:8080/pentaho/api/repos/home/admin/sample.prpt/viewer

この場合、デフォルトのベースURLは「http://localhost:8080/pentaho/」のため、

=["env::pentahoBaseURL"] & "api/repos/:home:admin:sample.prpt/viewer"

というように表記できます。

なお、pentahoBaseURLの変更方法については、以下の通りです。
ツールまたはサーバを停止し、下記のファイルを編集後、再起動します。

レポート側のBaseURL
場所:design-tools\report-designer\resources
ファイル:classic-engine.properties
定義箇所:org.pentaho.reporting.engine.classic.core.environment.pentahoBaseURL
 =http://localhost:8080/pentaho/

サーバー側のBaseURL
場所:server\pentaho-server\pentaho-solutions\system
ファイル:server.properties
定義箇所:fully-qualified-server-url=http://localhost:8080/pentaho/

■リンク先にパラメータを渡す

リンク先のレポートがパラメータを要求する場合は、URLにそのパラメータを追記します。
遷移元のパラメータ「AAA」と「BBB」を、遷移先のパラメータ「pAAA」と「pBBB」に渡す場合は次のようなフォーミュラになります。

=OPENINMANTLETAB(CONCATENATE(["env::pentahoBaseURL"] & "api/repos/:home:admin:sample.prpt/viewer?output-type=text/html"; "&pAAA=";TEXT([AAA]);"&pBBB=";TEXT([BBB]););"Link Report")


■Pathの一部を変数にする
Pentaho社より提供されている機能として、Pathに変数を扱える唯一方法は環境変数の「pentahoBaseURL」を使用することですが、次のような方法でPathの一部を変数にすることもできます。

=OPENINMANTLETAB(CONCATENATE(["env::pentahoBaseURL"] & ["pURL"] & "sample_JP.prpt/viewer?output-type=text/html";);"Link Report")

ここでは、「api/repos/:home:admin:」を変数「pURL」とし、
レポートに下記の"隠しパラメータ"を作成することで変数の値を設定しています。

名前:pURL
値形式:String
デフォルト値:api/repos/:home:admin:
プロンプトの表示:隠す

このようにManual Linkingを使用することで、Pathの一部を変数にすることができます。

表の段違い表示を防ぐ方法

|
レポートデザイナーで表を作成すると次のように行高さが段違いになることがあります。
データの長さなどに差があるとこのように表示されます。

18040102.PNG

このように表示されるのは、以下のように「height」を固定の20にしているためです。

18040101.PNG

行の高さを段違いにしないためには、この「height」を%で指定します。
ここでは100%に設定してみます。

18040103.PNG

すると、段違いであった行が綺麗に揃うようになります。

18040104.PNG

レポートウィザードを使用してレポートを自動で作成した場合でも、
このように「height」は%で指定されています。
他のスタイルや属性の設定方法の参考にもなりますので
レポートウィザードでレポート出力して確認してみるのもおススメです。



サブレポートで作成した表をメインレポートに配置し表示させるとそれぞれの一覧が重なります。

18308001.PNG


このような表の重なりを防ぐにはレイアウトを設定する必要があります。

ここではサブレポートはレポートフッターに配置しているので「構造」から「レポートフッター」を選択し「スタイル」の「layout」の値をblockにします。すると次のような表示になります。

18308002.png


各サブレポートの表は重なることななく表現できています。さらにレポートを見やすくするために、表と表の間に隙間を作ってみましょう。

18308003.PNG

上の図のように、サブレポートを開きパレットから「バンド」をレポートに追加します。これによりバンドのheightだけ表の間に隙間ができます。表示すると次のようになります。

18308004.PNG

とても見やすいレポート表現になりました。

static QueryのWhere句をパラメータの条件によって変更させたい場合があります。
例えば、特定のパラメータ値が選択されている時だけある条件を追加するなどのような場合です。
しかし、レポートデザイナーは基本的には異なるクエリを動的に変更することができません。
つまり、データソース毎にStatic Queryを使用することになります。
このような場合、以下のようにSQLの記述を工夫することでWhere句を動的に表現できます。

SELECT * FROM TABLENAME
WHERE 1=1
AND (
(条件式1
AND 検索クエリ1
)
OR
(条件式2
AND 検索クエリ2
)
OR
(条件式3
AND 検索クエリ3
)
)
;

上記の場合、条件式の最初にTRUEになった検索クエリがWhere句に適用されます。
ネストさせることでより条件を複雑にすることもできます。

SELECT * FROM TABLENAME
WHERE 1=1
AND (
(条件式1-1
(条件式1-2
AND 検索クエリ1
)
)
OR
(条件式2
(条件式1-2
AND 検索クエリ1
)
)
OR
(条件式3
(条件式1-2
AND 検索クエリ1
)
)
)
;

例えば、以下のように記述した場合param1がaの場合はCOLUMN1、bの場合はCOLUMN2、cの場合はCOLUMN3のようにパラメータの値によってWhere句を変更することができます。

SELECT * FROM TABLENAME
WHERE 1=1
AND (
('a' = ${param1}
AND COLUMN1 = ${param1}
)
OR
('b' = ${param1}
AND COLUMN2 = ${param1}
)
OR
('c' = ${param1}
AND COLUMN3 = ${param1}
)
)
;

条件式は「=」や「!=」だけでなく「IN」なども使用できます。
パラメータ未設定の判定には、「=''」や「!=''」、または、「IS NULL」や「IS NOT NULL」で可能です。
※「=NULL」や「!=NULL」は正常に動作しません。

レポートデザイナというよりはSQLのTIPSですが
このようなクエリの記述を応用して、よりきめ細かなレポート動作を実現できます。
PentahoレポートデザイナーではQuery Scriptingを使用し、Static Queryの結果であるデータオブジェクトを加工することができます。使用可能なQuery言語はGroovy、ECMA Scriptの2つです。Query Scriptingの基本的な使用方法はQuery Scriptingを使用するをご参照ください。


ここでは、Groovyを使用してサンプルレポートのBar Line Chart.prptのクエリ結果を加工してみましょう。

1.まずは、サンプルレポートを開きます。
ようこそ画面からCharts>Bar Lineを選択するか、メニューのHelp>Sample Reports>Charts>Bar Lineを選択しレポートを開きます。

2.レポートをプレビューします。
180202001.PNG

今回は「Classic Cars」の名称Groovyで変更してみましょう。

3.JDBCデータソースを開き「プレビュー」ボタンをクリックし、変更する前のデータセットを確認します。確認が終わり次第プレビューを閉じます。
180202002.PNG

4.Query Scriptingタブをクリックします。
Scripting LanguageにGroovyを選択し、「Template」ボタンをクリックします。
今回はStatic Queryの結果を加工するため、postProcessResultメソッド内に下記Groovy(Java)を追加します。
--
   for (int i=0;i<tableModel.getRowCount();i++) {
String s =tableModel.getValueAt(i,1);
if ("Classic Cars".equals(s)){
tableModel.setValueAt("Bus",i,1);
}
}
--
上記処理はテーブルモデルの2列目(indexは1)の各行から順にデータを取得し、
取得した文字列が"Classic Cars"の場合は文字列"Bus"を格納するコードです。
180202003.PNG

5.再度プレビューして「Classic Cars」が「Bus」に変わっていることを確認してみましょう。
180202004.PNG

6.問題なければJDBCデータソースの編集を「OK」ボタンで閉じて、レポートをプレビューしてみましょう。以下のように「Classic Cars」が「Bus」に変わっていることが確認できます。
180202005.PNG

Groovyを使用することで、レポートデザイナーの機能としてはないCSV取り込み、CSVデータとJDBCデータソースのテーブル結合なども可能です。
このように自由度や拡張性が高いことがレポートデザイナーの良さでもあります。
Javaで実現できる処理はレポートデザイナー内でも実現できるため、細かなカスタマイズも非常に簡単に実装することができます。

Query Scriptingを使用する

|
PentahoレポートデザイナーではQuery Scriptを使用し、Static Queryの結果であるデータオブジェクトを加工することができます。使用可能なQuery言語はGroovy、ECMA Scriptの2つです。

ここではGroovyを使用し、Query Scriptingの使用方法をご説明します。

1.新規レポートの場合は、Data>Add Datasource>JDBCより、すでにJDBCデータソースをレポートに追加している場合は、データタブから「JDBC:接続名」をダブルクリックし、JDBCデータソースダイアログを開きます。

2.Query ScriptingタブをクリックしScripting LanguageにGroovyを選択します。

3.「Template」ボタンを押下すると、呼び出されるメソッドのテンプレートが入力されます。
入力が完了すれば以下のよになります。
Query Scriptingの使用方法.PNG

4.必要なタイミングで呼び出されるメソッド内に、必要な処理を追記します。

def initQuery()
{
  //すべての初期化ロジックをここに配置します。これは準備するのに最適な空間です
  //複雑なルックアップテーブルまたはこのスクリプトのグローバル変数を埋める。
  //このメソッドは、初期化中に一度呼び出されます。この機能は、
  //関連するクエリが使用されている場合にのみ呼び出されます。
}

def shutdownQuery()
{
  //すべてのシャットダウンロジックをここに配置します。永続的なリソースを使用する場合
  //ファイルや接続のように、ここで閉じてください。
  //このメソッドは、データソースのシャットダウン中に一度呼び出されます。それ
  //関連するクエリが発生した場合にのみ呼び出されます。
}


def computeQuery(query、queryName、dataRow)
{
  //データソースのクエリに使用されるクエリ文字列を計算します。
  //クエリには静的に定義されたクエリ(MQL-text)が含まれています。
  // queryNameは、設計時に与えられたこのクエリの論理名です
  // dataRowには、クエリを実行するために使用されるすべてのパラメータが含まれています

  return query;
}

def computeQueryFields(query、queryName)
{
  //キャッシュに影響を与える可能性のある追加フィールドを返します。書き換えた場合
  // 'computeQuery'関数で動的にクエリを実行し、すべてのフィールドを含める
  //クエリやクエリの計算に含めることができます。
  //
  //キャッシュを必要としない場合は、<null>を返します。
  return new String[0];
}

def postProcessResult(query、queryName、dataRow、tableModel)
{
  //オプションでクエリ結果を後処理します。通常、あなたはしません
  //与えられたテーブルモデルを直接操作しますが、コピーすることもできます
  //データを新しいモデルに入れたり、カスタムテーブルモデルでラップすることができます
  //独自の作成の実装。

  //プロセス内で元の表モデルを破棄した場合は、
  //適切に閉じるか、リソースがリークする可能性があります。
  return tableModel;
}

これまで、ダウンロードする必要があったMarketPlaceですが、Pentaho7.1からは設定変更で簡単にPUCのプルダウンメニューにMarketPlaceを表示できるようになりました。


 手順は以下の通りです。


1.Pentaho BA Serverが起動している場合は停止してください。

2.<Pentahoインストールフォルダ>/server/pentaho-server/pentaho-solutions/system/karaf/etc/に移動してください。

3.org.apache.karaf.features.cfgをエディターで開いてください。

4.org.apache.karaf.features.cfg内のfeaturesBootの中にpentaho-marketplaceという項目があることを確認し、ない場合はfeaturesBootに記載されている最後の項目にカンマをつけpentaho-marketplaceと追記してください。

5.Pentaho BA Serverを起動し、PUCよりMarketPlaceが表示されることをご確認ください。



とても便利になりましたね。


2018年10月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

アイテム

  • 18100102.PNG
  • 18100101.PNG
  • 18060102.PNG
  • 18060101.PNG
  • 18060100.PNG
  • 18050104.PNG
  • 18050103.PNG
  • 18050102.PNG
  • 18050101.PNG
  • 18050100.PNG

月別 アーカイブ