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

# Referenz für AftersellQL (AQL)

> Die Referenz zur Abfragesprache AftersellQL: verfügbare Kennzahlen und Dimensionen, AQL-Klauselsyntax mit Beispielen und Zeitzonenregeln für den Explorer.

Jede Abfrage, die du im [Explorer](/de/aftersell/reports_explorer) erstellst, ist eine **AftersellQL (AQL)**-Anweisung. Meistens erstellst du Abfragen visuell und schreibst AQL nie von Hand; diese Seite ist die Referenz für die Kennzahlen und Dimensionen, die du auswählen kannst, die AQL-Textform und die Zeitzonenregeln.

<div id="available-metrics">
  ## Verfügbare Kennzahlen
</div>

Dies sind die Kennzahlen, die du auswählen kannst, gruppiert wie in der Kennzahlenauswahl.

<div id="revenue-profit">
  ### Umsatz & Gewinn
</div>

| Kennzahl | Beschreibung |
| - | - |
| **Revenue** | Upsell-Umsatz in der Landeswährung deines Shops. |
| **Revenue (USD)** | Upsell-Umsatz, normalisiert auf USD für währungsübergreifende Vergleiche. |
| **Revenue Per Visit** | Upsell-Umsatz pro Impressions-Session. Kann nicht nach Produkt, Platzierung, Funnel oder Gerät aufgeschlüsselt werden. |
| **Avg. Conversion Value** | Umsatz pro angenommenem Angebot. Wird auch als Average Upsell Value bezeichnet. |
| **Upsell Revenue Per Order** | Upsell-Umsatz (USD) geteilt durch die Gesamtzahl der Bestellungen. Nur auf Shop-Ebene. |
| **Product Profit** | Umsatz abzüglich Warenkosten (COGS) für Upsell-Produkte. Basiert auf vom Händler konfigurierten COGS, betrachte den Wert daher als Schätzung: Bei Produkten ohne erfasste Kosten wird der Umsatz als Gewinn ausgewiesen, und die Kostenabdeckung variiert je nach Shop. Nur auf Produktebene; kann nicht nach Funnel, Platzierung oder Gerät aufgeschlüsselt werden. |

<div id="conversions">
  ### Conversions
</div>

| Kennzahl | Beschreibung |
| - | - |
| **Conversions** | Die Anzahl der Ereignisse mit angenommenem Angebot. Ein angenommenes Angebot ist eine Conversion, eine Session, in der zwei Angebote angenommen werden, zählt also doppelt. |
| **Accept Rate** | Session-basiert: der Anteil der Sessions, die ein Angebot gesehen und mindestens eines angenommen haben. Wird unabhängig von Conversions aus einem anderen Rollup berechnet und ist daher nicht Conversions ÷ Impressions. |
| **Units Sold** | Gesamtzahl der über Upsell-Angebote verkauften Einheiten. |
| **Decline Rate** | Prozentsatz der Post-Purchase-Angebote, die ausdrücklich abgelehnt wurden. Nur Post-Purchase. |

<div id="engagement">
  ### Engagement
</div>

| Kennzahl | Beschreibung |
| - | - |
| **Impressions** | Eindeutige Sessions, die ein Angebot gesehen haben. |
| **Show Rate** | Prozentsatz der Entscheidungen, die zu einer Impression geführt haben. |

<div id="store-performance">
  ### Shop-Performance
</div>

| Kennzahl | Beschreibung |
| - | - |
| **Total Store Revenue** | Gesamter Umsatz aus in Shopify bezahlten Bestellungen. Nur auf Shop-Ebene; kann nicht nach Oberfläche, Funnel, Platzierung oder Gerät aufgeschlüsselt werden. |
| **Orders** | Gesamtzahl der in Shopify bezahlten Bestellungen. Nur auf Shop-Ebene. |
| **Average Total Order Value** | Shop-Umsatz geteilt durch Bestellungen. Durchschnittlicher Bestellwert auf Shop-Ebene. |

