SaaS ürünlerinin %71’i artık embedded analytics (uygulama içine gömülü analitik) sunuyor (Gartner 2026). Müşterinin “kendi verilerini görmek için harici bir BI aracına gitmek” zamanı bitti; dashboard’lar, raporlar, custom drill-down’lar artık ürünün doğal bir parçası. Doğru embedded analytics stratejisi (Cube.js/Cube Cloud + ClickHouse/DuckDB + ücretli görselleştirme) %32 daha yüksek upsell oranı ve %26 daha düşük churn sağlıyor (OpenView SaaS Benchmark, 2025). Türkiye’deki SaaS ürünlerin %44’ü 2026 itibarıyla en az 5 dashboard sunuyor; analytic uçları olmayan ürünler enterprise satışta belirgin dezavantajlı.

Bu rehberde modern embedded analytics mimarisini, açık kaynak ve commercial seçenekleri, performans benchmark’larını ve maliyet kalemlerini somut sayılarla aktaracağız.

Embedded Analytics Bileşenleri

  • OLAP veritabanı: ClickHouse, DuckDB, BigQuery — analytic sorgu motoru.
  • Semantic layer: Cube.js, dbt Semantic Layer, Hex.
  • API/Query gateway: Cube.js REST/GraphQL/SQL.
  • Görselleştirme: Recharts, ECharts, Plotly, Tremor (UI components).
  • Cache + materialized view: Pre-aggregation, Redis cache.
  • Multi-tenant security: Row-level security, tenant isolation.

Semantic Layer: Cube.js

Cube.js, modern embedded analytics ekosisteminin “kalbi”. Görselleştirme katmanı ile veritabanı arasında bir semantic layer kurar:

  • Veri modelleme: SQL’i kod (JS/YAML) olarak yazıyorsun (cube’lar).
  • Measures + Dimensions: “Sipariş sayısı”, “Toplam gelir” gibi metric’leri tanımlıyorsun.
  • Joins: Tablolar arası ilişkiler.
  • Pre-aggregation: Sık sorgulanan ölçütler önceden hesaplanır.
  • Tenant isolation: Her tenant’ın görebileceği veri otomatik filtrelenir.
  • API: REST, GraphQL, SQL — frontend bunu kullanır.

Örnek Cube Tanımı

Bir sipariş cube’unda tipik tanımlar (pseudo):

  • Measure: count, totalAmount, avgAmount.
  • Dimension: status, customerId, createdAt (zaman).
  • Time dimensions: granularity by day, week, month.
  • SQL Filter: tenant_id = ${SECURITY_CONTEXT.tenantId}.
  • Pre-aggregation: {measures: ["count","totalAmount"], dimensions:["status"], granularity:"day"}.
SaaS embedded analytics dashboard'u, gelir trend grafigi ve KPI kartlari
SaaS embedded analytics dashboard'u, gelir trend grafigi ve KPI kartlari

Veritabanı Seçimi

VeritabanıBest forAylık Maliyet (100M satır)
ClickHouse (self-hosted)Yüksek hacim OLAP, billions of rows10.000-30.000 TL
ClickHouse CloudManaged, otomatik scaling30.000-90.000 TL
DuckDB (embedded)< 100GB data, in-app analytics0 (lokal)
BigQueryPetabayt ölçek, serverlessSorgu bazlı (5 USD/TB scan)
SnowflakeEnterprise, multi-cluster2-10 credits/saat (~50-300 USD)
TimescaleDBTime-series + relational15.000-45.000 TL

Polyglot persistence stratejisi açısından bu seçim çoklu veritabanı stratejisi rehberimizde derinleşiyor; CDC ile PostgreSQL → ClickHouse akıtma için PostgreSQL CDC + Debezium içeriğimiz kaynak.

Performans Hedefleri

  • Dashboard ilk yükleme: ≤ 1,5 saniye
  • Filter/drill-down sorgu: ≤ 500 ms (p95)
  • 1M satır üzerinde aggregation: ≤ 200 ms (pre-aggregation ile)
  • Concurrent kullanıcı: 500-5.000
  • Cache hit rate: ≥ %75
Embedded analytics mimari diyagrami, Cube.js semantic layer ClickHouse
Embedded analytics mimari diyagrami, Cube.js semantic layer ClickHouse

Pre-Aggregation: Performansın Sırrı

Her sorguda 100M satır taramak yerine, sık kullanılan agregasyonlar önceden hesaplanır:

  • Günlük revenue trend (1.000 satır) — 100M satır yerine.
  • Müşteri segment’i bazlı conversion oranı.
  • Ülke + product category bazlı top sellers.
  • Otomatik refresh: 5 dk, 1 saat, gece batch.
  • Incremental refresh: sadece yeni veri eklenir.

