一.概要
1.応用シーン
テンプレートの性能は開発者のレベルに大きく左右され、その問題の多くは開発過程における不当な使い方が原因です。さらに、ユーザはすでに完成されたテンプレートを変更しようとしません。そこで、テンプレートアシスタントはテンプレートの作成段階でユーザを助けて、新規作成したテンプレートにおける性能問題の発生を低減します。
2.機能紹介
FineReport11.0には「テンプレートアシスタント」プラグインが組み込まれ、テンプレートcptの「テンプレートアシスタント」ボタンをクリックすると、性能検査が実行され、性能問題を引き起こす可能性のある箇所を見つけ、その訂正について提案します。
注:当該機能は.cptテンプレートだけサポートします。
二.操作手順
1.検査の起動方法
1.1.手動起動
テンプレートcptを開き、「テンプレートアシスタント」をクリックすると、テンプレートを検査します。テンプレートが保存されなかった場合、まず保存通知が表示されます。具体的には下記の図の通りです。
1.2.保存検査
検査されたことのないテンプレートcptを開き、内容を変更してから保存すると、自動的にテンプレート検査が実行されます。
1.3.プレビュー検査
検査されたことのないテンプレートcptを開き、テンプレートをプレビューすると(すべてのプレビュー方法をサポートします)、自動的にテンプレート検査が実行されます。
プレビューの後、「検査エラー通知」ボタン(本文2.2節)を再表示するには、テンプレートを一旦閉じてから再起動する必要があります。
1.4.その他の説明
検査の実行中に中止動作をすると検査が中止され(例えば、デザイナを閉じること、作業ディレクトリを切り替えるなど)、次回のプレビューまたは保存する時に検査が再起動します。
「テンプレートアシスタント」を手動でクリックする時、テンプレートがまだ保存されていない場合、まずテンプレートの保存通知が表示されます。
プレビュー検査モードにおいて、検査が未完成の状態でプレビュー画面に戻っても、検査をやり直すことはありません。しかし、テンプレートを保存すると未完成の検査が中止され、改めて検査が行われます。
2.エラー検出通知ボタン
2.1.ボタンのスタイルについて
テンプレート検査の後、下図のように「エラー検出通知」ボタンが表示されます。
2.2.その他の説明
手動で検査を実行する場合、検査結果画面はポップアップで表示されます。一方で、保存またはプレビューで検査を実行する場合、「エラー検出通知」ボタンをクリックして結果画面を確認できます。
検出された性能問題の改善に従って、問題検出の数値が変わります。
検査結果が一度生成されたら、次回テンプレートを開く時も「エラー検出通知」ボタンが存在します。
3.エラー検出通知画面
性能問題が検出された場合、テンプレートの実際状況に基づいて、「訂正の提案」「自動最適化」「機能の提案」という3つのTabページの一つまたは複数が表示されます。
訂正の提案:自動的に最適化されることなく、ユーザが提案の内容に従って手動で訂正する必要があります。
自動最適化:システムがすでに自動的に最適化した部分を表示します。
機能の提案:テンプレートの状況に基づいて、性能を最適化する機能をユーザに推薦します。
3.1.性能問題がない場合
性能問題が検出されない場合、下図のような検査結果が表示されます。
3.2.訂正提案画面
下図が示すとおりです。
3.3.自動最適化画面
下図が示すとおりです。
3.4.検査失敗
検査が失敗した場合、エラーメッセージが表示されます。
4.自動最適化の実行確認
テンプレートを自動的に最適化するかどうかについて、下図のように提案します。
問題番号 | 問題の概要 | 問題の提案 | 最適化の実行 |
01001 | データセットに重複データ列が存在します。検出結果によれば、実際に使用されたデータ列はXX、XX、XXだけです。 | sqlの変更を提案します。データ列の取得を減らし、必要なデータ列だけ保留します。 | 実行しません |
02001 | セルに重複した条件属性が存在します。関係条件属性の計算はすでにその親セルで実行されました。 | 親セルと重複した条件属性の計算の削除を提案します。 | 実行します |
02002 | セルに重複したフィルタ条件が存在します。関係フィルタ条件はすでにその親セルで実行されました。 | 親セルと重複したフィルタ条件の計算の削除を提案します。 | 実行しません |
02003 | 行列に含まれた一部の無意味な条件属性の計算を隠します。 | 行列における行の高さ、列の幅、改ページを除いた条件属性の削除を提案します。 | 実行します |
03001 | セルに除数が0になる計算リスクが存在します。 | 割り算に対しNULL値判断をすることを提案します。例えば、=IF(B1=0, Ifinity, A1 / B1) | 実行しません |
04001 | この行に大量のデータ列が存在するため、親セルと子セルの関係の複雑さによる計算性能の障害が発生する可能性があります。 | 親セルと子セルの計算における再帰呼び出しを軽減するために、最初の一列以外のすべてのデータ列について、親セルを第一のデータ列に設定することを提案します。 | 実行します |
05001 | データ列のセルにはフィルタが存在し、メモリ処理に移します。データセットの結果が多い場合、処理が遅れる可能性があります。 | データ列のセルのフィルタを削除し、フィルタ条件をデータセットに書き込むことを提案します。 | 実行しません |
06001 | セルにはsql、value、map、select)という展開されたSQL関数が存在し、計算の重複による性能の低下が発生する可能性があります。 | SQL関数は展開するたびに追加の独立計算またはsqlを実行しますが、重複のデータ取得または計算になります。 現在のセルに展開計算(各行の計算内容が違う)が必要か確認し、必要がない場合はSQL関数を展開なしセルに移動し、その結果を数式で参照して展開に用いることを提案します。 | 実行しません |
06002 | セルに展開レイヤーの座標関数があり、それによって計算性能が妨げられます。 | レイヤー座標の計算性能が悪く、展開後に複数のレイヤー座標を計算することがさらに帳票のプレビュー性能を低下させます。 レイヤー座標関数の使用シーンを確認し、レイヤー座標の展開を減らし、代わりのメソッドを採用することを提案します。 | 実行しません |
06003 | 大量のデータが含まれた明細表のテンプレートに一覧表示ではなく、グループ分けを使用しています。 | 明細表の行の一番左の親セルを一覧スタイルに変更することを提案します。 | 実行しません |
06004 | 大量のデータが含まれた明細表のテンプレートに一覧表示ではなく、グループ分けを使用しています。 | 明細表の行の一番左の親セルを一覧スタイルに変更することを提案します。 | 実行します |
07001 | データセットの容量が多すぎて、大量のメモリを使用し、テンプレートのプレビューが遅くなります。 | ウィジェットでテンプレートクエリのパラメータを制限することを提案します。すべてのデータを検索するという不必要な動作によるプレビューの性能低下、及びそれがもたらしたサーバの過大な負荷を避けられます。 | 実行しません |
08001 | ウィジェットのデフォルト値の計算時間が長く、テンプレートのプレビュー時間が長くなります。 | ウィジェットのデフォルトsql関数の実行があまりに遅くなっています。 ウィジェットのデフォルト値はsql関数ではなく、value関数または固定値を使用することを提案します。 | 実行しません |
5.テンプレートの自動最適化の中止
5.1.すべてのテンプレートの自動最適化を閉じる
テンプレートの自動最適化を中止したい場合、管理者IDでポータルに登録し、システム—システム管理—標準の順で操作し、「テンプレートの自動最適化」を閉じることができます。具体的には下記の図の通りです。
5.2.単一テンプレートの自動最適化の中止
テンプレートのエラー検出通知画面で、「自動最適化を使用しない」ボタンにチェックを入れると、当該テンプレートの自動最適化を閉じることができます。具体的には下記の図の通りです。
6.検査項目を閉じる
テンプレートアシスタントに検査または最適化してほしくない問題については、プラグインFINE_CONF_ENTITY可视化配置を通してフィールドを追加することができます。
フィールド名 | フィールド値 |
forbiddenRule | 本文2.4の表に基づいて中止したい検査項目を決めて、フィールド値は中止したい項目の「問題番号」です。例えば「01001,02001」(英文カンマ区切り)です。 |