【SAC】 ライブデータ接続：GEOMETRYを使用した地理モデルの構築


# はじめに

SAP Analytics Cloudへのデータ連携の方法は次の２種類になります。

1. インポート接続
2. ライブデータ接続

このうちインポート接続の場合は、座標データがあればSACのディメンション設定時に地理データを作成することができます。（下記の別記事を参照）
>【SAC】SAP Analytics Cloud でデモ環境を構築する　～前編～
>https://qiita.com/iwa_gino/items/72be48318e897908303a

一方、ライブデータ接続下で地理データを扱う場合には、HANA側で別途地理モデルを作成する必要があります。
今回は、GEOMETRYを使用した地理モデルの構築と、データモデルとの連携方法をご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/8098a930-3ad4-e86b-5100-14814caae9e7.png)

なお、手順については下記のページを参考にしました。
>Creating Geo model from Live HANA Calculation View
>https://saphanajourney.com/sap-analytics-cloud/learning-article/creating-geo-model-from-live-hana-calculation-view/

# 前提

・HANAのバージョンが *SPS11 112.07* または *SPS12 122.03* 以降である必要があります

・今回は次のテーブル、CalclationViewを使用します。

**【T_TEST_SALES_DATA（実テーブル）】**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/5fd5c53c-a735-0b4a-e23c-27014c512fe8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/db759a21-35be-8d6e-1c75-203d66fa638b.png)

**【CL_TEST_SALES_DATA（Calclation View）】**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/405329b1-53ad-b53f-b024-f6b0b31a4f7b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/24d0934c-9013-d8ed-c0b3-04b156daa544.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/a70036a4-889b-6c49-f53d-22cbb09e82a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/d9308644-0566-0d31-a19e-ed0007687504.png)



# 手順

### 1.SPATIAL REFERENCEの追加
HANA側で下記のSQLを実行し、SPATIAL REFERENCEを追加します。

```
CREATE SPATIAL REFERENCE SYSTEM "WGS 84 / Pseudo-Mercator" IDENTIFIED BY 3857
TYPE PLANAR
SNAP TO GRID 1e-4
TOLERANCE 1e-4
COORDINATE X BETWEEN -20037508.3427892447 AND 20037508.3427892447
COORDINATE Y BETWEEN -19929191.7668547928 AND 19929191.766854766
ORGANIZATION "EPSG" IDENTIFIED BY 3857
LINEAR UNIT OF MEASURE "metre"
ANGULAR UNIT OF MEASURE NULL
POLYGON FORMAT 'EvenOdd'
STORAGE FORMAT 'Internal'
DEFINITION 'PROJCS["Popular Visualisation CRS / Mercator",GEOGCS["Popular
Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular
Visualisation
Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[
"EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",
0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]],UNIT[
"metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["cen
tral_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PA
RAMETER["false_northing",0],AUTHORITY["EPSG","3785"],AXIS["X",EAST],AXIS["Y",
NORTH]]'
TRANSFORM DEFINITION '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0
+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null
+wktext +no_defs'
```


### 2.GEOMETRYを使用したGEOCODEテーブルの作成

今回は「T_TEST_SALES_DATA（実テーブル）」の**「営業所」**をキーに、
**「緯度」「経度」**を使ってジオコーディングしました。


```
CREATE COLUMN TABLE "SAC_TEST"."T_TEST_GEO_OFFICE"(
   "EIGYOUSYO" NVARCHAR(50) CS_STRING PRIMARY KEY,
   "GEOMETRY" ST_GEOMETRY(3857)
);

UPSERT "SAC_TEST"."T_TEST_GEO_OFFICE" ("EIGYOUSYO")
SELECT "営業所" FROM "SAC_TEST"."T_TEST_SALES_DATA" GROUP BY
"営業所";
UPDATE "SAC_TEST"."T_TEST_GEO_OFFICE"
SET "GEOMETRY" = new ST_GEOMETRY('POINT(' || "経度" || ' ' ||"緯度" ||
')', 4326).ST_Transform(3857)
FROM (
SELECT MIN("緯度") "緯度",
MIN("経度") "経度", "営業所"
FROM "SAC_TEST"."T_TEST_SALES_DATA" GROUP BY "営業所"),
"SAC_TEST"."T_TEST_GEO_OFFICE"
WHERE "営業所" = "EIGYOUSYO";

```



SQL実行結果：緯度経度が「GEOMETRY」にマッピングされた**「T_TEST_GEO_OFFICE」**というテーブルが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/af96ad03-043a-002f-06e6-e5e32b268086.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/d32a0917-debb-d6b4-a897-3b8700b5b7c7.png)

### 3.GEOCODEテーブルのディメンション化

コンテンツ配下に**「SAP_BOC_SPATIAL」**という名称でパッケージを作成します。
（他のパッケージ名にすると上手くいかないため注意）
「SAP_BOC_SPATIAL」内でCalclation Viewを新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/5ddf9b1c-c1a6-f921-83a7-56223daa30ae.png)

今回は「CL_TEST_GEO_OFFICE」という名称で作成します。
Data Categoryを「DIMENSION」に変更し、「完了」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/4be54a7b-fc8d-56f6-3d1c-1185c2a57641.png)

Projectionのソースに「T_TEST_GEO_OFFICE」を指定します。
EIGYOUSYO、GEOMETRYともにOUTPUTに指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/4f81df0b-b2f7-05bf-9927-6d2a3b59c781.png)

Semanticsに移動し、EIGYOUSYOをキー項目に設定します。
以上で「CL_TEST_GEO_OFFICE」の作成は終了です。Activate実行して、Calclation Viewを有効化してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/433b3184-a4a0-5868-6b9c-16a4654143a4.png)

### 4.データモデルとの連携

今回は「CL_TEST_SALES_DATA」をデータソースとした「SALES_DATA_LIVE」というモデルを作成しています。
SACにてモデル編集画面を開き、「ロケーションディメンションの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/4e4b678c-62bf-aa51-76f0-b15072a27d47.png)

ロケーションディメンションを作成画面が表示されます。
ビュー名に、先ほど作成した「CL_TEST_GEO_OFFICE」を選択します。
ロケーションIDに「営業所」、マッピング対象のIDに「EIGYOUSYO」を選び、「CL_TEST_SALES_DATA」と「CL_TEST_GEO_OFFICE」を連携します。
設定後「OK」をクリックし、モデルの保存を行ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/f1abfb56-1d46-7a3a-52f0-0bc4565f60ca.png)

以降はインポート接続の時と同じ要領で、ダッシュボードにマップを作成することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137780/8098a930-3ad4-e86b-5100-14814caae9e7.png)