<div id="rokt-network">
  ### Rokt-Netzwerk
</div>

| Kennzahl | Beschreibung |
| - | - |
| **Rokt Revenue** | Deinem Shop zugeordneter Umsatz aus dem Rokt-Netzwerk. |
| **Rokt Transactions** | Anzahl der Rokt-Netzwerk-Transaktionen für deinen Shop. |
| **Rokt Revenue / Transaction** | Rokt-Umsatz geteilt durch Transaktionen pro Zeitintervall. |
| **Rokt Impressions** | Gesamtzahl der Rokt-Netzwerk-Impressionen über die Platzierungen deines Shops. Nicht zu verwechseln mit Upsell-**Impressions**. |
| **Rokt Referrals** | Rokt-Netzwerk-Referrals, also positive Interaktionen, die den Käufer zu einem Rokt-Partner weitergeleitet haben. |

<div id="dimensions">
  ## Dimensionen
</div>

Dimensionen schlüsseln eine Kennzahl nach einem Attribut auf. Nicht alle Dimensionen sind mit jeder Kennzahl kompatibel; der Explorer verhindert inkompatible Kombinationen automatisch (zum Beispiel können **Decline rate** und **Show rate** nicht nach **Currency** aufgeschlüsselt werden).

<div id="available-dimensions">
  ### Verfügbare Dimensionen
</div>

| Dimension | Beschreibung |
| - | - |
| **Date** | Gruppiert Ergebnisse nach Tag, Woche oder Monat. |
| **Surface** | Die Upsell-Oberfläche: PPU (Post-Purchase), Checkout, Thank You Page oder Cart. |
| **Funnel** | Der konkrete Funnel, zu dem das Angebot gehört. |
| **Product** | Das Upsell-Produkt. |
| **Placement** | Die Platzierung innerhalb eines Funnels. |
| **Device** | Der Gerätetyp: Mobile, Desktop oder Unknown. Es gibt keinen separaten Wert für Tablets. |
| **Currency** | Der ISO-Währungscode (zum Beispiel USD, EUR, GBP). Nützlich für Shops mit mehreren Währungen. |

<div id="unavailable-dimensions">
  ### Nicht verfügbare Dimensionen
</div>

Die folgenden Dimensionen sind noch in Arbeit. Sie erscheinen in der Auswahl, werden aber bis zu ihrer Implementierung für jede Kennzahl als 'Not compatible' angezeigt.

| Dimension | Beschreibung |
| - | - |
| **Flow type** | Der Typ des Upsell-Flows. |
| **Experiment** | Der A/B-Test oder die Experimentvariante. |
| **Outcome** | Das Ergebnis der Entscheidung (zum Beispiel berechtigt, nicht vorrätig). |
| **Reason code** | Der Grund für ein Entscheidungsergebnis. |
| **Scope** | Der Entscheidungsbereich (Flow, Experience, Placement oder ItemSlot). |
| **Response type** | Die Reaktion auf das Angebot (Accepted, Declined oder Timeout). |

<div id="aql-statement-syntax">
  ## Syntax von AQL-Anweisungen
</div>

Eine AQL-Anweisung ist eine einzelne Frage, die aus Klauseln besteht. Nur `SELECT` und ein Zeitraum (`SINCE`) sind erforderlich; alles andere ist optional. Wenn du optionale Klauseln verwendest, müssen sie in dieser Reihenfolge stehen:

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
SELECT    <metrics>                    -- what to measure (required)
WHERE     <filters>                    -- narrow the data
GROUP BY  <dimensions>                 -- break the numbers down
SINCE     <time range>                 -- the period to cover (required)
GRAIN     <time grain>                 -- bucket size for time series
COMPARE   <comparison>                 -- compare against another period
CHART     <visualization>              -- how to display the result
TIMEZONE  "<timezone>"                 -- timezone for date buckets
ORDER BY  <field> <direction>          -- sort the results
LIMIT     <number>                     -- cap the number of rows
```

Ein minimales Beispiel, täglicher Upsell-Umsatz und Accept Rate der letzten 30 Tage:

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
SELECT revenue, accept_rate
GROUP BY date
SINCE last_30d
GRAIN day
```

