はじめに
今から1年前、ServiceNow の Map レポート を使って市区町村レベルのヒートマップを実現する方法を投稿しました。
執筆当時はバージョン Xanadu かつレポート機能での実装を想定していましたが、現在コアUIレポート機能はメンテナンスモードに入っており、新規に払い出された Australia のインスタンスや Platform Analytics エクスペリエンスに移行済みインスタンスでは、レポート機能が Data Visualization に置き換え1られています。
そこで本記事では、前回の記事をベースに以下の内容へアップデートしています。
- レポート機能に代わり、Data Visualization の Geomap を使って市区町村レベルまで可視化する方法を説明します。
- 地理データの作成手順は割愛し、ServiceNow Share に公開している加工済みデータ を利用して構築します(地理データの作成方法については、別途記事にまとめる予定)。
以降の手順はバージョン Australia の PDI 環境を使用して説明します。なお、バージョン Zurich でも動作することを確認済みです。
実装イメージ
本記事では、ServiceNow に登録した GeoJSON を使用し、以下の2パターンで業務レコードを可視化します。
- Use mapping : 市区町村単位のヒートマップ2
- Use latitude and longitude : Location に登録された緯度・経度を使用したポイント表示
設定方法
1. 加工済み地理情報データをインポートする
ServiceNow Share のページ から Japan_GeoMap_for_Data_Visualization_v1.0.xml をダウンロードします。
ServiceNow で [All] > [System Update Sets] > [Retrieved Update Sets] を開き、先ほどの Update Set をアップロードした後、Preview → Commit の順に実行してください。
Commit が正常に完了すると、以下の3つのテーブルへレコードが追加されます。
Report Map [sys_report_map] テーブル
アプリケーションナビゲーターから [Platform Analytics Administration] > [Map Settings] > [Maps] を開きます。
Report Map テーブルに、47都道府県分の地図情報(GeoJSON形式)が追加されていることを確認します。
Mapping group [sys_report_map_source_mapping] テーブル
フィルターナビゲーターに sys_report_map_source_mapping.list と入力し、Mapping group テーブルのリスト画面を開きます。
OOTB では、国レベルの Country mappings、都道府県レベルの Region and state mappings が用意されていますが、Update Set を適用するとそれらに加えて 市区町村レベルで使用する City mappings が追加されます。
Mapping group は、後述する Locations Mapping のレコード群をまとめて管理するための「容れ物」のようなテーブルです。
Locations Mapping [sys_report_map_source_mappings] テーブル
Mapping group テーブルから Region and state mappings レコードを開きます。
関連リストに、[Map] の値が Japan の都道府県レコードが47件追加されていることを確認します。
同様に City mappings を開くと、1,905件分の市区町村レコードが紐づいていることを確認できます。
Locations Mapping テーブルは、ヒートマップを描画する際に、地名から GeoJSON 上のポリゴン領域を特定するために使用されます(例:地名が「あきる野市」の場合、東京都の GeoJSON から hc-key が jp-tk-228 の領域を特定して塗りつぶす)。
そのため、Location にレコードを登録する際は [Country]、[State / Province]、[City] フィールドの各値を Locations Mapping テーブルの [Key] と一致させる必要があります。
2. Map source を設定する
フィルターナビゲーターに viz_map_source.list と入力し、Map source [viz_map_source] テーブルのリスト画面を開きます。
[Platform Analytics Administration] > [Map Settings] > [Map Sources] というモジュールもありますが、こちらは旧 Map Report で使用する Map Sources [sys_report_map_source] テーブルの管理画面です。Data Visualization で使用する Map source [viz_map_source] とは異なる点に注意が必要です。
「Location mapping (level 3)」 レコードを開き、表示方法に応じて以下のように設定します。
| フィールド名 | ヒートマップを描画する場合 | 緯度・経度でポイントする場合 |
|---|---|---|
| Field | City | Name |
| How to use data | Use mapping | Use latitude and longitude |
| Use these mappings | City mappings | (選択不要) |
3. Data Visualization を作成する
アプリケーションメニューから [Platform Analytics] > [Library] > [Data Visualizations] を開き、右上の [Create data visualization] ボタンをクリックします。
[Configuration] > [Visualization type] で Geomap を選択します。
次に [Configuration] > [Data] > [Data source] で [+ Add data source] をクリックし、可視化するデータソースを指定します。
今回は Incident テーブルを選択して、[Add this source] をクリックします。
[Group by] には地図上の位置を特定するために使用するフィールドを指定します。
今回は Incident テーブルの [Location] フィールドを選択します。
設定が完了したら [Save] をクリックして保存します。
4. 動作確認
Location を作成する
Location [cmn_location] テーブルに動作確認用のレコードを作成します。
例として、以下のように値を設定します。
| フィールド名 | 入力値(例) | 備考 |
|---|---|---|
| Name | 東京都庁 | 個々の Location を識別できる値を設定 |
| Country | Japan | Locations Mapping テーブルに存在する Key と一致させること |
| State / Province | 東京都 | (同上) |
| City | 新宿区 | (同上) |
| Latitude | 35.689507 | - |
| Longitude | 139.691728 | - |
このうち、[Country]、[State / Province]、[City] は Use mapping によるヒートマップ表示で使用し、[Name]、[Latitude]、[Longitude] は Use latitude and longitude によるポイント表示で使用します。
Incident に Location を紐づける
次に、先ほど作成した Location レコードを、Data Visualization の [Group by] で指定したフィールドに設定します。
今回は Incident の location フィールドに直接設定します。
cmdb_ci.location のように、関連するレコードを経由して Location を参照する構成も可能です。どの Location フィールドを可視化に使用するかは、Data Visualization 側の [Group by] で指定が可能です3。
Data Visualization の表示を確認する
以降の手順で想定どおり Data Visualization の表示が反映されていない場合は、画面をリロードしてから再度確認してください。
先ほど作成した Data Visualization を開き、日本に色がついていることを確認します。
次に日本をクリックし、インシデントが存在する都道府県に色がついていることを確認します。
この階層では、Location の [State / Province] に設定した値が使用されます。
さらに東京都をクリックし、Location の [City] に設定した市区町村(新宿区)に色がついていることを確認します。
ここまで確認できれば、Use mapping による市区町村レベルのヒートマップ表示は成功です。
Map source の [How to use data] を Use latitude and longitude にした場合は、Location レコードの [Latitude] および [Longitude] の値を使用して地図上にポイントを表示できます。
Use latitude and longitude 使用時の注意事項
「2. Map source を設定する」で、Use latitude and longitude を使用する場合は [Field] に Name を指定すると書きました。
例えば、以下のように複数の Location を登録します。
この状態で、[Field] に Name と City を指定した場合の表示を比較すると以下のようになります。
左図のように [Field] に Name を指定した場合、「小笠原村役場」「小笠原村役場 母島支所」がそれぞれ別の Location として認識され、登録された緯度・経度にポイントが表示されます。
一方、右図のように [Field] に City を指定すると、同じ City の値を持つ Location を個別に識別できなくなります。小笠原村役場と小笠原村役場 母島支所は、どちらも City が「小笠原村」のため、それぞれの Location としてポイントを表示できません。
緯度・経度を使った表示の場合、市区町村ではなく個々の Location レコードを区別してポイントを表示する必要があるため、Use latitude and longitude では Field に Name を指定することをおすすめします。
-
https://www.servicenow.com/docs/r/now-intelligence/reporting/reporting-landing-page.html ↩
-
公式ドキュメント では、最下層の Map source では
Use latitude and longitudeを使用する構成が案内されています。
一方、本記事では市区町村レベルの GeoJSON と Mapping group を独自に追加し、最下層(level 3)でもUse mappingを利用する構成を検証しています。 ↩ -
従来のレポート機能では、可視化に使用するテーブルやフィールドごとに Map source のレコード追加が必要でしたが、Data Visualization では Data source と [Group by] で対象を選択できるようになり、構成がシンプルになりました。 ↩



















