Changes between Initial Version and Version 1 of TracReports


Ignore:
Timestamp:
2010/10/12 00:14:07 (14 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracReports

    v1 v1  
     1= レポート = #TracReports 
     2[[TracGuideToc]] 
     3 
     4レポートモジュールは、簡単かつ強力なレポーティング機能を提供します。 
     5この機能によって、 Trac データベースのチケット情報を取得することができます。 
     6 
     7TracReports ではレポートの形式を定義するための方法として、独自フォーマットではなく、  
     8SQL の `SELECT` 文を使用することにしました。 
     9 
     10  '''Note:''' ''現在の形式のレポートモジュールは、 Trac 開発チームでデータベースのスキーマにあわせる作業が必要になるという深刻な制限事項があるため、段階的に廃止します。より柔軟性に富みユーザビリティに優れた [wiki:TracQuery クエリモジュール] が代替手段として提供されます。どこかの時点でレポートモジュールを完全に削除することが出来るように、クエリモジュールで実現できないレポートがある間は、私たちはクエリモジュールを強化していくつもりです。また、これはレポートモジュールへの重要な機能追加は行わないことを意味します。'' 
     11 
     12  ''以下の [wiki:TracIni trac.ini] のように無効化するだけで、レポートモジュールをクエリモジュールで完全に置き換えることができます:'' 
     13  {{{ 
     14  [components] 
     15  trac.ticket.report.* = disabled 
     16  }}} 
     17  ''これによって、ナビゲーションバーの "チケットを見る" (英語版では "View Tickets") でのデフォルトのハンドラがクエリモジュールになります。もし可能ならば、この設定を有効にして、レポート機能がなくなることによって生じる不都合を報告してください。'' 
     18 
     19 
     20レポートは以下の基本的なパーツから構成されます: 
     21 * '''ID''' — ユニークな (連番の) 識別子 
     22 * '''レポート名 (Title)''' — レポートのタイトル 
     23 * '''説明 (Description)''' — WikiFormatting で記述された、レポートの説明。 
     24 * '''レポート本体 (Report Body)''' — 後に述べるフォーマットで規定された、レポートクエリの結果。 
     25 * '''フッタ (Footer)''' — レポート本体を異なる形式でダウンロードするためのリンク。 
     26 
     27== ソートの並び順変更 == #ChangingSortOrder 
     28単純なレポート (特にグループ化されていないもの) では、カラムのヘッダをクリックすれば、そのカラムでソートすることが出来ます。 
     29 
     30カラムのヘッダがハイパーリンク (赤) になっていれば、クリックすることでそのカラムでのソートができます。並び順を逆にするには、もう一度クリックします。 
     31 
     32== レポートの番号を変更する == #ChangingReportNumbering 
     33レポートの ID を変更する必要がある場合があるかもしれませんが、おそらくレポート自体を編集する方がベターです。というのも Trac のデータベースを変更する必要があるからです。 ''report'' 表は以下のようなスキーマとなっています ''(0.10 以降)'': 
     34 * id integer PRIMARY KEY 
     35 * author text 
     36 * title text 
     37 * query text 
     38 * description text 
     39ID を変更すると ''レポート一覧 (Available Reports)'' での表示順と番号、レポートのパーマリンクが変更されます。以下のような SQL を実行すると ID が変更されます: 
     40{{{ 
     41update report set id=5 where id=3; 
     42}}} 
     43メンテナンス結果、データベースの一貫性を保つ必要があることに留意してください (例えば ID はユニークでなければなりませんし、 SQLite などデータベースの上限値を超えることはできません)。 
     44 
     45保存されたレポートやクエリのレポート番号も更新したり削除したりする必要があるでしょう。 
     46 
     47== チケットをナビゲート == #NavigatingTickets 
     48レポートクエリ結果の 1 チケットをクリックするとそのチケットが表示されるでしょう。表示されたチケットのメインメニューバーのすぐ下にある ''次のチケット'' (英語版では ''Next Ticket'') または ''前のチケット'' (英語版では ''Previous Ticket'') リンクをクリックすることによって他のチケットに移動するか、''レポートに戻る'' (英語版では ''Back to Report'') リンクをクリックしてレポートページに戻ることができます。 
     49 
     50あなたは安全にチケットを編集することができます。またチケットの編集結果を保存した後で、 ''次のチケット/前のチケット/レポートに戻る'' (英語版では ''!Next/Previous/Back to Report'') のリンクを使用して結果を行き来することが可能です。しかし、あなたがチケットへの操作を終えてレポートに戻るときに、どのチケットが変更されたかのヒントは表示されません。この動作はカスタムクエリの動作とは異なります。 (カスタムクエリについては TracQuery#NavigatingTickets を参照して下さい) 。 ''(0.11 以降 )'' 
     51 
     52== ダウンロードできるフォーマット == #AlternativeDownloadFormats 
     53通常表示される HTML でのビューの加え、レポートはいろいろな形式で使用することができます。 
     54レポートページの一番下に、利用可能なデータ形式の一覧があります。望む形式のリンクをクリックすれば、 
     55その形式でのレポートをダウンロードすることができます。 
     56 
     57=== カンマ区切りテキスト - CSV (Comma Separated Values) === #Comma-delimited-CSVCommaSeparatedValues 
     581 レコードを 1 行として、各カラムをカンマ (',') で区切ったプレーンテキストとしてダウンロードできます。 
     59'''Note:''' 各カラムのデータに改行文字やカンマがある場合、エスケープされて出力されます。 
     60 
     61=== タブ区切り === #Tab-delimited 
     62CSV と似ていますが、水平タブ文字 (\t) で区切られる点が違います。 
     63 
     64=== RSS - XML コンテンツ配信 === #RSS-XMLContentSyndication 
     65全てのレポートは、 XML/RSS 2.0 での配信が可能です。 RSS フィードを購読するにはページ下部にある、オレンジ色の 'XML' アイコンをクリックしてください。 Trac での RSS 対応についての一般的な情報は、 TracRss に記述しています。 
     66 
     67---- 
     68 
     69== カスタムレポートを作成する == #CreatingCustomReports 
     70 
     71''カスタムレポートを作成するためには、 SQL を楽に書ける程度の知識が必要です。'' 
     72 
     73レポートは基本的に、 Trac が実行できる形式の、名前がついた特定 SQL です。 
     74レポートに指定された SQL は、直接 Web インタフェースから閲覧したり、 
     75作成したりできます。 
     76 
     77通常のレポートは、 'ticket' 表に対する、カラムの選択や、ソート指定を伴った  
     78SELECT 文となります。 
     79 
     80== Ticket 表のカラム == #Ticketcolumns 
     81''ticket'' 表は、以下のカラムを持ちます: 
     82 * id           -- チケットID 
     83 * type         -- チケット分類 
     84 * time         -- 登録日時 
     85 * changetime   -- 最終更新日時 
     86 * component    -- コンポーネント 
     87 * severity     -- 重要度 
     88 * priority     -- 優先度 
     89 * owner        -- 担当者 
     90 * reporter     -- 報告者 
     91 * cc           -- 関係者 
     92 * version      -- バージョン 
     93 * milestone    -- マイルストーン 
     94 * status       -- ステータス 
     95 * resolution   -- 解決方法 
     96 * summary      -- チケットの概要 
     97 * description  -- チケットについての完全な説明 
     98 * keywords     -- キーワード 
     99 
     100各カラムに対応する属性の詳細な説明は、 TracTickets に記述しています。 
     101 
     102例: '''優先度順、登録日時順の全未解決チケット''' 
     103{{{ 
     104SELECT id AS ticket, status, severity, priority, owner,  
     105       time AS created, summary FROM ticket  
     106  WHERE status IN ('new', 'assigned', 'reopened') 
     107  ORDER BY priority, time 
     108}}} 
     109 
     110--- 
     111 
     112== 上級トピック: 動的変数の使用 == #AdvancedReports:DynamicVariables 
     113レポートに汎用性を持たせる手段として、 ''動的変数'' をレポート SQL で使用する方法があります。 
     114簡単に言うと、動的変数とは、クエリを実行する前に置き換えられる ''特別な'' 文字列のことです。 
     115 
     116=== クエリで動的変数を使う方法 === #UsingVariablesinaQuery 
     117動的変数を使うためのシンタックスは単純です。 '$' に続いて、大文字で変数名となる語を挿入してください。 
     118 
     119例: 
     120{{{ 
     121SELECT id AS ticket,summary FROM ticket WHERE priority=$PRIORITY 
     122}}} 
     123 
     124レポート閲覧時、 $PRIORITY に値を当てはめるためには、レポートの URL に引数として変数を与えてください。この変数名に '$' を入れてはいけません。 
     125 
     126例: 
     127{{{ 
     128 http://trac.edgewall.org/reports/14?PRIORITY=high 
     129}}} 
     130 
     131複数の値を使用する場合、各値を '&' で区切ります。 
     132 
     133例: 
     134{{{ 
     135 http://trac.edgewall.org/reports/14?PRIORITY=high&SEVERITY=critical 
     136}}} 
     137 
     138 
     139=== 特殊な定数 === #SpecialConstantVariables 
     140実用的なレポートにするために、自動的に値が設定される動的変数が用意されています。(URL で指定されると上書かれます) 
     141 
     142 * $USER -- ログインに使用したユーザ名。 
     143 
     144例 (''私が担当になっているチケット一覧''): 
     145{{{ 
     146SELECT id AS ticket,summary FROM ticket WHERE owner=$USER 
     147}}} 
     148 
     149 
     150---- 
     151 
     152 
     153== 上級トピック: 表示形式のカスタマイズ == #AdvancedReports:CustomFormatting 
     154Trac には、レイアウトのカスタマイズや、グルーピング、ユーザ定義の CSS 利用などによる 
     155もっと複雑なレポートの作成も可能です。このようなレポートを作成するには、  
     156Trac のレポートエンジンが出力を制御するためのステートメントを含む、特別な SQL を使用します。 
     157 
     158== 特別なカラム == #SpecialColumns 
     159レポートを整形するため、 TracReports はクエリの結果から '特定の' カラム名を 
     160探します。このような '特定の' 名前で、最終的なレポートのレイアウトやスタイルが 
     161処理され、変更されます。 
     162 
     163=== 自動的に整形されるカラム名 === #Automaticallyformattedcolumns 
     164 * '''ticket''' — チケットの ID が入っているカラムで使用します。該当する ID のカラムにハイパーリンクされます。 (訳注: `summary` というカラム名もチケットにハイパーリンクされます。日本語版では `概要` でもリンクします。) 
     165 * '''id''' — '''realm''' が指定されない場合は、 '''ticket''' と同じです。 
     166 * '''realm''' — '''id''' と同時に使用します。チケット以外のリソースにリンクを行う場合に使用します。 (e.g. ''wiki'' のレルムに ''id'' としてページ名を組み合わせると、 Wiki ページへのリンクを生成します) 
     167 * '''created, modified, date, time''' — 日付や時刻に整形されます。 (訳注: `datetime` という列名にすると日時で整形されます。日本語版では `時刻` で終わるカラムは `time` に、 `日付` で終わるカラムは `date` に、 `日時` で終わるカラムは `datetime` に、それぞれ整形されます。) 
     168 * '''description''' — チケットの説明が入っているカラムで使用します。 Wiki エンジンで処理されます。 (訳注: 日本語版では `説明` でも整形されます。) 
     169 
     170'''例:''' 
     171{{{ 
     172SELECT id AS ticket, created, status, summary FROM ticket  
     173}}} 
     174 
     175これらのカラムは定義しても非表示にすることができます。方法は [#column-syntax 下記] を参照してください。 
     176 
     177''ticket'' 以外のレルムに対するレポートの作成方法については [http://trac.edgewall.org/wiki/CookBook/Configuration/Reports CookBook/Configuration/Reports] を参照してください。 
     178 
     179'''訳注''': Trac-0.11.1.ja1 以降のバージョンで作成した Environment では、デフォルトのレポートに日本語での整形ルールが適用されています。このような Environment を本家版 Trac で使用したい場合は各レポートの SQL を編集し、上記の日本語のカラム別名を英語に変更してください。 
     180 
     181=== 整形されるカラムのカスタマイズ === #Customformattingcolumns 
     182カラム名の前後に 2 つのアンダースコアがついている場合 (例: '''`__color__`''') は、  
     183''整形用のヒント'' として扱われ、レコードの整形が行われます。 
     184  
     185 * '''`__group__`''' — 指定されたカラムで、表示がグループ化されます。各グループは、それぞれセクションヘッダとクエリ結果の表を持ちます。 
     186 * '''`__grouplink__`''' — グループ化した場合の各グループのヘッダで生成するリンク先の URL を指定します。この URL は各グループの最初の行にだけ付与されます。 
     187 * '''`__color__`''' — 1 から 5 の数値である必要があります。値によって、あらかじめ定義された色付けが行われます。一般的な使用法は、優先度別の色付けです。 
     188{{{ 
     189#!html 
     190<div style="margin-left:7.5em">デフォルトの色付け:  
     191<span style="border: none; color: #333; background: transparent;  font-size: 85%; background: #fdc; border-color: #e88; color: #a22">Color 1</span> 
     192<span style="border: none; color: #333; background: transparent;  font-size: 85%; background: #ffb; border-color: #eea; color: #880">Color 2</span> 
     193<span style="border: none; color: #333; background: transparent;  font-size: 85%; background: #fbfbfb; border-color: #ddd; color: #444">Color 3</span> 
     194<span style="border: none; color: #333; background: transparent; font-size: 85%; background: #e7ffff; border-color: #cee; color: #099">Color 4</span> 
     195<span style="border: none; color: #333; background: transparent;  font-size: 85%; background: #e7eeff; border-color: #cde; color: #469">Color 5</span> 
     196</div> 
     197}}} 
     198 * '''`__style__`''' — CSS 形式でレコードを整形できます。 
     199 
     200'''例:''' ''マイルストーン別未解決チケット (優先度別色付け, グループのヘッダでマイルストーンにリンク)'' 
     201{{{ 
     202SELECT p.value AS __color__, 
     203     t.milestone AS __group__, 
     204     '../milestone/' || t.milestone AS __grouplink__, 
     205     (CASE owner WHEN 'daniel' THEN 'font-weight: bold; background: red;' ELSE '' END) AS __style__, 
     206       t.id AS ticket, summary 
     207  FROM ticket t,enum p 
     208  WHERE t.status IN ('new', 'assigned', 'reopened')  
     209    AND p.name=t.priority AND p.type='priority' 
     210  ORDER BY t.milestone, p.value, t.severity, t.time 
     211}}} 
     212 
     213'''Note:''' ''ticket'' 表の優先度に対応する数値は、 ''enum'' 表を結合することで 
     214取り出しています。 
     215 
     216=== 行単位のレイアウト変更 === #column-syntax 
     217デフォルトでは、全てのカラムで1行を使い、上記の指定がされていれば、 
     218フォーマットされた形式で HTML に表示されます。それだけでなく、 
     219これから挙げる指定によって、複数行にわたってのレイアウトを行うことができます。 
     220 
     221 * '''`column_`''' — ''改行''。 カラム名の語尾にアンダースコア ('_') を付与した場合、以降のカラムは次の行で表示されます。 
     222 
     223 * '''`_column_`''' — ''全行表示''。 カラム名の前後にアンダースコア ('_') を付与した場合、そのカラムは続く行で全てのカラム幅を使って表示されます。 
     224 
     225 * '''`_column`'''  —  ''データを非表示にする''。 カラム名の語頭にアンダースコア ('_') を付与した場合、 HTML 出力では非表示になります。これは (CSV や RSS のような) 別フォーマットでのダウンロード時にだけ見たい情報であるときに使います。 
     226   この機能ではあらゆるカラムを非表示にできます。リソースの特定などで他のカラムが異存しているような場合に有用です。たとえば `id as _id` とすることで、 '''Id''' カラムは非表示となりますが、チケットへのリンクは正しく生成されます。 
     227 
     228'''例:''' ''アクティブなチケットを、マイルストーンでグループ化し、優先度で色付け、チケットの説明を multi-line レイアウトでリスト表示する'' 
     229 
     230{{{ 
     231SELECT p.value AS __color__, 
     232       t.milestone AS __group__, 
     233       (CASE owner  
     234          WHEN 'daniel' THEN 'font-weight: bold; background: red;'  
     235          ELSE '' END) AS __style__, 
     236       t.id AS ticket, summary AS summary_,             -- ## ここで改行する 
     237       component,version, severity, milestone, status, owner, 
     238       time AS created, changetime AS modified,         -- ## 日付形式で整形 
     239       description AS _description_,                    -- ## 全行を使用して表示 
     240       changetime AS _changetime, reporter AS _reporter -- ## HTML 出力では表示しない 
     241  FROM ticket t,enum p 
     242  WHERE t.status IN ('new', 'assigned', 'reopened')  
     243    AND p.name=t.priority AND p.type='priority' 
     244  ORDER BY t.milestone, p.value, t.severity, t.time 
     245}}} 
     246 
     247=== カスタムフィールドをレポートで使用する === #Reportingoncustomfields 
     248 
     249チケットにカスタムフィールドを追加した場合(バージョン 0.8 以降の機能。 TracTicketsCustomFields 参照)、カスタムフィールドを含む SQL クエリを書くことができます。 ticket_custom テーブルを join をする必要がありますが、これは取り立てて簡単というわけではありません。 
     250 
     251追加のフィールドを trac.ini に宣言する ''前に'' 、チケットがデータベースに存在する場合、 ticket_custom テーブルには関連するデータを持たないことになります。これに起因する問題を回避するためには SQL の "LEFT OUTER JOIN" 節を使用してください。 
     252 
     253'''Note レポートの追加、編集をするボタンを表示するためには権限を設定する必要があります。''' 
     254 
     255---- 
     256See also: TracTickets, TracQuery, TracGuide, [http://www.sqlite.org/lang_expr.html Query Language Understood by SQLite]