Contents
アクセスと必要ロール
ServiceNow のレポート機能を利用するには、まず画面へのアクセス権限が付与されていることが前提です。ここでは標準ロールの概要と、実際にインスタンスで確認すべきポイントをまとめます。最小権限で運用できるように設計すると、セキュリティ面でも安心です。
標準ロールと権限概要
ServiceNow が提供するレポート関連の標準ロールは以下の通りです(※インスタンスによってカスタマイズされている場合があるため、管理者画面で正確な名称を確認してください)。
| ロール | 主な権限 | 付与対象例 |
|---|---|---|
| report_admin | 全レポートの作成・編集・削除+他ユーザーへのロール付与 | システム管理者、BI担当者 |
| report_user(旧 report_viewer) | 作成済みレポートの閲覧・実行 | 業務部門全員 |
| report_writer(一部環境で使用) | レポートの新規作成と自分が所有するレポートの編集 | 開発者、プロジェクトリーダー |
ポイント:レポートを「作成」できるのは
report_adminまたはreport_writer、閲覧だけならreport_userで十分です。
ロール付与手順
- ユーザー検索 → User Administration > Users。対象ユーザー名をクリック。
- 「Roles」タブを開き、右上の Edit を選択。
- 上記ロール(例:
report_admin)を検索してチェックし、Save ボタンで確定。
ロール付与後はブラウザをリロードするか、数分待つと新しい権限が有効になります。
レポートアプリの起動方法
レポート作成画面にたどり着くまでの手順はシンプルですが、正確なメニュー名を覚えておくとトラブルが減ります。このセクションでは「Report Designer」へのアクセスフローを示します。
- ナビゲーションパネルで Self-Service > Reports を選択。
- サブメニューに表示される View / Run(または Create New) のリンクをクリックすると、上部タブの Report Designer が開きます。
権限が不足している場合は「You do not have permission to view this page」と表示されるので、前節で確認したロール付与を依頼してください。
データソース選定とカスタムテーブル
標準テーブル・ビュー活用の指針
レポートの基盤となるテーブルは業務要件に合わせて絞り込むことがパフォーマンス向上の鍵です。以下は代表的な組み合わせ例です。
| 業務シナリオ | 推奨テーブル | ビュー活用例 |
|---|---|---|
| インシデント分析 | incident |
u_incident_change_view(インシデント+変更) |
| 変更管理レポート | change_request |
なし(単体で十分) |
| 資産一覧 | cmdb_ci |
u_cmdb_asset_view(資産情報集約) |
ポイント:テーブルは最小限、結合が頻繁に必要な場合は事前に Database View を作成しておくとクエリ負荷が軽減します。
カスタムテーブル作成とインデックス設定
- System Definition > Tables → New をクリックし、テーブル名(例:
u_project_tasks)とラベルを入力。 - 必要なフィールドを追加したら、各フィールドの Dictionary レコードで Indexed チェックボックスをオンにします。(検索条件に頻出する
u_status,u_created_atなど)
インデックス付与後は以下手順で再構築してください。
- System Definition > Maintain Indexes に移動。
- 対象テーブル(例:
u_project_tasks)を選択し、Rebuild Index ボタンを実行。 - ジョブステータスが「Completed」になるまで待ちます。
インデックス未設定のまま大量レコードを検索すると、クエリはフルテーブル走査となり数十秒以上かかることがありますので必ず実施しましょう。
フィルタ/条件式の実装例
基本的な期間指定とステータス集計
フィルタはレポート結果の精度を左右します。まずは日付範囲とステータス別に絞る基本パターンを紹介します。
- Filters タブで Add Filter Condition をクリックし、
Createdフィールドを選択。 - 演算子は on(当日)または between を選び、右側に相対日付スクリプトを入力します。
|
1 2 3 |
@javascript:gs.daysAgoStart(30) // 30日前の開始時刻 @javascript:gs.daysAgoEnd(0) // 今日の終了時刻 |
- ステータス別集計は
Stateフィールドに OR 条件を追加し、対象ステータス(New, In Progress, Closed)を列挙します。
| 条件式例 | 説明 |
|---|---|
Created on Today |
本日作成のレコードだけ |
Created between @javascript:gs.daysAgoStart(30) and @javascript:gs.daysAgoEnd(0) |
過去30日間 |
State = New OR State = In Progress |
新規・進行中を対象 |
ポイント:相対日付はスクリプト式で記述すると、レポートの再利用時に手動更新が不要です。
複合条件式の書き方と検証方法
高度な抽出が必要な場合は括弧で論理演算子を明示し、段階的にテストします。
- 例:
(Priority = 1 AND State != Closed) OR (Assignment Group = 'Network' AND Created > @javascript:gs.daysAgoStart(7))
条件式入力後は Run ボタンでプレビューし、件数とサンプルレコードを確認。期待通りでなければ、AND/OR の順序や括弧位置を調整してください。
レポートタイプと表示項目カスタマイズ
各種レポートタイプの特徴と選定指針
目的に合わせて最適なビジュアルを選ぶことで、意思決定が速くなります。以下は代表的なタイプと活用シーンです。
| タイプ | 主な用途 | メリット |
|---|---|---|
| List(一覧) | 詳細データの確認・エクスポート | フィルタやソートが自由 |
| Bar Chart(棒グラフ) | カテゴリ別件数比較 | 増減を直感的に把握 |
| Pie Chart(円グラフ) | 割合分析(例:インシデント種別) | 全体比率が一目で分かる |
| Timeline(タイムライン) | 時系列トレンド(SLA 達成度等) | 期間ごとの変化を可視化 |
ポイント:集計目的は棒・円グラフ、詳細確認は一覧、時間軸分析はタイムラインがベストです。
列配置・フォーマット変更手順
- レポート作成画面の Columns タブを開く。
- フィールドをドラッグ&ドロップで並び替え、不要な列は右側の X で削除。
- 列幅はヘッダー右端をドラッグし調整。数値や日付は各列設定の Format ドロップダウンから
Number (comma)やDate/Timeを選択。
条件付き書式例:インシデントレポートで Priority = 1 の行を赤字にしたい場合、列設定の Style → Conditional Formatting に以下を入力します。
|
1 2 |
if (record.priority == 1) { style.color = 'red'; } |
集計・クロス集計・計算フィールド
集計関数の設定方法
レポートにサマリ情報を付加するには、列設定画面で Aggregate を選びます。
Duration→ SUM(合計稼働時間)Priority→ AVG(平均優先度)Number→ COUNT(件数)
ポイント:集計は必ず「Group By」対象の列と組み合わせて使用しないと、サマリが正しく算出されません。
ピボット(クロス集計)レポート作成手順
- Report Type を Pivot Table に変更。
- 行軸に
Assignment Group、列軸にStateを設定。 - セル値は COUNT のインシデント件数を選択し、必要なら Total 行・列をオンにします。
| Assignment Group | New | In Progress | Closed |
|---|---|---|---|
| Network | 12 | 8 | 30 |
| Desktop Support | 5 | 3 | 20 |
計算フィールドの定義例と注意点
計算フィールドはサーバ側で評価され、レポート上に動的な数値を表示できます。
- System Definition > Dictionary → 対象テーブルで New → Calculated field を選択。
- フィールド名
u_elapsed_seconds、タイプは Integer、式は以下のように記述します。
|
1 2 |
dateDiff(gs.dateGenerate(resolved_at), gs.dateGenerate(opened_at), true); |
- 作成した計算フィールドをレポートの列に追加すれば、実績稼働時間(秒) が自動算出されます。
注意点:計算式はサーバ側で評価されるため、大量データの場合はインデックスが効かずパフォーマンス低下につながります。頻繁に利用する集計は、別テーブルに事前集計した結果を保存して参照すると効果的です。
保存・共有・スケジュール配信 と パフォーマンス最適化
フォルダー単位でのアクセス制御
レポートは Report Folders に保存し、フォルダーごとにロールベースの権限を設定します。
- レポート一覧画面で New Folder を作成。
- フォルダー右クリック → Configure > Permissions。
read(閲覧)やwrite(編集)を付与したいロール(例:report_user,project_manager) にチェックし、Save。
ポイント:プロジェクト別にフォルダーを分けると、権限管理がシンプルになり情報漏洩リスクが低減します。
スケジュール配信設定手順
- 作成したレポートの詳細画面で Schedule タブを開く。
- Run Frequency から Daily / Weekly / Monthly を選択し、実行時刻とタイムゾーンを指定。
- 配信先は Email アドレスまたは User Group を入力し、添付形式は PDF または CSV を選べます。
- 設定保存後は一覧の Next Run カラムで次回実行予定が確認できます。
インデックス・キャッシュ活用による高速化
- インデックス:検索対象カラムに
Indexedが設定されていないとフルテーブル走査になり、レポート実行が30秒以上遅くなることがあります。必ず Dictionary でインデックスを付与し、前述の Maintain Indexes から再構築してください。 - Report Cache:同一条件で頻繁に実行するレポートは「Cache Results」チェックボックス(Report Designer の Advanced Options)をオンにします。キャッシュはデータ更新頻度が低い場合に有効で、応答時間が数秒からミリ秒単位に短縮されます。
代表的エラーと対処フロー
| エラー | 主な原因 | 推奨対策 |
|---|---|---|
権限不足 (You do not have permission) |
必要ロールが未付与 | report_admin または対象フォルダーのアクセスロールを追加 |
| 件数0(データ欠損) | フィルタ条件ミス、インデックス未設定 | 条件式をテスト実行し、相対日付や OR/AND の括弧位置を確認 |
| 集計遅延(30秒以上) | 大量レコードのフル走査 | インデックス追加、ビュー化、Report Cache 有効化 |
ポイント:エラーはまず「権限」→「条件式」→「パフォーマンス」の順に確認すると、迅速に原因を特定できます。
以上が ServiceNow のレポートモジュールを安全かつ高速に運用するための実践的ガイドです。ロール名やインデックス設定は環境ごとに差異があるため、必ず管理者コンソールで確認したうえで適用してください。