ABAP

Interface vs Cube vs Query — Analytical Query CDS 3층 구조 #shorts #SAP #ABAP

▶ YouTube에서 보기

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 확장

참고 자료

핵심 한 줄

Interface는 의미 부여, Cube는 결합과 집계, Query는 표현 방식 — 이 세 층의 책임을 섞지 않는 것이 ABAP Analytical Query 아키텍처의 핵심입니다.

댓글 0

아직 댓글이 없습니다.