> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mmmytics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Campaigns (F4)

> Kampanya bazlı veri organizasyonu — verilerinizi kampanyalara etiketleyin, Engine filter ile kampanya MMM'i çalıştırın.

# Campaigns — Kampanya Organizasyonu

F4 feature — verilerinizi **kampanyalara etiketleyebilirsiniz**, kampanya bazlı analiz yapabilirsiniz.

## Use Case

* "Q1 lansman kampanyamızın ROI'si ne?"
* "Black Friday vs. Yılbaşı kampanyaları karşılaştırma"
* "Yeni ürün launch'umuz core business'a kaniballeşme yapıyor mu?"

## Yapı

```
Brand
└── Kampanyalar (CRUD)
    ├── "Q1 2025 Lansman" (ID: abc-123)
    │   └── İlişkili veriler: 13 hafta CSV upload
    ├── "Yılbaşı 2024" (ID: def-456)
    │   └── İlişkili veriler: 4 hafta CSV upload
    └── "Sürekli Brand" (ID: ghi-789)
        └── İlişkili veriler: 52 hafta CSV upload (untagged baseline)
```

## L1 Data Hub — Kampanyalar Sekmesi

`/dashboard/data` → **"Kampanyalar"** sekmesi (4. tab).

### CRUD Operasyonları

<CardGroup cols={2}>
  <Card title="Create" icon="plus">
    "+ Yeni Kampanya" butonu:

    * İsim: "Q1 2025 EV Lansmanı"
    * Period: 2025-01-15 → 2025-04-15
    * Açıklama (opsiyonel)
    * Channels (opsiyonel — varsayılan tüm kanallar)
  </Card>

  <Card title="Read">
    BentoCard list — her kampanya bir card:

    * İsim + period + status badge (active/archived)
    * İlişkili dataset sayısı
    * Hızlı eylemler (edit/archive/delete)
  </Card>

  <Card title="Update">
    Edit dialog — isim, period, açıklama değiştirilebilir.
    İlişkili veri bağlantısı korunur.
  </Card>

  <Card title="Archive / Delete">
    Archive: kampanya gizlenir ama veriler korunur.
    Delete: D1-fu5 pattern (typed confirmation + 8-char code).
  </Card>
</CardGroup>

## Upload Etiketleme

Yeni CSV upload sırasında dropdown:

```
Step 2 — Kampanya (Opsiyonel)
[ Kampanya seç... ▼ ]
  - Q1 2025 EV Lansmanı
  - Yılbaşı 2024
  - Sürekli Brand
  - + Yeni Kampanya Oluştur
```

URL parametresi ile de etiketlenebilir:

```
https://mmmytics.com/dashboard/data?campaign_id=<uuid>
```

## L3 Engine — Campaign Filter

L3 Engine'da blueprint çalıştırılırken **kampanya filter**:

```
"Run Model" panel:
├── Blueprint: v3 — added Affiliate
├── Campaign filter: [Tümü ▼]
│                       ├─ Tümü (52 hafta)
│                       ├─ Q1 2025 EV Lansmanı (13 hafta)
│                       ├─ Yılbaşı 2024 (4 hafta)
│                       └─ Sürekli Brand (52 hafta)
└── [Run Model]
```

<Tip>
  Kampanya filter sadece **2+ kampanya** varsa görünür. Tek kampanya/etiketsiz veride filter UI gizlidir.
</Tip>

### Hangi Filter Ne Yapar?

* **Tümü** → tüm veri (default, normal MMM run)
* **Tek kampanya** → sadece o kampanyaya ait veriler model'e dahil
* **Multi-select** (gelecekte) → 2+ kampanya birleştirme — Faz E5+

## Backend Implementation

```
ETL pipeline:
  CSV upload → ?campaign_id=<uuid> → weekly_data_points.campaign_id UPSERT
  
  RLS app-level: assert_brand_access(brand_id) — campaigns brand-scoped
  
  Engine query:
    SELECT * FROM weekly_data_points
    WHERE brand_id = $1
      AND ($2::uuid IS NULL OR campaign_id = $2)
```

> **Out of scope:** Engine **content-level** kampanya filter (örn: backend MMM run sırasında dataset filter) F4 close'da implement edilmedi. Sonraki sprint adayı.

## Kampanya Sürecinin Teknik Detayı

| Aşama            | Yapılan                                               |
| ---------------- | ----------------------------------------------------- |
| **Pre-launch**   | Kampanya kayıt + period + planlanan channels          |
| **Launch**       | Veri upload başlar (haftalık), `campaign_id` etiketli |
| **Mid-campaign** | DQS check ara dönemde + L3 mini-run mümkün            |
| **Post-launch**  | Tüm veri toplanmış, full L3 run + L4 ROI per kampanya |
| **Comparison**   | L5 Compare view ile kampanya 1 vs. kampanya 2         |

## Kampanya Reporting

L7 Reports'ta kampanya özet:

* Kampanya KPI delta (vs. baseline period)
* Kampanya ROI (kampanya spend / kampanya gelir)
* Cross-channel decomposition
* Kaniballeşme analizi (kampanya organic baseline'ı arttırdı mı?)

## Sınırlamalar

<Note>
  **Mevcut sınırlar:**

  * Bir CSV upload tek kampanyaya etiketlenir (multi-tag yok)
  * Kampanyalar archive'lendikten sonra restore butonu yok (manuel: data var, sadece UI'da görünmez)
  * Compare view ileride eklenecek (Faz E5+)
</Note>

## Sonraki Adım

Kampanyalarınızı oluşturduysunuz, **L3 Engine'da kampanya bazlı run** yapın:

[L3 Engine Campaign Filter →](/docs/mintlify/6-istasyon/l3-engine)