Pre-aggregation ile sorgu süresi 30-200x hızlanır; ölçeklendirilmiş bir SaaS analitiğinin temel garantisi.

Multi-Tenancy: Veri İzolasyonu

Müşteri A, müşteri B’nin verisini görmemeli. Cube.js’in tenant security context yaklaşımı:

  • JWT token’ından tenant_id çıkarılır.
  • Her sorguya otomatik WHERE tenant_id = X eklenir.
  • Pre-aggregation tenant başına ayrı.
  • API katmanında double-check (frontend manipulate edemez).
  • Audit log: her dashboard isteği kaydedilir (KVKK gerekliliği için kritik).
Veri muhendisleri SaaS analytics dashboard tasarliyor
Veri muhendisleri SaaS analytics dashboard tasarliyor

Görselleştirme Kütüphaneleri

KütüphaneFrameworkBundleBest for
RechartsReact97 KBBasit, hızlı başlangıç
EChartsFramework-agnostic200-400 KBKarmaşık, çok grafik tipi
Plotly.jsFramework-agnostic3 MBBilimsel, 3D, harita
TremorReact (Tailwind)180 KBDashboard component sistemi
Apache Superset (embed)iframeTam BI çözüm gömme
Metabase (embed)iframeHızlı kurulum, no-code

Üretim Mimarisi: Tipik Stack

  • Frontend: React + Tremor + Recharts.
  • Backend: Cube.js (Node.js) — self-hosted veya Cube Cloud.
  • OLAP: ClickHouse Cloud (managed) veya self-hosted.
  • Source data: PostgreSQL → CDC → ClickHouse (Debezium).
  • Cache: Redis (Cube.js pre-aggregation cache).
  • Auth: JWT (tenant context).

Frontend state management mimarisi için state management rehberimize, API katmanı için gRPC vs REST vs GraphQL içeriğimize bakabilirsiniz.

Türkiye Özelinde Pratik Notlar

  • KVKK + dashboard: Müşteriye gösterilen agregasyonlarda kişisel veri olmamalı; aggregation sonrası anonymize edilmiş veri ekrana çıkmalı.
  • Veri lokasyonu: ClickHouse Cloud Frankfurt EU üzerinden hızlı; Türkiye lokasyonu gerekirse self-hosted İstanbul DC + İstanbul AWS EC2 alternatif.
  • Embedded vs harici Metabase: Türkiye’deki büyük müşteriler kendi BI takımları varsa harici embed (iframe + SSO); küçük müşteriler embedded native UX bekliyor.
  • Maliyet hesabı: 0-5K MAU’da ClickHouse self-hosted en ekonomik (15-30K TL/ay); üzerinde Cube Cloud + ClickHouse Cloud operasyonel yükü düşürür.
  • Eğitim ürünleri: EdTech ve LMS ürünlerinde öğrenci/öğretmen progress dashboard’ları için Cube.js + Tremor 2-3 haftada production-ready.

Maliyet ve Süre

KapsamSüreMaliyet (TL)
MVP: 3-5 dashboard, basit cube’lar2-3 ay250.000-450.000
Orta: 10-20 dashboard, drill-down, filter4-6 ay600.000-1.100.000
Enterprise: 30+ dashboard, custom widget, multi-tenant8-12 ay1.400.000-2.700.000
Aylık operasyon20.000-80.000

Anti-Pattern ve Yaygın Hatalar

  • Production OLTP’den direct sorgu: Dashboard işlemler PostgreSQL’i kilitler. Mutlaka CDC ile ayrı OLAP’a aktarın.
  • Pre-aggregation yok: Her isteği 100M satır taramak — saniyeler süren dashboard’lar.
  • Tenant kontrolü frontend’de: Frontend SQL veya filter manipüle edilebilir; sunucu tarafı zorunlu.
  • Çok dashboard, az kullanılan: 30 dashboard’tan 3’ü kullanılıyor — gerisini geri çek, bakım yükü düşür.
  • Cache invalidation eksik: Müşteri yeni veri ekledi, dashboard 1 saat eski veri gösteriyor.
  • Sonsuz drill-down: Kullanıcı 7 seviye drill yapabiliyor; cardinality patlaması.

Sık Sorulan Sorular

Embedded mı yoksa harici BI (Metabase, Looker)?

