= ReportIncludePlugin = == 説明 == 以下のようにWikiにマクロを記載することで、TracReportで定義されているレポートを表示します。 また、オプションを設定することで、レポートの表からグラフを生成することもできます。 {{{ [[ReportInclude(args1,args2,...)]] }}} args: * 表示したいTracReportのIDを指定します。必ず第1引数に指定する必要があります。動的変数にも対応しています。書式は、IDの後ろに?をつけて指定します。 * title: レポート、グラフのタイトル文字列を指定することができます。コロンに続けてタイトル文字列を指定します。未指定の場合は、TracReportのタイトル文字列が自動的に使用されます。 * graph: グラフも合わせて表示する場合に指定します。コロンに続けて、以下の記載が可能です。 * lines[[BR]] 折れ線グラフを表示します。 * bars[[BR]] 棒グラフを表示します。 * stack: グラフ表示時に、スタック(積み上げ)グラフとするかどうか指定します。コロンに続けて、以下の記載が可能です。 * true[[BR]] スタック(積み上げ)グラフとして表示します。 * false[[BR]] スタック(積み上げ)グラフとして表示しません。 * legendLoc: グラフの凡例の表示位置を指定します。コロンに続けて、方角を示す nw, n, ne, e, se, s, sw, w のいずれかを指定します。 * legendXOffset: グラフの凡例位置の横方向のオフセットを指定します。未指定の場合は12となります。 * legendYOffset: グラフの凡例位置の縦方向のオフセットを指定します。未指定の場合は12となります。 * dateFormat: X軸の値を日付としてグラフ表示する場合の、日付フォーマットを指定します。コロンに続けて、yyyy/MM/dd のように指定します。未指定の場合は、デフォルト値としてyyyy-MM-ddを使用します。 * width: グラフの幅をpx単位で指定します。未指定の場合は536pxとなります。 * height: グラフの高さをpx単位で指定します。未指定の場合は300pxとなります。 * table: TracReportのテーブルを出力を制御できます。コロンに続けて、以下の記載が可能です。 * hide[[BR]] テーブルを表示しません。グラフのみを表示する場合に使用します。 * async: 非同期でレポート、グラフを描画するかどうか指定します。コロンに続けて、以下の記載が可能です。未指定の場合は、trueとなります。 * true[[BR]] 非同期で描画します。 * false[[BR]] 非同期で描画しません。 * xaxisFormatString: X軸のラベルのフォーマットを指定します。X軸が数値か日付によって指定方法が異なります。 * 数値の場合。未指定の場合は、%.1fとなります。以下のように整数値、少数値の指定が可能です。 * %d[[BR]] 整数値で表示します。 * %.1f[[BR]] 小数点1桁までで表示します。 * 日付の場合。未指定の場合は、%Y/%m/%dとなります。 * yaxisFormatString: Y軸のラベルのフォーマットを指定します。指定可能な値は、上記のX軸の数値と同じです。 * xaxisMin: X軸の最小値を指定します。指定しない場合は、グラフデータより自動的に計算されます。 * xaxisMax: X軸の最大値を指定します。指定しない場合は、グラフデータより自動的に計算されます。 * yaxisMin: Y軸の最小値を指定します。指定しない場合は、グラフデータより自動的に計算されます。 * yaxisMax: Y軸の最大値を指定します。指定しない場合は、グラフデータより自動的に計算されます。 表からグラフの生成は、以下のルールに従って行われます。 * 一番左の列が、X軸の値になります。 * デフォルトではyyyy-MM-dd形式の場合は日付と見なして、時系列データとして扱います。 * 2列目以降がグラフのデータとなります。 * ヘッダ行の値がラベルになります。 例: * report:1 を表示する。 {{{ [[ReportInclude(1)]] }}} * report:9 を棒グラフととともに表示する。 {{{ [[ReportInclude(9,graph:bars)]] }}} * report:14 を折れ線グラフで表示する。テーブルは表示しない。 {{{ [[ReportInclude(14,graph:lines,table:hide)]] }}} * report:20 を積み上げ棒グラフで表示する。 {{{ [[ReportInclude(20,graph:bars,stack:true)]] }}} * TracReportの動的変数に値を渡して表示する。 {{{ [[ReportInclude(14?PRIORITY=high)]] }}} * TracReportの動的変数にログインユーザ名($USER)を渡して表示する。(0.4.3以降) {{{ [[ReportInclude(8?USER=$USER)]] }}} * ReportIncludeマクロでは現在TracReportのログインユーザ名($USER)をレポート表示時に自動展開できません。[[BR]]ReportIncludeマクロで表示する際には、動的パラメータとして$USERを渡すようにしてください。 == TracReport集 == ReportIncludePluginを使用するには、TracReportを定義する必要があります。TracReportの内容次第で、様々なレポート、グラフを出力することができます。ここでは、役立ちそうなTracReportのSQL文を紹介します(変なSQLありましたら指摘してください)。 === 対応中の担当チケット数(担当者別表示)を表示する === {{{ SELECT t.owner AS 担当者, count(*) AS "担当チケット件数(総計)" FROM ticket t WHERE t.status <> 'closed' GROUP BY t.owner ORDER BY "担当チケット件数(総計)" DESC }}} ==== グラフ表示例 ==== {{{ [[ReportInclude(15,graph:bars,table:hide)]] }}} [[Embed(graph1.png)]] [[BR]] === 対応済みも含めて担当チケット数(担当者別表示)を表示する === {{{ SELECT open.owner AS 担当者, open.open_count AS "担当チケット件数(Open)", closed.closed_count AS "担当チケット件数(Closed)" FROM (SELECT owner, count(*) AS open_count FROM ticket WHERE status <> 'closed' GROUP BY owner) open, (SELECT owner, count(*) AS closed_count FROM ticket WHERE status = 'closed' GROUP BY owner) closed WHERE open.owner = closed.owner ORDER BY open.open_count DESC }}} ==== グラフ表示例 ==== {{{ [[ReportInclude(14,graph:bars,stack:true,table:hide)]] }}} [[Embed(graph2.png)]] [[BR]] === チケットの登録数、クローズ数の累計を表示する === {{{ SELECT a.Date AS 日付, sum(b.登録数) AS 累計登録数, sum(b.クローズ数) AS 累計クローズ数 FROM (SELECT tm AS Date, sum(delta1) AS 登録数, sum(delta2) AS クローズ数 FROM (SELECT id, date(time,'unixepoch') tm, 1 delta1, 0 delta2 FROM ticket UNION ALL SELECT t.id id, date(tc.time,'unixepoch') tm, 0 delta1, (CASE tc.newvalue WHEN 'closed' THEN 1 ELSE -1 END) delta2 FROM ticket t JOIN ticket_change tc ON t.id=tc.ticket AND tc.field='status' AND (tc.newvalue='closed' or tc.oldvalue='closed')) GROUP BY tm) a, (SELECT tm AS Date, sum(delta1) AS 登録数, sum(delta2) AS クローズ数 FROM (SELECT id, date(time,'unixepoch') tm, 1 delta1, 0 delta2 FROM ticket UNION ALL SELECT t.id id, date(tc.time,'unixepoch') tm, 0 delta1, (CASE tc.newvalue WHEN 'closed' THEN 1 ELSE -1 END) delta2 FROM ticket t JOIN ticket_change tc ON t.id=tc.ticket AND tc.field='status' AND (tc.newvalue='closed' or tc.oldvalue='closed')) GROUP BY tm) b WHERE strftime('%s',a.Date) >= strftime('%s',b.Date) GROUP BY a.Date }}} Trac0.12の場合は、次のようにする。 {{{ SELECT a.Date ,sum(b.登録数) AS 累計登録数, sum(b.クローズ数) AS 累計クローズ数 FROM (SELECT tm AS Date, sum(delta1) AS 登録数, sum(delta2) AS クローズ数 FROM (SELECT id, date(time*1e-6,'unixepoch') tm, 1 delta1, 0 delta2 FROM ticket UNION ALL SELECT t.id id, date(tc.time*1e-6,'unixepoch') tm, 0 delta1, (CASE tc.newvalue WHEN 'closed' THEN 1 ELSE -1 END) delta2 FROM ticket t JOIN ticket_change tc ON t.id=tc.ticket AND tc.field='status' AND (tc.newvalue='closed' or tc.oldvalue='closed')) GROUP BY tm) a, (SELECT tm AS Date, sum(delta1) AS 登録数, sum(delta2) AS クローズ数 FROM (SELECT id, date(time*1e-6,'unixepoch') tm, 1 delta1, 0 delta2 FROM ticket UNION ALL SELECT t.id id, date(tc.time*1e-6,'unixepoch') tm, 0 delta1, (CASE tc.newvalue WHEN 'closed' THEN 1 ELSE -1 END) delta2 FROM ticket t JOIN ticket_change tc ON t.id=tc.ticket AND tc.field='status' AND (tc.newvalue='closed' or tc.oldvalue='closed')) GROUP BY tm) b WHERE strftime('%s',a.Date) >= strftime('%s',b.Date) GROUP BY a.Date }}} ==== グラフ表示例 ==== {{{ [[ReportInclude(13,graph:lines,table:hide)]] }}} [[Embed(graph3.png)]] [[BR]] == ソース == [http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/reportincludeplugin/trunk/0.11 sf.jpのSVNリポジトリ]から取得できます。 == セットアップ方法 == チェックアウトしたフォルダにて、下記を実行してパッケージをインストールしてください。 {{{ > python setup.py bdist_egg }}} distフォルダが作成されます。その中にある*.eggファイルを、TracEnvのplugins ディレクトリにコピーしてください。 == 免責事項 == 本ソフトウェアは使用者の責任において利用してください。 このプラグインによって発生した、いかなる障害・損害も作成者は一切責任を負わないものとします。