<Note>
  Schlüsselwörter unterscheiden nicht zwischen Groß- und Kleinschreibung (`SELECT` und `select` funktionieren beide), und Anweisungen enden nicht mit einem Semikolon. String-Werte werden in doppelte Anführungszeichen gesetzt; Zahlen und Listen nicht.
</Note>

<div id="select-and-group-by">
  ### SELECT und GROUP BY
</div>

* **`SELECT`** listet die zu messenden Kennzahlen durch Kommas getrennt auf, zum Beispiel `SELECT revenue, impressions, accept_rate`.
* **`GROUP BY`** schlüsselt diese Kennzahlen nach einer oder mehreren Dimensionen auf, etwa `date`, `device`, `surface` oder `funnel`. Ohne `GROUP BY` erhältst du eine einzige Summe für den gesamten Zeitraum.

<div id="filtering-with-where">
  ### Filtern mit WHERE
</div>

`WHERE` grenzt die Daten ein, bevor sie gemessen werden. Kombiniere Bedingungen mit `AND`.

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
SELECT revenue
WHERE device = "mobile"
GROUP BY date
SINCE last_month
GRAIN day
```

<Warning>
  `impressions`, `accept_rate` und `rpv` können **nicht** nach Gerät, Funnel, Platzierung oder Produkt gefiltert oder gruppiert werden; ihr Quell-Rollup hat keine solche Spalte. Wenn du `WHERE device = "mobile"` zu einer Abfrage hinzufügst, die eine dieser Kennzahlen auswählt, wird sie mit `metric "impressions" cannot be filtered by "device"` abgelehnt.
</Warning>

Unterstützte Vergleiche sind `=`, `!=`, `IN`, `NOT IN`, `>`, `<`, `>=` und `<=`. Verwende eine Liste mit `IN`, um mehrere Werte abzugleichen:

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
WHERE surface IN ["PPU", "Checkout"]
```

`experiment` ist **kein** filterbares Feld; es hat keine Rollup-Quelle, daher wird `WHERE experiment IN [...]` mit `filters on "experiment" are not supported.` abgelehnt.

Der **Funnel**-Filter unterstützt Mehrfachauswahl: **is one of** (`IN`) schließt nur die ausgewählten Funnels ein, **is not one of** (`NOT IN`) schließt sie aus. Wenn du nach **Funnel** gruppierst und einen **is one of**-Filter anwendest, zeigt das Diagramm eine Linie pro ausgewähltem Funnel, ohne Zusammenfassung unter "Other".

<div id="time-ranges-and-comparisons">
  ### Zeiträume und Vergleiche
</div>

Jede Abfrage benötigt einen Zeitraum, der mit `SINCE` festgelegt wird:

| Form | Beispiel | Bedeutung |
| - | - | - |
| Voreinstellung | `SINCE last_30d` | Ein rollierendes Fenster, das **gestern** (UTC) endet. Der laufende aktuelle Tag wird bewusst ausgeschlossen, sodass `last_1d` nur gestern bedeutet und `this_month` vom 1. bis gestern reicht. |
| Benutzerdefiniertes Fenster | `SINCE 2026-07-02 UNTIL 2026-07-05` | Ein fester Zeitraum mit ISO-Datumsangaben (`YYYY-MM-DD`). |

Verfügbare Voreinstellungen: `last_1d`, `last_7d`, `last_30d`, `last_90d`, `this_month`, `last_month` und `this_year`.

