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プラグインを使っている場合のサンプルイメージとレポートサンプルを用意しました。



レポートをマイルストーンに表示したイメージ

後で出てくる二つのレポートをマイルストーンの部分に表示しています。

マイルストーンwikiの部分に

[[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プラグインを再ダウンロードしてインストールし直して下さい。