Müşteri data analist değilse embedded — basit, native UX. İleri-düzey analiz isteyen kurumsal müşteriler için Metabase/Looker entegrasyonu (SSO ile gömülü iframe).

Cube.js vs dbt Semantic Layer?

Cube.js: SaaS uygulamasına entegre analytic için. dbt Semantic Layer: data warehouse + BI senaryoları için. SaaS ürün geliştiriyorsanız Cube.js seç.

ClickHouse’a veri nasıl taşınır?

CDC (Debezium → Kafka → ClickHouse Connector) veya batch ETL (dbt + Airflow). Yüksek hacim + düşük gecikme için CDC tercih edilir.

DuckDB’yi browser’da çalıştırmak mümkün mü?

Evet, DuckDB-WASM tarayıcıda çalışır. 100MB-1GB veri için pratik. Sunucu kullanmadan tamamen client-side analytic. Hex, Motherduck gibi servisler bunu kullanıyor.

Real-time dashboard mu, hourly refresh mi?

Trade-off: real-time (saniyelik) pre-aggregation devre dışı + sorgu maliyeti yüksek; hourly refresh maliyet/performans dengesi en iyi. Operational dashboard real-time, executive overview saatlik makul.

Ömer Önal’dan pratik not: Türkiye’deki SaaS ekiplerine embedded analytics konusunda danışmanlık verdiğimde gördüğüm en yaygın hata, “müşterilerin istediği her grafiği eklemek” tuzağı. 30 dashboard’tan 25’i kullanılmaz; her biri ekibe bakım yükü olarak kalır. Doğru yaklaşım: 3-5 yüksek değerli dashboard ile başla, kullanım metriklerini sıkı takip et, hangi widget açılıyor + hangisi açılmıyor ölç. 6 ay sonra “ne işe yaradı” datasıyla dashboard portföyünü budayın. İkinci pratik: ilk gün Cube.js semantic layer’ı kurmaya yatırım yapın — SQL’i komponent komponent yazmak 6 ay sonra teknik borç. Üçüncüsü: pre-aggregation strateji günlük operasyonun ayrılmaz parçası — ekibin DBA’i veya analytics engineer’ı bu pre-agg’leri build/refresh edebilmeli, frontend ekibi değil. Sizin SaaS ürününüzde şu an embedded dashboard var mı, varsa kullanım oranı ne, yoksa roadmap’in neresinde?

Sonuç

Embedded analytics, modern SaaS’ın rekabet farklılığı. Doğru tasarım (Cube.js + ClickHouse + Tremor) ile dashboard yükleme süresi ≤ 1,5 saniye, upsell oranı %32 artar, churn %26 azalır. Açık kaynak stack ile başlamak, ürün-pazar uyumunu kanıtladıkça managed çözümlere geçmek pragmatik yaklaşım. Tamamlayıcı içerikler: polyglot persistence, database sharding, event-driven mimari ve frontend state management. İletişim formundan projeniz için analytic mimari değerlendirme talep edebilirsiniz.

Dış otorite kaynaklar: Cube.js · ClickHouse · DuckDB · Tremor

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Mayıs 17, 2026

    Türkiye’de SaaS ürünlerine embedded analytics ekleyen ekiplere danışmanlık verdiğimde gördüğüm en yaygın yanlış, doğrudan ürün veritabanından (OLTP) dashboard sorgusu çalıştırmak. 100K kayıt seviyesinde sorun yok ama 5-10M’e ulaştığında PostgreSQL primary’sini kilitleyen analytic query’ler customer-facing endpoint’lerin timeout’una sebep oluyor. Doğru disiplin: gün 1’den OLTP → CDC → OLAP ayrımını planlamak. ClickHouse veya DuckDB Cloud devreye girince ekip biraz fazla iş gibi görse de, 12 ay sonra customer revenue dashboard’u 800 ms’de açılıyor ve müşteri churn’ü düşüyor. İkinci pratik: Cube.js semantic layer’ı geliştirmenin uzun vadeli avantajı, her ekipten bir analist veya backend dev SQL yazabiliyor olması — UI ekibinin “şu metric şöyle hesaplanmalıymış” çevirisinden çıkıyorsunuz. Üçüncüsü: pre-aggregation strategy hayati. Cube.js veya kendi materialized view’lerinizle 5 dk-1 saat refresh aralığı yeterli; “real-time olsun” diye pre-agg’leri devre dışı bırakırsanız 6 ay sonra OLAP cluster maliyetiniz 5x artar. Sizin ürününüzde dashboard analytics şu an OLTP’den mi geliyor, yoksa ayrı bir OLAP store devrede mi?

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir