ReportIncludePlugin

説明

以下のようにWikiにマクロを記載することで、TracReportで定義されているレポートを表示します。 また、オプションを設定することで、レポートの表からグラフを生成することもできます。

[[ReportInclude(args1,args2,...)]]

args:

  • 表示したいTracReportのIDを指定します。必ず第1引数に指定する必要があります。動的変数にも対応しています。書式は、IDの後ろに?をつけて指定します。
  • title: レポート、グラフのタイトル文字列を指定することができます。コロンに続けてタイトル文字列を指定します。未指定の場合は、TracReportのタイトル文字列が自動的に使用されます。
  • graph: グラフも合わせて表示する場合に指定します。コロンに続けて、以下の記載が可能です。
    • lines
      折れ線グラフを表示します。
    • bars
      棒グラフを表示します。
  • stack: グラフ表示時に、スタック(積み上げ)グラフとするかどうか指定します。コロンに続けて、以下の記載が可能です。
    • true
      スタック(積み上げ)グラフとして表示します。
    • false
      スタック(積み上げ)グラフとして表示しません。
  • 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
      テーブルを表示しません。グラフのみを表示する場合に使用します。
  • async: 非同期でレポート、グラフを描画するかどうか指定します。コロンに続けて、以下の記載が可能です。未指定の場合は、trueとなります。
    • true
      非同期で描画します。
    • false
      非同期で描画しません。
  • xaxisFormatString: X軸のラベルのフォーマットを指定します。X軸が数値か日付によって指定方法が異なります。
    • 数値の場合。未指定の場合は、%.1fとなります。以下のように整数値、少数値の指定が可能です。
      • %d
        整数値で表示します。
      • %.1f
        小数点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)をレポート表示時に自動展開できません。
      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)]]
graph1.png


対応済みも含めて担当チケット数(担当者別表示)を表示する

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)]]
graph2.png


チケットの登録数、クローズ数の累計を表示する

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)]]
graph3.png


ソース

sf.jpのSVNリポジトリから取得できます。

セットアップ方法

チェックアウトしたフォルダにて、下記を実行してパッケージをインストールしてください。

> python setup.py bdist_egg

distフォルダが作成されます。その中にある*.eggファイルを、TracEnvのplugins ディレクトリにコピーしてください。

免責事項

本ソフトウェアは使用者の責任において利用してください。 このプラグインによって発生した、いかなる障害・損害も作成者は一切責任を負わないものとします。