今回はPart.2のカスタム地理階層の作成についてご紹介します。
手順
全4回でご紹介する手順は下記の通りです
Part.1 SAP HANA Cloudでの コロプレス/ドリルレイヤを使用するためのセットアップ
Part.2 SAP HANA Cloud での カスタム地理階層の作成(今回)
Part.3 SAP HANA Cloudでの 分析用データの準備 / SAP HANA Cloud の Calculation View の作成
Part.4 SAP Analytics Cloudでの システム設定 / モデル作成 / 地理マップの作成
手順の全体像はこのようになっています。
それでは Part.2 を始めましょう!
Part.2 SAP HANA Cloudでのカスタム地理階層の作成
標準地理階層(Default Geographical Data)の確認
SAP_FPA_SPATIAL_CUSTOM_REGIONS_Z.Z.Z.mtar のインポートで利用可能になる標準地理階層の確認をおこないます
1.SAP HANA Database Explorer を使用して ”DEMO” ユーザ で SQL コンソールを起動し、以下の SQL を実行します
-- 標準地理階層の確認
SELECT * FROM "SAP_FPA_SPATIAL_CUSTOM_REGIONS"."sap.fpa.services.spatial::custom_hierarchy.CHOROPLETH_CUSTOM_HIERARCHY";
2.SACで認識される標準地理階層が表示されます
残念ながら、標準地理階層には、日本の地図データとして国レベル(LEVEL=1)しか含まれていません。このため、現時点(2022/8)では、SACのコロプレス/ドリルレイヤを使用して日本の都道府県や市区町村といったエリアを”標準地理階層だけで” 扱うことができません。
SACのコロプレス/ドリルレイヤを使用して日本の都道府県や市区町村といったエリアを扱うためには、都道府県、市区町村の区域を表現するESRI Shapefileを入手して、カスタム地理階層を作成する必要があります。
カスタム地理階層を作成する場合、下表に記載したカラムを持つテーブルを各階層レベルごとに作成する必要があります
必要なカラム | データ型 | 概要 |
ID | integer | ユニークID |
NAME | varchar または nvarchar | 名前。SACのUI(ツールチップ等)で利用される。 |
SHAPE | ST_GEOMETRY | SACの地図マップで表示される地理形状 |
SHAPEPOINT | ST_POINT | SHAPEの中心点。ST_Centroid() で算出する |
IS_LEAF | boolean | データポイントに直接ドリルできるか否か |
日本の地理階層テーブルの作成
日本の地理階層を作成します。“DEMO” ユーザで、任意のスキーマ(この例では DEMO スキーマ)に以下の階層レベルを表す3つのテーブルを作成します
- レベル1: 国(JAPAN_HIER_LEVEL_1)
- レベル2: 都道府県(JAPAN_HIER_LEVEL_2)
- レベル3: 市区町村(JAPAN_HIER_LEVEL_3)
1.SAP HANA Database Explorer を使用して ”DEMO” ユーザ で SQL コンソールを起動し、以下の SQL を実行します
CREATE COLUMN TABLE "DEMO"."JAPAN_HIER_LEVEL_1" (
ID INT PRIMARY KEY
, NAME NVARCHAR(100)
, SHAPE ST_GEOMETRY(3857)
, SHAPEPOINT ST_POINT(3857)
, IS_LEAF BOOLEAN
);
CREATE COLUMN TABLE "DEMO"."JAPAN_HIER_LEVEL_2" (
ID INT PRIMARY KEY
, NAME NVARCHAR(100)
, SHAPE ST_GEOMETRY(3857)
, SHAPEPOINT ST_POINT(3857)
, IS_LEAF BOOLEAN
);
CREATE COLUMN TABLE "DEMO"."JAPAN_HIER_LEVEL_3" (
ID INT PRIMARY KEY
, NAME NVARCHAR(100)
, SHAPE ST_GEOMETRY(3857)
, SHAPEPOINT ST_POINT(3857)
, IS_LEAF BOOLEAN
);
日本地図のESRI Shapefileの準備
日本地図の階層を作成するための Shapefile を準備します
※今回使用するデータは非商用での利用のみ可能、再配布や商用利用は不可
1. DIVA-GIS にアクセスしプルダウンメニューから以下を選択して、[OK]ボタンをクリックして、Shapefile をダウンロードします
- Country: Japan
- Subject: Administrative areas
2.[Download] のリンクをクリックし、ダウンロードするフォルダを選択してダウンロードを実行します
HANA Cloud への ESRI Shapefile のインポート
HANA Cloud に Shapefile をインポートします。インポートは、SAP HANA Database Explorer から実行できます。
1.“DEMO” ユーザで SAP HANA Database Explorer にアクセスし、Tables を右クリックして表示されるコンテキストメニューから [Import Data] を選択します
2.IMPORT TYPE で、”Import ESRI Shapefiles” を選択し、[Step 2] ボタンをクリックします
3.IMPORT SOURCE で以下を入力し、zip ファイルに含まれる Shapefile が表示されたらlicense のチェックを外して、[Step 3] ボタンをクリックします
- Import Shapefiles From: Local
- Local Archives: ダウンロードした zip ファイル(この例では JPN_adm.zip)
4.IMPORT TARGET で、Import into New/Existing Schema に 任意のスキーマ(この例ではDEMO)を入力して [Step 4] ボタンをクリックします
5.IMPORT OPTIONS で、以下を入力して、[Import] をクリックします(※ データの SRID が4326 であるため SRID=4326 としてインポートします)
- Number of Parallel Threads: 任意の数字(この例では4)
- Spatial Reference Identifier (SRID): (4326) WGS 84
日本の地理階層テーブルにデータを入れる
インポートしたデータをもとに日本の地理階層テーブルにデータを入れます
1.“DEMO”ユーザで、SQL Console から 以下の SQL を実行します
- SRIDを4326から3857に変換します
- SHAPE の中心点を ST_Centroid() で算出します
INSERT INTO "DEMO"."JAPAN_HIER_LEVEL_1" ("ID", "NAME", "SHAPE", "SHAPEPOINT")
SELECT ID_0, NAME_CHINE, SHAPE.ST_Transform(3857), SHAPE.ST_Transform(3857).ST_Centroid()
FROM "DEMO"."JPN_adm0";
INSERT INTO "DEMO"."JAPAN_HIER_LEVEL_2" ("ID", "NAME", "SHAPE", "SHAPEPOINT")
SELECT ID_1, NL_NAME_1, SHAPE.ST_Transform(3857), SHAPE.ST_Transform(3857).ST_Centroid()
FROM "DEMO"."JPN_adm1";
INSERT INTO "DEMO"."JAPAN_HIER_LEVEL_3" ("ID", "NAME", "SHAPE", "SHAPEPOINT")
SELECT ID_2 , NL_NAME_2, SHAPE.ST_Transform(3857), SHAPE.ST_Transform(3857).ST_Centroid()
FROM "DEMO"."JPN_adm2";
User Provided Service の作成
HDI スキーマから非 HDI スキーマにアクセスするために User Provided Service を作成します
1.SAP Business Application Studio のメニューから [Terminal] > [New Terminal] を選択し開いたターミナルから以下のコマンドを実行して、”hanacloud-ups” という名前の User Provided Service を作成します
$ cf cups hanacloud-ups -p "{"user":"DEMO", "password":"<パスワード>", "tags":["hana"], "schema":"DEMO"}"
データベース接続の作成
作成した User Provided Service を使用して HANA Cloud データベースに接続するために Database Connection を作成します
1.SAP Business Application Studio の SAP HANA PROJECTS の demo/db 以下の Database Connections の [add database connection] ボタンをクリックします
2.Add Database Connection の画面から以下を入力し、[Add] ボタンをクリックします
- Select connection type: Existing user-provided service instance
- Select SAP HANA user-provided service instance name: 作成したUPSの名前(この例ではhanacloud-ups)
アクセス権限設定ファイルの作成
作成した User Provided Service を使用して HANA Cloud データベースに接続する際のアクセス権限の設定をおこないます
1.SAP Business Application Studio で demo プロジェクトを開き、demo/db フォルダに cfg フォルダを作成します
2.cfg フォルダに、”demo.hdbgrants” という名前のファイルを作成します
3.エディタで次のコードを入力します。この例では、“DEMO” スキーマに対する SELECT 権限を付与しています
{
"hanacloud-ups" : {
"object_owner" : {
"schema_privileges" : [
{
"reference" : "DEMO",
"privileges_with_grant_option" : ["SELECT"]
}
]
},
"application_user" : {
"schema_privileges" : [
{
"reference" : "DEMO",
"privileges_with_grant_option" : ["SELECT"]
}
]
}
}
}
5.ファイルを Save して、Deploy します
シノニムの作成
HDI コンテナの Calculation View から非 HDI コンテナのスキーマ内のテーブルにアクセスするためにシノニムを作成します
1.SAP Business Application Studio のメニューから [View] > [Find Command…] を選択します
2.”HANA”と検索して“SAP HANA: Create SAP HANA Database Artifact” を選択します
3.Create SAP HANA Database Artifact 画面で以下を入力して [Create] ボタンをクリックします
- Specify where you want to create the new artifact: /home/user/projects/<プロジェクト名>/db/src
- Choose the database version: HANA Cloud
- Choose the artifact type: Synonym (hdbsynonym)
- Specify the artifact name: 任意の名前(この例では demo)
4.シノニムエディタで Synonym Name に “JAPAN_HIER_LEVEL_1” と入力し、Object Name の…[Click to Select] ボタンをクリックします
5.Find Data Sources 画面において、Services の “hanacloud-ups” にチェックします
6.検索窓に “JAPAN_HIER” を入力し、JAPAN_HIER_LEVEL_1 テーブルにラジオボタンにチェックし、[Finish] ボタンをクリックします
7.同様に、シノニムエディタで以下のシノニムを定義します
- Synonym Name: JAPAN_HIER_LEVEL_2(DEMO.JAPAN_HIER_LEVEL_2 にマッピング)
- Synonym Name: JAPAN_HIER_LEVEL_3 (DEMO.JAPAN_HIER_LEVEL_3 にマッピング)
8.[File] > [Save] を選択して、シノニムファイルを保存し、作成したシノニムファイル(この例では demo.hdbsynonym)をデプロイします
日本の地理階層の Calculation Viewの作成
日本の地理階層テーブル毎に Dimension タイプの Calculation View を作成します
1.SAP Business Application Studio のメニューから [View] > [Find Command…] を選択します
2.“SAP HANA: Create SAP HANA Database Artifact” を選択します
3.Create SAP HANA Database Artifact 画面で以下を入力して [Create] ボタンをクリックします
- Specify where you want to create the new artifact: /home/user/projects/<プロジェクト名>/db/src
- Choose the database version: HANA Cloud
- Choose the artifact type: Calculation View (hdbcalculationview)
- Specify the artifact name: CV_JAPAN_HIER_LEVEL_1
- Specify the label: CV_JAPAN_HIER_LEVEL_1
- Choose a data category: DIMENSION
- Choose a dimension type: STANDARD
4.このようなダイアログが表示された場合、Data Category を DIMENSION にして [Create] ボタンをクリックします(表示されない場合は次へ進む)
5.Projection ノードの [Add Data Source] をクリックします
6.Find Data Sources ダイアログで、”JAPAN”と検索し、”JAPAN_HIER_LEVEL_1” のラジオボタンにチェックし、[Finish] ボタンをクリックします
7.Projection ノードの [Expand Details Panel] をクリックします
8.Mapping タブで、Data Sources の “JAPAN_HIER_LEVEL_1” テーブルを選択し、[Add To Output] ボタンをクリックして、すべてのカラムを Output Columns に指定します
9.左のフィールドでSemantics ノードをクリックし、Columns タブで、ID の Key にチェックします
※Key カラムが表示されていない場合、歯車マーク⚙の[Customize Column Display] ボタンをクリックして、Key カラムを表示するように設定します
11.変更を保存して、デプロイします
12.同様の手順で JAPAN_HIER_LEVEL_2 をもとに CV_JAPAN_HIER_LEVEL_2 を作成して、IDをKeyに設定し、デプロイします
13.同様の手順で JAPAN_HIER_LEVEL_3 をもとに CV_JAPAN_HIER_LEVEL_3 を作成して、IDをKeyに設定し、デプロイします
HDIコンテナにアクセスするためのロールの付与
HDI コンテナに作成した日本の地理階層の Calculation View にデータベースユーザである “DEMO” ユーザでアクセスするために、”DEMO” ユーザに HDI コンテナにアクセスするためのロールを付与します
1.DBADMIN ユーザで SAP HANA Cockpit にログインし、 User Management アプリケーションを起動します
2.“DEMO” ユーザの [Assign Roles] をクリックします
3.Role Assignment for User DEMO 画面で、[Edit] ボタンをクリックし、[Add] ボタンをクリックします
4.Select Roles の画面で以下のロールにチェックし、[Select] ボタンをクリックします
- <HDIコンテナ名>::access_role(この例では、SPATIAL_DEMO_1::access_role)
6.Role Assignment for User DEMO 画面で、[Save] ボタンをクリックし、変更を保存します
カスタム階層の登録
作成したカスタム階層を CHOROPLETH_CUSTOM_HIERARCHY テーブルに登録します
1.SAP HANA Database Explorer を起動し、”DEMO” ユーザで HANA Cloud に接続し、SQL Console で以下の SQL を実行し、カスタム階層を登録します
※CV_JAPAN_HIER_LEVEL_*はCalculation View名、SPATIAL_DEMO_1はスキーマ名(HDIコンテナ名)
INSERT INTO "SAP_FPA_SPATIAL_CUSTOM_REGIONS"."sap.fpa.services.spatial::custom_hierarchy.CHOROPLETH_CUSTOM_HIERARCHY"
VALUES ('Japan Region Hierarchy', 2, 'NAME', 'name', 6, 1, '階層レベル1', 'SHAPE', 'CV_JAPAN_HIER_LEVEL_1', '', 'SPATIAL_DEMO_1', '0');
INSERT INTO "SAP_FPA_SPATIAL_CUSTOM_REGIONS"."sap.fpa.services.spatial::custom_hierarchy.CHOROPLETH_CUSTOM_HIERARCHY"
VALUES ('Japan Region Hierarchy', 2, 'NAME', 'name', 7, 2, '階層レベル2', 'SHAPE', 'CV_JAPAN_HIER_LEVEL_2', '', 'SPATIAL_DEMO_1', '0');
INSERT INTO "SAP_FPA_SPATIAL_CUSTOM_REGIONS"."sap.fpa.services.spatial::custom_hierarchy.CHOROPLETH_CUSTOM_HIERARCHY"
VALUES ('Japan Region Hierarchy', 2, 'NAME', 'name', 8, 3, '階層レベル3', 'SHAPE', 'CV_JAPAN_HIER_LEVEL_3', '', 'SPATIAL_DEMO_1', '0');
カスタム階層が登録され、SACから利用できるようになりました。
お疲れさまでした!Part.3はこちらです