Analytical Query CDS 3층 구조 — 왜 갈라놓아야 하는가
SAP S/4HANA에서 Embedded Analytics를 본격적으로 다루기 시작하면 가장 먼저 마주치는 패턴이 바로 Interface View → Cube View → Query View로 이어지는 3층 아키텍처입니다. 단순히 데이터를 SELECT 해서 화면에 뿌리는 트랜잭션 CDS와 달리, 분석용 CDS는 차원(Dimension)과 측정값(Measure)을 명확히 구분하고, 집계 규칙을 선언하며, OLAP 엔진이 이해할 수 있는 메타데이터를 추가로 노출해야 합니다.
끝까지 따라오면 다음 작업을 직접 수행할 수 있습니다.
- Interface View(I_)에
@Analytics.dataCategory를 부여해 차원/팩트 성격 선언 - Cube View에
#CUBE를 지정하고@DefaultAggregation으로 측정값 집계 정의 - Query View에
@Analytics.query: true와@AnalyticsDetails.query.axis를 부여해 KPI Modeler/RSRT 실행 가능한 쿼리 완성 - Fiori Elements ALP와 연결하기 위한 어노테이션 흐름 이해
읽기 전에 갖춰두면 좋은 배경
ABAP CDS의 기본 문법(define view, association, @Semantics)을 한 번이라도 작성해본 분을 대상으로 합니다. SQL의 GROUP BY, SUM/COUNT 집계 함수 동작을 이해하고 있어야 측정값 어노테이션의 의미를 자연스럽게 받아들일 수 있습니다.
OLAP 큐브, 슬라이스/다이스, 드릴다운 같은 BI 용어가 익숙하지 않다면 BW 4HANA의 InfoCube 개념을 가볍게 훑어보고 오는 것을 권장합니다.
버전·툴·권한 체크리스트
- ABAP Platform: S/4HANA 1909+ 또는 ABAP Platform 2021+
- 개발 도구: ADT for Eclipse 3.20 이상
- 실행/검증 툴: RSRT, KPI Modeler 앱, Query Browser(F2170)
- 권한: S_DEVELOP, S_RS_COMP/COMP1
3층 구조의 역할 분담
Analytical Query CDS의 3층 구조는 건축에 비유하면 이해가 쉽습니다. Interface View는 자재 가공소, Cube View는 골조 조립장, Query View는 인테리어 마감에 해당합니다.
Interface View — 표준화된 자재 공급
접두어 I_로 명명되는 Interface View는 원본 테이블을 감싸 비즈니스 의미를 부여합니다. @Analytics.dataCategory를 통해 차원(#DIMENSION)인지 팩트(#FACT)인지 선언합니다.
Cube View — 측정값과 차원의 결합
Cube View는 팩트를 중심에 두고 여러 차원을 association으로 연결합니다. @Analytics.dataCategory: #CUBE가 부여되며, 각 측정값 컬럼에는 @DefaultAggregation을 반드시 명시합니다.
Query View — 사용자가 실행할 분석 단위
Query View는 RSRT나 Fiori Elements ALP에서 실행 가능한 단위입니다. @Analytics.query: true가 부여되며, @AnalyticsDetails.query.axis로 행(#ROWS), 열(#COLUMNS), 자유 차원(#FREE) 배치를 지정합니다.
단계별 실전 코드
1단계 — Interface View 작성
@AbapCatalog.sqlViewName: 'ZISDORDER'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '판매 오더 헤더 차원'
@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'SalesOrder'
define view ZI_SalesOrder
as select from vbak
{
key vbeln as SalesOrder,
auart as SalesOrderType,
vkorg as SalesOrganization,
kunnr as SoldToParty,
@Semantics.amount.currencyCode: 'Currency'
netwr as NetAmount,
waerk as Currency
}
2단계 — Cube View 작성
@AbapCatalog.sqlViewName: 'ZCSDORDER'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '판매 오더 분석 큐브'
@Analytics.dataCategory: #CUBE
define view ZC_SalesOrderCube
as select from ZI_SalesOrderItem as Item
association [1..1] to ZI_SalesOrder as _SalesOrder
on $projection.SalesOrder = _SalesOrder.SalesOrder
{
@ObjectModel.foreignKey.association: '_SalesOrder'
key Item.SalesOrder,
key Item.SalesOrderItem,
Item.Material,
_SalesOrder.SalesOrganization,
@DefaultAggregation: #SUM
@Semantics.amount.currencyCode: 'Currency'
Item.ItemNetAmount as NetAmount,
Item.Currency,
@DefaultAggregation: #SUM
Item.OrderQuantity,
Item.BaseUnit,
_SalesOrder
}
3단계 — Query View 작성
@AbapCatalog.sqlViewName: 'ZQSDORDER'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '판매 오더 분석 쿼리'
@Analytics.query: true
@OData.publish: true
define view ZQ_SalesOrderQuery
as select from ZC_SalesOrderCube
{
@AnalyticsDetails.query.axis: #ROWS
SalesOrganization,
@AnalyticsDetails.query.axis: #FREE
Material,
@AnalyticsDetails.query.axis: #COLUMNS
NetAmount,
Currency,
@AnalyticsDetails.query.axis: #COLUMNS
OrderQuantity,
BaseUnit
}
흔한 실수와 트러블슈팅
FAQ 1. Query Browser에 쿼리가 나타나지 않습니다
@Analytics.query: true 누락이 대부분입니다. Cube View 자체는 노출되지 않으며 Query View에서 해당 어노테이션이 있어야 합니다.
FAQ 2. 측정값 합계가 부풀려집니다
@DefaultAggregation이 없으면 OLAP 엔진이 집계를 수행하지 않습니다. 측정값은 가장 세밀한 단위에서 큐브로 올려보내고 집계는 큐브 계층에서만 수행하는 것이 권장됩니다.
FAQ 3. axis 어노테이션 없으면 어떻게 됩니까
@AnalyticsDetails.query.axis가 없는 필드는 #FREE로 취급됩니다. KPI가 즉시 보여야 한다면 측정값에 #COLUMNS, 핵심 차원에 #ROWS를 부여하세요.
FAQ 4. dataCategory #FACT vs #CUBE 차이
#FACT는 측정값만 담은 원천 팩트 뷰에, #CUBE는 측정값과 차원 외래키를 모두 갖춘 통합 큐브에 부여합니다. Query View가 참조하는 분석 모델은 #CUBE입니다.
다음 단계와 관련 주제
- MEXT 어노테이션: Calculated Measure와 Restricted KeyFigure 선언
- Fiori Elements ALP 연결: @UI.chart, @UI.selectionField로 차트와 테이블 자동 생성
- Embedded Analytics Drill-Down: KPI Modeler로 타일 등록
- RAP과의 결합: ABAP Cloud 환경에서 Analytical Query 확장
참고 자료
- SAP Help — CDS Annotations for Analytics
- SAP Help — Analytical Queries in S/4HANA
- SAP Community — ABAP CDS Views
- SAP Clean ABAP Styleguide
핵심 한 줄
Interface는 의미 부여, Cube는 결합과 집계, Query는 표현 방식 — 이 세 층의 책임을 섞지 않는 것이 ABAP Analytical Query 아키텍처의 핵심입니다.
댓글 0
아직 댓글이 없습니다.