CDS Analytical — Fact, Dimension & Annotation untuk Reporting
Di episode ini kita membahas CDS Analytical: bagaimana merancang CDS sebagai sumber data analitik (fact & dimension), anotasi yang umum dipakai untuk analytical/embedded analytics, serta cara mengkonsumsi hasilnya di Fiori atau SAP Analytics Cloud (SAC).
1. Konsep: Fact vs Dimension
- Fact: berisi ukuran (measures) numerik yang bisa di-aggregate—misalnya jumlah penjualan, quantity, revenue.
- Dimension: konteks atau atribut untuk memotong/menyaring fact—mis. customer, material, time, region.
- Di model CDS Analytical kita biasanya memisahkan view menjadi fact view (menampung measures) dan beberapa dimension view untuk atribut.
2. Kenapa pisah Fact & Dimension?
- Memudahkan reuse: dimensi bisa dipakai oleh banyak faktur/kueri.
- Performance: view analytical dapat dioptimalkan untuk agregasi dan push-down ke HANA.
- Compatibility: memudahkan konsumsi oleh tools analitik (SAC, Fiori Analytical, atau reporting engine).
3. Annotation Analytic yang sering dipakai (konsep)
Beberapa annotation di CDS berguna untuk menandai bahwa view ini dimaksudkan untuk analytic/query dan untuk mengidentifikasi measures vs dimensions. Contoh umum (konsep, cek ADT SAP doc untuk variant lengkap):
Anotasi | Tujuan |
---|---|
@VDM.viewType: #ANALYTICAL | Menandai view sebagai analytical/consumption type. |
@Analytics.query: true | Mengindikasikan view dapat dipakai sebagai query/analytical dataset. |
@DefaultAggregate / agregasi | Menentukan fungsi agregasi default untuk field numeric (sum, avg). |
@Semantics.amount / @Semantics.unitOfMeasure | Menandakan field sebagai amount dan unit (penting untuk pemformatan/UOM). |
@UI.lineItem / @UI.selectionField | UI hints untuk Fiori Elements Analytical apps. |
Catatan: detail nama annotation bisa berbeda-beda versi SAP; gunakan ADT/Help untuk memastikan nama dan parameter yang tepat.
4. Contoh Arsitektur Sederhana
Contoh pattern yang sering dipakai:
- Dimension Material — CDS yang expose atribut material (material id, description, group).
- Dimension Customer — CDS yang expose customer attributes (id, name, region).
- Fact Sales — CDS yang mengambil transaksi penjualan (header/item) dan menyediakan measures seperti NetValue, Quantity.
- Consumption / Analytical View — menggabungkan fact + dimension (via association/join) dan menandainya sebagai consumption/analytical untuk reporting.
5. Contoh CDS (pattern) — Dimension + Fact + Consumption
Berikut contoh sederhana (kode contoh; sesuaikan nama tabel/field dengan sistem Anda):
-- Dimension: Material
@AbapCatalog.sqlViewName: 'ZV_DIM_MAT'
@EndUserText.label: 'Dimension Material'
define view ZCDS_DIM_MATERIAL
as select from mara
{
key matnr as MaterialID,
matkl as MaterialGroup,
mtart as MaterialType
}
-- Dimension: Customer (contoh)
@AbapCatalog.sqlViewName: 'ZV_DIM_CUST'
@EndUserText.label: 'Dimension Customer'
define view ZCDS_DIM_CUSTOMER
as select from kna1
{
key kunnr as CustomerID,
name1 as CustomerName,
regio as Region
}
-- Fact: Sales (mengumpulkan measures)
@AbapCatalog.sqlViewName: 'ZV_FACT_SALES'
@EndUserText.label: 'Fact Sales'
define view ZCDS_FACT_SALES
as select from vbap as I
inner join vbak as H on I.vbeln = H.vbeln
{
key H.vbeln as SalesDoc,
I.posnr as ItemNo,
I.matnr as MaterialID,
H.kunnr as CustomerID,
sum( I.netwr ) as TotalNetValue, -- measure (aggregate)
sum( I.kwmeng ) as TotalQuantity
}
-- Catatan: penulisan agregasi / grouping bisa membutuhkan sintaks 'group by' tergantung pada versi CDS.
Jika Anda perlu agregasi kompleks (rolling, windowing), pertimbangkan CDS Table Function/AMDP untuk logika yang lebih fleksibel.
6. Membuat Consumption / Analytical View
Setelah punya fact + dimension, biasanya dibuat consumption view yang menghubungkan keduanya dan memberikan annotation untuk analytic consumption.
@AbapCatalog.sqlViewName: 'ZV_CDS_SALES_CONS'
@EndUserText.label: 'Consumption: Sales for Analytics'
@VDM.viewType: #ANALYTICAL
@Analytics.query: true
define view ZCDS_SALES_ANALYTICS
as select from ZCDS_FACT_SALES as F
left outer join ZCDS_DIM_MATERIAL as M on F.MaterialID = M.MaterialID
left outer join ZCDS_DIM_CUSTOMER as C on F.CustomerID = C.CustomerID
{
key F.SalesDoc,
F.ItemNo,
M.MaterialID,
M.MaterialGroup,
C.CustomerID,
C.CustomerName,
F.TotalNetValue as NetValue @Semantics.amount: true,
F.TotalQuantity as Quantity
}
7. Aktivasi & Konsumsi Reporting
- Aktifkan semua view di ADT (Ctrl+F3).
- Jika pakai Fiori Analytical atau Fiori Elements, tambahkan UI annotation (
@UI.lineItem
,@UI.selectionField
) pada consumption view agar list/filters terbentuk otomatis. - Untuk SAC: expose consumption view via OData (lihat Episode 8) atau buat connection langsung ke S/4HANA sebagai source (tergantung arsitektur landscape).
- Test metadata (/…/$metadata) agar tools analitik dapat membaca measures & dimensions dengan benar.
8. Praktik Terbaik (Best Practices)
- Pisahkan fact & dimension untuk reuse dan kejelasan model.
- Tandai measures dengan semantic annotation (amount, currency, unit) agar tools men-format angka dengan benar.
- Kendalikan jumlah field yang di-expose ke consumption view — hanya field yang dibutuhkan untuk analitik.
- Uji performa pada HANA: pastikan filter pushdown dan agregasi terjadi di DB untuk skala besar.
- Gunakan table function / AMDP untuk scenario agregasi kompleks atau perhitungan windowing.
- Document setiap measure: definisi, sumber, dan periode (mis. net value in document currency).
CDS Analytical membantu membuat model data yang rapi untuk reporting: fact menyimpan measures, dimension menyimpan atribut, dan consumption view menggabungkan keduanya untuk consumption oleh Fiori atau tools analitik seperti SAC. Gunakan annotation analytic & semantic agar hasil konsumsi tepat, dan selalu cek performa & metadata sebelum dipakai produksi.
➡️ Next (Episode 10): Authorization & DCL — mengamankan CDS dengan Data Control Language, role-based access, dan contoh implementasi DCL.
No comments:
Post a Comment