ReportIncludeプラグインでReportをwikiに表示する(Reportサンプル2点)
(諸般の事情で下書きに眠っていたのを、諸般の事情が解決したので公開)
2011/3/3 SQLの修正と諸般の事情を追記
TracのReportやQueryは強力です。
TicketQueryマクロでQueryの結果をWikiに表示させることも可能ですが、SQLを使っているReportの表示をWIkiにすることは出来ません。「TracからRedmineへ移行しない、たった一つの理由」で以前に書いたとおり私がTracを使い続けている大きな理由になっているSQLを使った柔軟なレポートですが、Wikiに表示できないのでは魅力が半減してしまいます。
そこで使うのがReportIncludeプラグインです。
このプラグインの目玉は各種グラフをReportの結果から作成するところにあります。
そして注目されていないのですがSQLで書かれたReportの結果をWikiに表示することが可能です。
これを利用するとWikiにレポートの結果を表示させることが可能になるため、wiki記法が使える場所であればマイルストーンにもReportの説明の部分でもチケットにでも、レポートやグラフを表示できるようになります。Wikiに自由にレポートが載せられると強力な武器(?)になるので、TicketQueryでは物足りなかった人は試しては如何でしょうか?
以前に紹介したQueryChartと併せてマイルストーンのwikiにレポートを上手く作って載せると進捗の把握に非常に便利になるので是非とも試してみてください。
と言われても、イメージが湧きにくいと思うので、TracLightningにも同梱されているTimingAndEstimationプラグインを使っている場合のサンプルイメージとレポートサンプルを用意しました。
レポートをマイルストーンに表示したイメージ
後で出てくる二つのレポートをマイルストーンの部分に表示しています。
[[ReportInclude(19?MLS=スプリント0(準備)&DH=7)]] [[ReportInclude(20)]]
と書くと上記のようにレポートが表示されます。
(レポート番号やパラメータは適宜変更が必要です)
見積時間と実績時間及びチケット数を集計するレポート
対象マイルストーン(MLS)と、人日を計算するための時間(DH)をパラメータ化しています。
(0.11,0.12共用)2011/3/3書き換えました。
SELECT Hoge as ' ', TaskCount as タスク数, EstimateHour as 見積(時間), EstimateMD as 見積(人日), WorkHour as 実績(時間), WorkMD as 実績(人日), OverTaskCount as 超過数, OverTaskHour as 超過(時間), CASE Hoge WHEN '未着手' THEN 0 WHEN '作業中' THEN 10 WHEN '完了' THEN 90 WHEN '合計' THEN 999 END as _odr FROM( SELECT CASE WHEN status ='new' and tot.value = 0 THEN '未着手' WHEN status = 'closed' THEN '完了' ELSE '作業中' END as Hoge, COUNT(*) as TaskCount , SUM(cast(est.value as REAL)) as EstimateHour , ROUND(SUM(cast(est.value as REAL)/$DH),2) as EstimateMD , SUM(cast(tot.value as REAL)) as WorkHour , ROUND(SUM(cast(tot.value as REAL)/$DH),2) as WorkMD , SUM(CASE WHEN cast(est.value as REAL) < cast(tot.value as REAL) THEN 1 ELSE 0 END) as OverTaskCount , SUM(CASE WHEN cast(est.value as REAL) < cast(tot.value as REAL) THEN cast(tot.value as REAL) - cast(est.value as REAL) ELSE 0 END) as OverTaskHour, 0 as odr FROM (SELECT * FROM ticket WHERE milestone = $MLS ), (SELECT * FROM ticket_custom where name='estimatedhours') est, (SELECT * FROM ticket_custom where name='totalhours') tot WHERE id = est.ticket and id = tot.ticket GROUP by Hoge UNION SELECT '合計' as Hoge, COUNT(*) as TaskCount , SUM(cast(est.value as REAL)) as EstimateHour , ROUND(SUM(cast(est.value as REAL)/$DH),2) as EstimateMD , SUM(cast(tot.value as REAL)) as WorkHour , ROUND(SUM(cast(tot.value as REAL)/$DH),2) as WorkMD , SUM(CASE WHEN cast(est.value as REAL) < cast(tot.value as REAL) THEN 1 ELSE 0 END) as OverTaskCount , SUM(CASE WHEN cast(est.value as REAL) < cast(tot.value as REAL) THEN cast(tot.value as REAL) - cast(est.value as REAL) ELSE 0 END) as OverTaskHour, 0 as odr FROM (SELECT * FROM ticket WHERE milestone = $MLS ), (SELECT * FROM ticket_custom where name='estimatedhours') est, (SELECT * FROM ticket_custom where name='totalhours') tot WHERE id = est.ticket and id = tot.ticket UNION SELECT '未着手',0,0,0,0,0,0,0,0 UNION SELECT '作業中',0,0,0,0,0,0,0,0 UNION SELECT '完了' ,0,0,0,0,0,0,0,0 ) GROUP by Hoge ORDER by _odr
プロジェクトメンバーの日別作業実績
0.11用
SELECT author as __group__ , Day, 分類, ticket, summary, 作業時間, _ord as __color__ from ( select author||'('||strftime('%Y年%m月', 'now', 'localtime')||'作業分)' as author, date(work_time.time, 'unixepoch', 'localtime') as Day , (select t.type from ticket t where id = work_time.ticket) as 分類, ticket, (select summary from ticket where id = work_time.ticket) as summary, sum(CAST(newvalue as REAL)) as 作業時間, 0 as _ORD from ticket_change work_time where work_time.field='hours' and substr(date(work_time.time, 'unixepoch', 'localtime'),1,7) = strftime('%Y-%m', 'now') group by author,date(work_time.time, 'unixepoch','localtime') ,分類,Ticket UNION select author||'('||strftime('%Y年%m月', 'now', 'localtime')||'作業分)' as author, ' ' as Day, ' ' as type, 0 as ticket, '合計' as summary, sum(CAST(newvalue as REAL)) as 作業時間, 99999 as _ORD from ticket_change work_time where work_time.field='hours' and substr(date(work_time.time, 'unixepoch', 'localtime'),1,7) = strftime('%Y-%m', 'now') group by author ) order by author,Day,_ord
0.12用
Trac本体の日時の持ち方がミリ秒単位に変わったため、日時を1000000分の1してます。
SELECT author as __group__ , Day, 分類, ticket, summary, 作業時間, _ord as __color__ from ( select author||'('||strftime('%Y年%m月', '-1 month', 'localtime')||'作業分)' as author, date(work_time.time/1000000, 'unixepoch', 'localtime') as Day , (select t.type from ticket t where id = work_time.ticket) as 分類, ticket, (select summary from ticket where id = work_time.ticket) as summary, sum(CAST(newvalue as REAL)) as 作業時間, 0 as _ORD from ticket_change work_time where work_time.field='hours' and substr(date(work_time.time/1000000, 'unixepoch', 'localtime'),1,7) = strftime('%Y-%m', 'now') group by author,date(work_time.time/1000000, 'unixepoch','localtime') ,分類,Ticket UNION select author||'('||strftime('%Y年%m月', '-1month', 'localtime')||'作業分)' as author, ' ' as Day, ' ' as type, 0 as ticket, '合計' as summary, sum(CAST(newvalue as REAL)) as 作業時間, 99999 as _ORD from ticket_change work_time where work_time.field='hours' and substr(date(work_time.time/1000000, 'unixepoch', 'localtime'),1,7) = strftime('%Y-%m', 'now') group by author ) order by author,Day,_ord
諸般の事情について
TracLightning3系の3.0.7以前に付属するReportIncludeプラグインはAPI変更に伴って動いていません。
TracLightning3系の3.0.8以降にバージョンアップするか、Shibuya.tracのリポジトから
ReportIncludeプラグインを再ダウンロードしてインストールし直して下さい。