｢CDS View｣の基本的なことまとめ

# はじめに
近年、S/4HANAのデータを外部と連携するユースケースが増加し、「CDS View」に関する説明依頼や問い合わせが頻繁になっています。日本語で全体像をしっかりとまとめた記事が少ないため、自身の理解を整理する目的でこの記事を執筆しました。

本記事は、「[SAP Business Technology Platform (BTP)の基本的なことのまとめ](https://qiita.com/Yanagawa_Yoshihisa/items/bea677d3b851f6604d0d)」や「[SAP Side by Side開発の基本的なことまとめ](https://qiita.com/Yanagawa_Yoshihisa/items/4dd3694800576e094b0a)」に続く、基本事項の解説記事です。

なお、この記事は概要把握や個人的なトライアル利用の参考としてまとめたものです。実際のプロジェクトでの利用に際しては、SAP社への直接の問い合わせや、公式情報源である[Help Portal](https://help.sap.com/docs/)をご活用ください。

また、「CDS View」と密接に関連する「OData」については、「[何がすごいの「OData」](https://qiita.com/Yanagawa_Yoshihisa/items/c0143ac499429ff75a05)」という記事で詳しく解説していますので、併せてご覧いただければ幸いです。

# 一言でいうと
CDS ViewはS/4HANA内で作成されるViewです。概念的にはSQLのViewに近似していますが、HANAのインメモリ機能を最大限に活用する設計となっており、極めて高速に動作します。S/4HANA内のマスターデータやトランザクションデータを効率的に閲覧するため、S/4HANAには標準機能として多数のViewが事前に用意されています。さらに、必要に応じて開発ツールを使用し、カスタムViewを作成することも可能です。

# CDS Viewの基本
正式には「ABAP CDS View」と呼ばれ、SAP社が開発したABAPベースのオブジェクトです。
基本的にはSQLのViewに似た概念ですが、HANAのインメモリ機能を最大限に活用する設計となっているため、極めて高速に動作します。以下に基本的な特徴をまとめます。

<CDS Viewの基本事項>
- HANAのインメモリ機能を最大限に活用する設計により、データの読み込みが極めて高速です。
- DBではなく、ABAPスタック上で動作するオブジェクトです。そのため、DBレイヤーでの権限付与やログインが不要で、ABAPの開発物と同様に管理（移送など）できます。
- 内部的には、HANAレイヤーにおいてSQL Viewとして生成されます。
- S/4HANAの標準機能として、多数のCDS Viewが用意されています。これらの標準ViewはFioriアプリケーション「View Browser」で閲覧可能です。
- 独自のCDS Viewを作成するには「ABAP Development Tools (ADT)」が必要です。また、Fioriアプリケーションのキーユーザー拡張機能「Custom CDS Views」を使用して簡易的な開発も可能です。ADTはEclipseのプラグインとして提供されています。詳細は@tamiさんの[こちら](https://qiita.com/tami/items/c0c01cd7b6b950e3a1ab)の記事が参考になります。
- なお、CDSは「Core Data Services」の略称です。

![スクリーンショット 2023-05-23 22.21.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/53db9472-b26b-0ed3-bd1b-3b99041c64e6.png)

# CDS Viewで実現したいこと

「CSD View」にて実現したい最も重要なことは、「OLTP（Online Transaction Processing）とOLAP（Online Analytical Processing）の統合」です。これは、リリース時から提唱されているS/4HANAの大きな目的の1つでもあります。

従来、ERPはOLTP（Online Transaction Processing）を実現するための仕組みでした。そのデータを閲覧するためには、ETLツールなどを用いてデータ加工等を実施し、別のデータベースによりOLAP（Online Analytical Processing）を実施するのが一般的でした。分析に対してタイムラグが発生してしまうというデメリットを抱えていました。このようなアーキテクチャとなっているのは、DBに処理能力的な限界があったからです。そこに改善点を見いだしたSAP社は、インメモリを採用することにより、メモリ上で「CDS View」によるOLAPを実施し、リアルタイムでの業務データ分析を可能にしました。これが、「OLTP（Online Transaction Processing）とOLAP（Online Analytical Processing）の統合」です。

# CDS Viewを利用するメリット

1. コードプッシュダウンによる処理の高速化
    1. 定義したViewの内容は、HANAのインメモリ上でSQL Viewとして生成され、呼び出しに対してデータを確保し待機します。そのため、ABAPレイヤーで一からビューを発行する場合と比べて処理が高速化されます。この、ビュー生成処理を下位のHANAレイヤーで実施することを「コードプッシュダウン」と呼びます。
2. Annotationを利用したロジックの組み込み
    1. 「Annotation」技術を用いて、項目長などの一般的なDB属性以外の要素を管理できます。これにより、アプリケーションレイヤーで実施すべきロジックをDBレイヤーに移行でき、開発工数の削減と一元化に貢献します。
3. ODataサービスとしての外部公開
    1. CDS ViewはODataサービスを自動生成できます。これにより、外部サービスから一般的な通信プロトコルであるHTTPベースでの情報のやり取りが可能になります。
4. SAP Fiori elementsなどのSAP社の技術と統合したUIの自動生成
    1. SAP社のフロントエンド技術「SAP Fiori elements」などは、CDS Viewとの統合を前提に作成されています。そのため、View検索画面などを自動で生成できます。

# CDS Viewの種類

CDS Viewには複数の種類があります。これらは主に「技術名称」と「View Type」によって区別されます。ただし、この区分けは厳密なシステム上の制約ではなく、標準で定義されているViewでも分類が曖昧な場合があります。

| 名称               | 概要                                                                                | 技術名称 | View Type   |
|-------------------|-------------------------------------------------------------------------------------|----------|-------------|
| Consumption View | 特定のレポート要件実現のために作成された外部公開向けのビュー。基本的には再利用は想定されない。 | C_       | CONSUMPTION |
| Interface View    | 再利用を想定された、業務的な意味のあるまとまりのビュー。Basic ViewとComposite Viewから構成される。        | I_       |             |
| - Basic View       | Customer や Sales Order といった重複しないコアエンティティを表すために使用するビュー。                     | I_       | BASIC       |
| - Composite View   | 複数のBasic Viewを組み合わせたView                                                 | I_       | COMPOSITE   |
| Extension View    | 標準の VDM 内 の View に対して 拡張（例：項目追加）したい場合に作成される View             | E_       | EXTENSION   |
|||||
| Private View      | Interface View作成の為の部品となるビュー。再利用は想定されない。上記のViewとは異なり、View typeではない。技術名称として「P_」をつけて区別される。 | P_       |             |

上記の概念とは別のQueryの種類定義も存在しています。

Analytic Query：こちらは多次元分析前提としたCDS Viewです。一般のCDS ViewがFioriアプリなどで利用されるのに対して、こちらは閲覧用の機能｢SAP Analytics Cloud SAC｣、｢BusinessObjects｣、Fioriアプリケーションである｢Fiori Multidimensional Reporting｣で利用されます。（CDS Viewの設定としてはAnnotationにて`@Analytic.query: true`とします。）

抽出可能なCDS View：DHW等に一括抽出を実施したい場合は、CDS Viewの設定を変更する必要があります。（CDS Viewの設定としてはAnnotationにて`@Analytics.dataExtraction.enabled: true`とします）

# Annotation
CDS Viewに対して様々な技術要素・定義を付加するための仕組みが「Annotation」になります。CDS Viewのデータ定義に際して、テキストベースでの定義を実施しますが、この際にルールに基づき「Annotation」を実施することにより、技術要素やデータ定義を追加することができます。

例えば｢OData-Annotations｣という種類のAnnotationを利用して`@OData.publish: true`と定義すれば、そのCDS ViewはODataとして公開が可能になります。他にも｢AccessControl Annotations｣を利用して`@AccessControl.authorizationCheck: #CHECK`と定義すれば、権限チェックが有効化されます。

View全体の定義だけでなく、個別の項目の定義も可能です。｢Semantics-Annotations｣を利用して、`@Semantics.currencyCode: `として項目を列挙すれば、その項目は通貨コードとして定義されます。

![スクリーンショット 2023-05-23 22.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/261c3573-3e2a-2100-9197-fb4d0b7b0ab2.png)

「Annotation」は、CDS Viewに様々な技術要素や定義を付加するための仕組みです。CDS Viewのデータ定義を行う際、テキストベースで定義を記述しますが、特定のルールに従って「Annotation」を追加することで、技術要素やデータ定義を拡張できます。

CDS Viewは、Fiori elementsなどのFiori機能と統合させることにより、自動でUIを生成することが可能です。詳細は@tamiさんの[こちら](https://qiita.com/tami/items/1f63f0d3c46e3a0255e8)の記事が大変わかり易いのですが、Fioriのアプリケーションを作成する際にCDS Viewをしていすることにより、CDS Viewの閲覧画面がフロントエンドの画面側のデザイン無しに生成されます。どこで「Annotation」を利用するのかというと、検索条件に追加や検索結果の表示など画面側の要件を「Annotation」によりCDS View側に実装します。例えば`@UI.selectionField:`として項目を指定することにより、その項目は画面上にて検索条件として上部のバーに表示されます。

もともとABAPは、フロントエンドの処理とバックエンド・DBの処理を区別せずに構築できるという特徴を持っています。その一方で、SAP社が近年推進するGUIではないFioriなどの技術はWEB系の技術要素を含んでいるため、普通に構築するとフロントエンドの処理とバックエンド・DBの処理を区別する必要があります。ここがABAPベースのSAP界隈の人にとっての障壁となると考えて、SAP社がフロントを意識せずに開発ができるような仕組みとして、「Annotation」のような技術要素を作成したと個人的には考えています。

# CDS Viewの利用方法

CSD Viewは、S/4HANA内部での利用と、S/4HANA外の外部システムからの利用に大別できます。

S/4HANA内部での利用

- ABAPプログラムからの利用：ABAPのプログラムでも利用可能です。ABAPレイヤーでのView作成に比べて高速に動作することが期待できます。
- Fiori系のプログラムからの利用：前述のように、CSD ViewでUI側の定義が可能です。
- S/4HANAの閲覧系の機能を用いた利用：Fioriアプリケーションである「Query Browser」にて閲覧することが可能です。（この機能を用いて閲覧できる対象は「Analytic Query」のみ）また、分析用のアプリケーションとしてリリースすることも可能です。


S/4HANA外部での利用

- CDS Viewを「OData API」として公開することで、外部システムからもhttpベースでアクセスすることが可能です。公開は「T-code: /n/iwfnd/maint_service」で実施します。

# CDS Viewに関連するアプリケーション

## View Browser

CDS Viewの内容（カテゴリ、ビュータイプ、アノテーションなど）を確認するためのアプリケーションです。利用には「SAP_BR_ANALYTICS_SPECIALIST」を割り当てる必要があります。

- [Help Portal View Browser](https://help.sap.com/docs/SAP_S4HANA_CLOUD/a630d57fc5004c6383e7a81efee7a8bb/0bde695751505c08e10000000a441470.html?locale=ja-JP)

## Query Browser

分析用のQueryを検索、実行するためのFioriのアプリケーションです。分析したいCDS View（※Analytic Queryのみ分析可能）を指定し、分析軸や表示項目などを指定し、アプリケーションとしてリリースすることが可能です。利用には「**SAP_BR_EMPLOYEE**」を割り当てる必要があります。

- [Help Portal Query Browser](https://help.sap.com/docs/SAP_S4HANA_CLOUD/a630d57fc5004c6383e7a81efee7a8bb/3a24b854ee8f8d21e10000000a44176d.html?locale=ja-JP)

## Custom CDS Views

キーユーザー拡張の1機能として提供される、CDS Viewを作るためのアプリケーションです。

- [Help Portal Custom CDS Views](https://help.sap.com/docs/SAP_S4HANA_CLOUD/0f69f8fb28ac4bf48d2b57b9637e81fa/e30de6eae4d24d70b65996ac8ff88848.html)

## Custom Analytical Queries

ーユーザー拡張の1機能として提供される、Analytic Queryを作るためのアプリケーションです。

- [Help Portal Custom Analytical Queries](https://help.sap.com/docs/ABAP_PLATFORM_NEW/ed0e11412f9841e7ac5cd9a6799368d4/33f3a229ecfe438ca6b2053c48b4e1bb.html)

# VDM (Virtual Data Model)との関係
「VDM（Virtual Data Model）」は、業務的な意味を持つデータモデルの総称です。SAP社のビジネスアプリケーション（S/4HANAなど）のデータは複数のテーブルから構成されるため、単一のテーブルデータだけでは不完全で、正確な解釈が困難です。そこでSAP社は、受注データや品目マスタデータなど、業務的に意味のあるまとまりでデータを事前に集約し、公開しています。S/4HANAでは、これらは実質的に事前準備されたCDS Viewとして実装されています。

# 最後に
CDS Viewは、S/4HANAの拡張を実施するにあたり、非常に重要な概念です。本記事などを通じて、繰り返し理解を深めることをお勧めします。