* **`GRAIN`** legt die Intervallgröße für Zeitreihen fest: `day`, `week` oder `month`. (`hour` wird geparst, aber kein Rollup liefert stündliche Daten, daher wird eine solche Abfrage mit `group_by / time_grain combination is not supported.` abgelehnt.)
* **`COMPARE`** legt einen zweiten Zeitraum darüber. Verwende `previous_period`, das gleich lange Fenster unmittelbar davor. `previous_year` ist in der Compare-Auswahl ausgeblendet, da das Warehouse keine Daten vor Februar 2026 enthält; es kann in AQL nur noch eingegeben werden, damit zuvor gespeicherte Abfragen weiterhin geparst werden.

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
-- A four-day sale vs the four days immediately before it
SELECT revenue, impressions, accept_rate
GROUP BY date
SINCE 2026-07-02 UNTIL 2026-07-05
GRAIN day
COMPARE previous_period
```

<Note>
  Reporting-Daten beginnen im **Februar 2026**, daher liefert ein früheres Fenster für beide Zeiträume leere Ergebnisse.
</Note>

<div id="choosing-a-chart">
  ### Ein Diagramm auswählen
</div>

* **`CHART`** legt fest, wie das Ergebnis angezeigt wird: `scorecard`, `line_chart`, `bar_chart`, `area_chart`, `funnel_chart` oder `table`.
* **`TIMEZONE`** legt die Zeitzone fest, die für die Datumsintervalle verwendet wird, als IANA-Name in Anführungszeichen, zum Beispiel `TIMEZONE "America/New_York"`. Standard ist UTC (siehe [Zeitzonen](#timezones)).

Der Typ `funnel_chart` hat spezielle Anforderungen:

* **Platzierungsmodus.** Gruppiere nach `placement` und wähle eine Kennzahl aus. Die Stufen werden nach der kanonischen Platzierungsreihenfolge sortiert (Standard-Upsell, dann Downsell, dann zusätzliche Upsells). Nur die erste Kennzahl wird dargestellt; weitere Kennzahlen werden in einer Fußnote vermerkt.
* **Kennzahlenmodus.** Wähle zwei oder mehr Kennzahlen ohne `GROUP BY`. Jede Kennzahl wird in der Reihenfolge der Abfrage zu einer Funnel-Stufe (zum Beispiel zeigt `SELECT impressions, conversions` den Rückgang von Impressionen zu Conversions). Alle Kennzahlen müssen dieselbe Einheit haben.

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
-- Placement funnel: conversion drop-off across placements
SELECT conversions
GROUP BY placement
SINCE last_30d
CHART funnel_chart
```

<Warning>
  Der Platzierungsmodus benötigt eine Kennzahl, die nach Platzierung aufgeschlüsselt werden kann. `impressions`, `accept_rate` und `rpv` können das nicht; das Funnel-Diagramm zeigt für diese "These metrics can't be grouped by placement" an.
</Warning>

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
-- Metric funnel: impressions to conversions drop-off
SELECT impressions, conversions
SINCE last_30d
CHART funnel_chart
```

<div id="sorting-and-limiting">
  ### Sortieren und Begrenzen
</div>

* **`ORDER BY`** sortiert Ergebnisse nach einer Kennzahl oder Dimension, mit `ASC` oder `DESC`.
* **`LIMIT`** begrenzt die Anzahl der zurückgegebenen Zeilen, nützlich für "Top N"-Fragen.

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
-- Top 20 products by upsell revenue this month
SELECT revenue, conversions, avg_conversion_value
GROUP BY product
SINCE this_month
ORDER BY revenue DESC
LIMIT 20
```

<div id="more-examples">
  ### Weitere Beispiele
</div>

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
-- Daily performance vs the previous period
SELECT revenue, impressions, conversions, accept_rate
GROUP BY date
SINCE last_30d
GRAIN day
COMPARE previous_period
```

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
-- Mobile vs desktop revenue over the last 90 days
SELECT revenue
GROUP BY device
SINCE last_90d
ORDER BY revenue DESC
```

