メインコンテンツへスキップ
見出し画像

ダッシュボードは1枚のレコードじゃない(pa_dashboards)


    ServiceNow で「レポートを並べて見る画面」がダッシュボードです。その1枚は単独のレコードではありません。次のような複数のテーブルが関わります。

    • pa_dashboards(ダッシュボード本体)、pa_tabs(タブ)

    • sys_grid_canvas(配置面)、sys_grid_canvas_pane(部品枠)、sys_portal(ウィジェット)

    それぞれのレコードが参照でつながって、1つのダッシュボード画面を作っています。

    この記事は見た目の話で終わりません。実際のテーブルを起点に、次を順に確認します。

    • 入口になる pa_dashboards

    • タブを割り当てる pa_m2m_dashboard_tabs

    • タブ定義の pa_tabs

    • グリッドの配置面 sys_grid_canvas

    • 部品の枠 sys_grid_canvas_pane

    • レポートが載るウィジェット sys_portal

    「ダッシュボードにレポートを載せたい。どのテーブル(どの設定)が、どうつながっているのか」。この疑問に、PDI(Zurich)の OOTB で確認した構造で答えます。

    想定読者は、ServiceNow の Incident などは触ったことがあるが、ダッシュボードがどんなテーブルでできているかをこれから理解したい管理者・開発者です。実機で「レポートはどこに載るのか」「タブはどう増やすのか」を判断するとき、ダッシュボードからウィジェットへの参照をどうたどるかを順番に示します。

    この記事で分かること

    • ダッシュボード1枚が pa_dashboards → タブ → Grid Canvas → ウィジェットという複数テーブルの組み合わせでできていること

    • これらのテーブルが「深い業務継承」ではなく、ほぼすべて sys_metadata(Application File)直下の横並びで、構造は参照フィールドで表されること

    • タブの割当が pa_m2m_dashboard_tabs(M2M)で、タブ本体が pa_tabs であること

    • レポートや PA 部品が、最終的に sys_portal(ウィジェット)として sys_grid_canvas_pane の枠に載ること

    • 部品の位置と大きさが posx / posy / width / height(グリッド座標)で表されること

    • レスポンシブ ダッシュボード(pa_dashboards 系)と旧ホームページ(sys_dashboard 系)が別系統であること

    この記事の内容は ServiceNow の PDI(Personal Developer Instance)Zurich(ズーリッヒ)リリースの OOTB(初期設定)で確認した個人メモです。本番環境やカスタマイズ済み環境では、ダッシュボード構成・フィールド・件数の内容が異なる場合があります。レポートの実行時の描画や PA インジケータの計算は本記事の範囲外です。


    ダッシュボードとは

    ダッシュボードは「1枚の画面」ではなく、ダッシュボード本体・タブ・配置面・部品といった役割ごとのテーブルが組み合わさった仕組みです。

    ダッシュボードは、レポートや Performance Analytics(PA)の部品を1つの画面にまとめて見る仕組みです。複数のレポートを目的別に並べ、タブで切り替えながら状況を把握できます。レスポンシブ ダッシュボードの概要は、公式ドキュメントでも説明されています。

    参考:Responsive dashboards in the Core UI

    この画面は単一のレコードではありません。ダッシュボード本体は pa_dashboards、タブは pa_tabs、部品の枠は sys_grid_canvas_pane というように、役割ごとにテーブルが分かれています。だから「ダッシュボードにレポートを足す」と言っても、実際には「どの枠に、どのウィジェットを置くか」という話になります。

    今回確認した PDI(Zurich / OOTB)では、次の件数でした。

    • ダッシュボード(pa_dashboards):3件(いずれも active=true)

    • タブ(pa_tabs):24件

    • 部品の枠(sys_grid_canvas_pane):119件

    1つのダッシュボード画面は、これらのレコードが参照でつながって組み上がります。

    実際にダッシュボードを開くと、次のように見えます。OOTB の Custom Application Inventory ダッシュボードでは、棒グラフ・単一スコアのタイル・一覧といった部品がグリッド状に並び、1枚の画面を作っています。この見た目を、以降でテーブルに分解していきます。


    画像

    ダッシュボード本体の一覧(pa_dashboards)は、次のURLで確認できます。

    https://<YourInstance>/pa_dashboards_list.do


    画像

    ダッシュボード画面は複数テーブルの組み合わせ(全体構造)

    まず、1枚のダッシュボードがどう組み上がるかの全体像です。


    画像

    今回確認した PDI(Zurich / OOTB)では、構造は次のようにつながっていました。

    • pa_dashboards(Dashboard) … ダッシュボード本体。name(名前)、owner(所有者)、visible_to(公開範囲)を持つ。公開範囲は roles / restrict_to_roles / groups / users の組み合わせでも絞り込めます。

    • pa_m2m_dashboard_tabs(Dashboard Tab) … 「どのダッシュボードに、どのタブを、どの順で置くか」を表す割当(M2M)。dashboard と tab を参照し、order / home を持つ。

    • pa_tabs(Tab) … タブ定義。canvas_page(→sys_grid_canvas)と page(→sys_portal_page)を持つ。

    • sys_grid_canvas(Grid Canvas) … 1タブの配置面(グリッド)。

    • sys_grid_canvas_pane(Grid Canvas Pane) … 配置面の中の1つの部品枠。posx / posy / width / height で位置と大きさを持つ。

    • sys_portal(Portal ウィジェット) … 枠に表示される部品本体。レポートや PA 部品がここに載る。

    ポイントは、pa_dashboards そのものに「どのレポートを置くか」が直接書かれていない点です。タブの割当は pa_m2m_dashboard_tabs に、部品の配置は sys_grid_canvas_pane に分かれています。ダッシュボード → タブ割当 → タブ → 配置面 → 部品枠 → ウィジェット、という参照のチェーンをたどって初めて「この画面に何が並ぶか」が決まります。


    これらのテーブルは「浅い継承・横並び」

    ダッシュボード系のテーブルは深い業務継承を持たず、ほぼすべて sys_metadata 直下に横並びで、つながりは参照フィールドで表されます。

    task 系や CMDB 系のテーブルは、task や cmdb_ci を頂点とする業務的な継承階層を持ちました。ダッシュボード系のテーブルは、それとは性格が違います。


    画像

    今回確認した PDI(Zurich / OOTB)では、次のテーブルはいずれも super_class(継承元)が sys_metadata(Application File)でした。

    • pa_dashboards / pa_m2m_dashboard_tabs / pa_tabs

    • sys_grid_canvas / sys_grid_canvas_pane / sys_portal_page

    業務的な親子関係でテーブルが積み上がっているのではなく、すべてが「アプリの構成ファイル」の一種として横並びになっています。

    例外は1つで、sys_portal(ウィジェット)は継承元のないルートテーブルでした(super_class が空)。これも深い継承を持たない点では同じです。

    ではテーブル同士の構造(ダッシュボードとタブ、タブと配置面など)は何で表されているかというと、各テーブルの参照(Reference)フィールドです。継承ではなく参照で「親」を指すのが、このファミリーの読み方の基本になります。

    各テーブルの役割と件数、上につながる参照フィールドは次のとおりです。


    画像

    主なテーブルの固有フィールド数

    pa_dashboards 28 / pa_m2m_dashboard_tabs 9 / pa_tabs 7 / sys_grid_canvas 3 / sys_grid_canvas_pane 7 / sys_portal 10 / sys_portal_page 12 / sys_dashboard 8

    これらのテーブル定義は、次のURLで確認できます(先頭の <YourInstance> は自分のインスタンスに置き換えてください)。

    https://<YourInstance>/sys_db_object_list.do?sysparm_query=nameSTARTSWITHpa_dashboard^ORnameSTARTSWITHsys_grid_canvas^ORname=sys_portal_page^ORname=pa_tabs


    画像

    タブはダッシュボードに「割り当て」られる

    ダッシュボードのタブは、タブ本体(pa_tabs)と、それをダッシュボードに割り当てる中間テーブル(pa_m2m_dashboard_tabs)に分かれています。

    今回確認した PDI(Zurich / OOTB)では、参照は次の向きでした。

    • pa_m2m_dashboard_tabs の dashboard フィールド → pa_dashboards(このタブ割当がどのダッシュボードに属するか・必須)

    • pa_m2m_dashboard_tabs の tab フィールド → pa_tabs(どのタブ定義を指すか・必須)

    • pa_tabs の canvas_page フィールド → sys_grid_canvas(タブのレスポンシブ配置面)

    • pa_tabs の page フィールド → sys_portal_page(タブのページ・必須)

    pa_m2m_dashboard_tabs は order(タブの並び順)と home(最初に開くタブか)を持ちます。だから「タブの順番を変えたい」「最初に開くタブを変えたい」ときは、ダッシュボード本体ではなくこのタブ割当(pa_m2m_dashboard_tabs) を見ることになります。

    件数で見ると、今回の PDI では pa_dashboards が3件、pa_tabs が24件、pa_m2m_dashboard_tabs が5件でした。タブ定義(pa_tabs)の数とダッシュボードへの割当(pa_m2m_dashboard_tabs)の数は一致しません。OOTB のタブ/キャンバス定義が、今ある3つのダッシュボードに全部割り当てられているわけではないためです。タブ本体は使い回せる定義で、どのダッシュボードに載せるかは割当レコードで決まります。

    タブ一覧は、次のURLで確認できます。

    https://<YourInstance>/pa_tabs_list.do
    https://<YourInstance>/pa_m2m_dashboard_tabs_list.do


    画像

    部品はグリッドの枠(pane)に座標で置かれる

    つまずきやすいのが、「画面に置かれた部品の枠」と「部品の中身」が別テーブルである点です。

    • sys_grid_canvas(Grid Canvas) … 1タブの配置面(グリッド)。今回の PDI では19件。

    • sys_grid_canvas_pane(Grid Canvas Pane) … 配置面の中の1つの部品枠。今回の PDI では119件。

    • sys_portal(Portal ウィジェット) … 枠に載る部品本体。今回の PDI では376件。

    sys_grid_canvas_pane は grid_canvas で配置面を参照します。portal_widget でウィジェット本体を参照し、posx / posy(位置)と width / height(大きさ)でグリッド上の置き方を持ちます。部品の位置や大きさを変えるなら、この pane の座標を見ます。


    画像

    pane の固有フィールドは次のとおりです。


    画像

    このフィールド定義は、次のURLで一覧できます。

    https://<YourInstance>/sys_dictionary_list.do?sysparm_query=name=sys_grid_canvas_pane^elementISNOTEMPTY


    画像

    実機のサンプルでは、width が4や12、height が10といった値で、グリッド座標(posx / posy)で配置されていました。幅はグリッドの単位で表され、12 が横いっぱいにあたります。レポートや PA 部品は、最終的にこの枠に載る portal_widget(sys_portal)として表示されます。

    部品枠の一覧は、次のURLで確認できます。

    https://<YourInstance>/sys_grid_canvas_pane_list.do


    画像

    レポートはウィジェット(sys_portal)として載る

    ダッシュボードに「レポートを載せる」とき、レポートそのものが pane に入るのではありません。レポートや PA 部品は、sys_portal(Portal ウィジェット) という部品レコードを経由して枠に載ります。

    sys_portal は page(→sys_portal_page)でどのページに属するかを持ちます。dropzone / offset / summary などの配置・表示用フィールドも持ちます。今回の PDI では sys_portal が376件あり、これがダッシュボードやホームページ上の「部品」の実体になっています。sys_grid_canvas_pane の portal_widget がこの sys_portal を指すことで、「この枠に、この部品を表示する」というつながりができます。


    画像

    だから「ダッシュボードにレポートを足したい」場合は、配置面(sys_grid_canvas)に新しい枠(sys_grid_canvas_pane)を作ります。その枠の portal_widget でレポートを表示するウィジェット(sys_portal)を指す、という流れになります。実際の操作は GUI(ダッシュボードの編集画面)で行いますが、裏側ではこの参照チェーンができています。レポートをダッシュボードに載せる操作手順は、公式ドキュメントにまとまっています。

    参考:Create or configure a responsive dashboard


    レスポンシブ ダッシュボードと旧ホームページは別系統

    ここまで見てきた pa_dashboards 系とは別に、ServiceNow には古い「ホームページ」の系統(sys_dashboard 系)があります。両者は「画面に部品を並べる」という目的は同じですが、テーブルが別系統です。


    画像

    今回確認した PDI(Zurich / OOTB)では、次の違いがありました。

    • レスポンシブ ダッシュボード … pa_dashboards(3件)を本体とし、sys_grid_canvas_pane(119件)が部品枠、載る部品は sys_portal(ウィジェット)。配置は posx / posy / width / height のグリッド座標。

    • 旧ホームページ

    • sys_dashboard(Dashboard Layout・16件)を本体とし、sys_dashboard_detail(Placement)が配置、載る部品は sys_gauge(ゲージ)

    • 配置は board_row / board_column / row_span / column_span の行列


    画像

    旧ホームページ系の主なフィールド

    sys_dashboard は columns / rows のほか、cell_width・cell_height(既定はどちらも300)を持ちます。sys_dashboard_detail は board_id(→sys_dashboard)と gauge_id(→sys_gauge)で本体とゲージを参照します。

    同じ「ダッシュボード/ホームページ」でも、どのテーブルを見ているかで系統が違う点に注意してください。Zurich ではレスポンシブ ダッシュボードがホームページの役割を引き継いでおり、新しく作るならこちらが中心になります。

    ホームページとレスポンシブ ダッシュボードの関係は、公式ドキュメントでも説明されています。

    参考:Set responsive dashboards as your home


    ServiceNow におけるダッシュボード構造のポイント

    • 1枚のダッシュボードは、次の参照チェーンをたどります。複数テーブルのレコードの組み合わせでできています。

    • pa_dashboards → pa_m2m_dashboard_tabs → pa_tabs

    • sys_grid_canvas → sys_grid_canvas_pane → sys_portal

    • これらのテーブルは task 系・cmdb 系のような深い業務継承ではありません。今回確認した PDI ではほぼすべて sys_metadata(Application File)直下の横並びでした(sys_portal だけはルートテーブル)。構造は継承ではなく参照フィールドで表されます。

    • タブはタブ本体(pa_tabs)と割当(pa_m2m_dashboard_tabs)に分かれ、タブの順番・最初に開くタブは割当レコードの order / home で決まります。

    • 部品は sys_grid_canvas_pane(枠)に posx / posy / width / height の座標で置かれます。その portal_widget が sys_portal(ウィジェット)を指します。レポートや PA 部品はこのウィジェットとして載ります。

    • レスポンシブ ダッシュボード(pa_dashboards 系)と旧ホームページ(sys_dashboard 系)は別系統です。配置はそれぞれグリッド座標と行列で表します。

    ダッシュボードを調べるときは、まず「いま見ているのはどの段か」を見分けます(ダッシュボード本体/タブ/部品枠/ウィジェット)。ダッシュボードからウィジェットまでの参照チェーンを上下にたどります。


    実機を見て気づいたこと

    • sys_grid_canvas には legacy_page(→sys_portal_page)という参照フィールドが残っていました。今のタブ・配置の主経路は pa_tabs.canvas_page / pa_tabs.page ですが、以前の仕組みの名残とみられるフィールドが配置面テーブル側にも残っています。

    • ダッシュボードは pa_dashboards_group(Dashboard Group)で束ねてグループ管理もできる作りでした。一覧では見えにくい、フォルダ分けのような機能です。

    • sys_portal_page は54件ありましたが、selectable(ユーザーが選べる状態)は5件だけでした。大半は選択対象ではない内部的なページとみられます。


    次に読むなら

    次に確認したいのは、次のテーマです。

    • ウィジェット(sys_portal)が実際にどんな部品(レポート/PA インジケータ/ゲージ)を描くかという「中身」

    • レポート定義(sys_report)と Performance Analytics(pa_indicators / pa_widgets)の関係

    この記事は構造(テーブル・フィールド・参照)に絞ったため、レポートの実行時の描画や PA のスコア計算には踏み込んでいません。これらは別記事で扱う予定です。


    用語

    • PDI:Personal Developer Instance(無料の検証用インスタンス)

    • OOTB:Out of the Box(初期設定のまま)

    • ダッシュボード(pa_dashboards):レポートや PA 部品を並べて見る画面の本体

    • タブ(pa_tabs):ダッシュボードの中の切り替え単位

    • Grid Canvas(sys_grid_canvas):1タブの配置面(グリッド)

    • Pane(sys_grid_canvas_pane):配置面の中の1つの部品枠(座標で配置)

    • ウィジェット(sys_portal):枠に載る部品本体(レポート/PA部品が載る)

    • sys_metadata(Application File):アプリの構成ファイルを表す基底テーブル

    自分の環境で確認するときのURL

    先頭に自分のインスタンスを付けると、同じ画面が開けます。

    テーブル定義         : sys_db_object_list.do?sysparm_query=nameSTARTSWITHpa_dashboard^ORnameSTARTSWITHsys_grid_canvas^ORname=sys_portal_page^ORname=pa_tabs
    ダッシュボード一覧   : pa_dashboards_list.do
    タブ一覧             : pa_tabs_list.do / pa_m2m_dashboard_tabs_list.do
    配置面 / 部品枠      : sys_grid_canvas_list.do / sys_grid_canvas_pane_list.do
    ウィジェット一覧     : sys_portal_list.do
    部品枠フィールド     : sys_dictionary_list.do?sysparm_query=name=sys_grid_canvas_pane^elementISNOTEMPTY

    関連記事


    検証範囲とおことわり

    • 確認した範囲:pa_dashboards / pa_m2m_dashboard_tabs / pa_tabs / sys_grid_canvas / sys_grid_canvas_pane

    • sys_portal / sys_portal_page / sys_dashboard / sys_dashboard_detail の実在と継承

    • sys_portal を除き sys_metadata 直下

    • 構造を作る参照フィールドの向き、各テーブルの固有フィールド数と主要フィールド

    • 部品枠の座標フィールド(posx / posy / width / height)、各テーブルのレコード件数

    • レスポンシブ ダッシュボードと旧ホームページの系統の違い。すべて PDI(Zurich / 2026-06-20 確認)の OOTB で取得しています

    • 確認していない範囲:レポート(sys_report)が実行時にどう描画されるか、Performance Analytics のインジケータ/スコアの計算

    • レスポンシブ ダッシュボードと Analytics Center / Next Experience(par_dashboard)の関係詳細

    • タブ並びやペイン座標の実レンダリング挙動、各ダッシュボードの ACL・共有による実可視範囲。これらは構造(テーブル・フィールド・件数)の範囲外として別途扱います

    今回は PDI の OOTB(初期設定)を前提に、ダッシュボードの構造を確認しました。実環境では、既存のカスタマイズによってダッシュボード・タブ・ウィジェットの数や内容が変わります。

     
     
    ServiceNowのPDI(Personal Developer Instance)を実機で観察して、Noteに記事を書いています 実装・運用・教育の現場視点で淡々と記録中です リクエストがあればその記事も書きます 個人の観察日記です

    あなたへのおすすめ