<Note>
  `impressions`, `accept_rate` und `rpv` können nicht nach Gerät aufgeschlüsselt werden; ihr Rollup ist Shop × Oberfläche × Tag, ohne Gerätespalte. Verwende `revenue` (oder eine andere aus Conversions stammende Kennzahl) für Gerätevergleiche.
</Note>

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
-- Which surface is driving the most revenue?
SELECT revenue, impressions, accept_rate
GROUP BY surface
SINCE last_30d
ORDER BY revenue DESC
```

<div id="timezones">
  ## Zeitzonen
</div>

Standardmäßig laufen Abfragen in UTC. Du kannst die Zeitzone überschreiben, damit nach Datum gruppierte Ergebnisse die Ortszeit widerspiegeln (siehe [Eine Zeitzone festlegen](/de/aftersell/reports_explorer#setting-a-timezone) für die Schritte in der Symbolleiste).

<Note>
  Abfragen, die **Impressions**, **Accept Rate** oder **Revenue Per Visit** enthalten, gruppieren Datumsangaben immer in UTC, unabhängig von der gewählten Zeitzone, da diese aus einem täglichen Rollup stammen, das in UTC-Tagen berichtet wird. Wenn eine Abfrage eine dieser Kennzahlen mit anderen Kennzahlen kombiniert, fällt die gesamte Ergebnismenge auf UTC zurück, damit die Datumsintervalle übereinstimmen.
</Note>

<div id="the-timezone-clause">
  ### Die TIMEZONE-Klausel
</div>

Gib eine Zeitzone direkt in AQL mit der `TIMEZONE`-Klausel an, die zwischen `CHART` und `ORDER BY` steht:

```aql theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
SELECT ...
CHART ...
TIMEZONE "Asia/Tokyo"
ORDER BY ...
```

Wenn die Klausel vorhanden ist, überschreibt sie für diese Abfrage die Auswahl in der Symbolleiste und bleibt beim Speichern und erneuten Laden erhalten.

<div id="available-timezones">
  ### Verfügbare Zeitzonen
</div>

Die Auswahl (und die `TIMEZONE`-Klausel) akzeptiert eine feste Menge von zehn Zeitzonen. Jede andere IANA-Zeitzone wird als nicht unterstützt abgelehnt.

| Zeitzone | Beispielort |
| - | - |
| UTC | Koordinierte Weltzeit |
| America/New\_York | New York (ET) |
| America/Chicago | Chicago (CT) |
| America/Denver | Denver (MT) |
| America/Los\_Angeles | Los Angeles (PT) |
| Europe/London | London (GMT/BST) |
| Europe/Paris | Paris (CET/CEST) |
| Asia/Tokyo | Tokio (JST) |
| Asia/Singapore | Singapur (SGT) |
| Australia/Sydney | Sydney (AEST/AEDT) |

<div id="account-default-and-how-timezone-affects-results">
  ### Kontostandard und wie die Zeitzone Ergebnisse beeinflusst
</div>

Wenn **Lock reporting timezone** in deinen Analytics-Einstellungen aktiviert ist, verwendet die Auswahl von **Account default** diese gesperrte Zeitzone (die Symbolleiste zeigt die aufgelöste Zone an, zum Beispiel **Timezone: Account default (Paris (CET))**). Die Seite mit den Analytics-Einstellungen akzeptiert die vollständige IANA-Liste, Reports berücksichtigt jedoch nur die zehn oben genannten Zonen; wenn deine gesperrte Zone nicht dazugehört, wird **Account default** stillschweigend zu UTC aufgelöst. Wenn **Lock reporting timezone** nicht aktiviert ist, fällt **Account default** auf UTC zurück.

Wenn eine Zeitzone festgelegt ist, verwendet die Datumsgruppierung die Ortszeit statt UTC. Zum Beispiel fällt ein Ereignis um `2026-03-29T01:30:00Z` in New York (ET) auf den 28. März, in Paris (CET) jedoch auf den 29. März. Abfragen ohne Zeitzone, einschließlich zuvor gespeicherter, laufen weiterhin in UTC.
