> For the complete documentation index, see [llms.txt](https://help.citrusad.com/retail-media-interface/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.citrusad.com/retail-media-interface/integration/de/reporting/reporting-faq.md).

# Häufig gestellte Fragen

### Ist die Reporting-API sicher?

Alle in BigQuery gespeicherten Daten sind im Ruhezustand und während der Übertragung verschlüsselt. Das bedeutet, dass die Daten sowohl bei der Speicherung auf den Servern von Google als auch bei der Übertragung zwischen diesen Servern und dem Client durch eine starke Verschlüsselung geschützt sind.

Darüber hinaus verfügt BigQuery über integrierte Zugriffskontrollen, mit denen Sie den Zugriff auf Ihre Daten auf der Grundlage von Benutzerrollen und Berechtigungen einschränken können. Das bedeutet, dass wir genau festlegen, wer Zugriff auf Ihre Daten hat und welche Aktionen auf diesen ausgeführt werden dürfen.

BigQuery unterstützt auch die Authentifizierung und Autorisierung über Standardmechanismen wie OAuth 2.0 und API-Schlüssel.

Die Infrastruktur von Google ist so konzipiert, dass sie vor gängigen Bedrohungen wie Denial-of-Service-Angriffen, Datenpannen und unbefugtem Zugriff schützt. Dies geschieht mithilfe verschiedener Sicherheitsmaßnahmen wie Firewalls, Systemen zur Erkennung von Eindringlingen und regelmäßigen Sicherheitsaudits. Auch die BigQuery API wurde unter Sicherheitsaspekten entwickelt und setzt eine Reihe von Maßnahmen ein, um sicherzustellen, dass Ihre Daten jederzeit geschützt sind.

### Wie oft werden die Daten aktualisiert?

Täglich. Die Aktualisierung beginnt um Mitternacht UTC+0 mit einer maximalen Aktualisierungszeit von 12 Stunden. Die Aktualisierung umfasst alle Daten, die bis Mitternacht (UTC+0) des Vortages eingegangen sind.

### Wie weit reichen die Daten zurück?

Alle historischen Daten, die für eine bestimmte Organisation freigegeben wurden, stehen zur Verfügung.

### Wie stelle ich eine Verbindung her, wenn ich ein Direct Access-Benutzer bin?

Da Sie sich bereits in der GCP befinden, verläuft dies nahtlos. Melden Sie sich einfach an und versuchen Sie, die relevanten Tabellen über die Benutzeroberfläche oder die API abzufragen.

<figure><img src="https://storage.googleapis.com/insight-platform-docs-public/insights-iam-ui.png" alt="Insights IAM UI" width="100%"><figcaption></figcaption></figure>

#### Ich erhalte den Fehler "User does not have bigquery.jobs.create permission in project" – was mache ich falsch?

Für die Konten, die Sie uns zur Verfügung gestellt haben, Epsilon Retail Media hat dem relevanten Datensätzen BigQuery-Betrachterrechte gewährt. Dadurch können Sie die darin enthaltenen Tabellen lesen. In Ihrem Projekt müssen einige Dinge geschehen, um diese Remote-Tabellen tatsächlich abzufragen.

Nehmen wir Folgendes an:

* Ihr Projekt = "client-project-123456"
* Ihr Benutzer = <client-user@client-project-123456.iam.gserviceaccount.com>
* Epsilon Retail Media dataset: "insight-platform-external-iam.client\_insight\_reporting"

Sie müssen:

1. Dem <client-user@client-project.iam-123456.gserviceaccount.com> die Berechtigung bigquery.jobs.create innerhalb des Projekts client-project-123456 erteilen (nicht dem Epsilon Retail Media Projekt). Sie können dies tun, indem Sie die Rolle BigQuery Job User zuweisen.
2. Wenn Sie eine Abfrage ausführen, müssen Sie die Abfrage innerhalb Ihres Projekts ausführen (da Sie nur über Berechtigungen zum Lesen des Datensatzes innerhalb des Epsilon Retail Media Projekts verfügen, nicht aber zum Ausführen von Abfragen darin). Hier ist ein Beispiel dafür, wie dies mit einem einfachen Cloud Shell-Befehl aussehen könnte (ausgeführt als <client-user@client-project-123456.iam.gserviceaccount.com>):

```bash
bq query --use_legacy_sql=false --project_id client-project-123456 'SELECT * FROM insight-platform-external-iam.client_insight_reporting.campaign limit 10;'
```

Beachten Sie, dass das Client-Projekt auf Ihr Projekt eingestellt ist, nicht auf insight-platform-external-iam.

Ein ähnlicher Ansatz muss bei allen anderen verwendeten Tools verfolgt werden. Bitte konsultieren Sie die Dokumentation der jeweiligen Tools für weitere Informationen sowie die GCP-Online-Dokumentation für Tipps!

#### Die Epsilon Retail Media Daten befinden sich nicht an meinem Standort. Wie kann ich die Daten an meinen Standort übertragen?

Es gibt viele Möglichkeiten, aber es ist einfach, Datensätze am selben Standort wie unseren zu erstellen, dann Transformationen, Abfragen usw. in Tabellen in diesen Datensätzen durchzuführen und diese dann an Ihren bevorzugten Standort zu kopieren.

<figure><img src="https://storage.googleapis.com/insight-platform-docs-public/location-guide.png" alt="Location Guide" width="100%"><figcaption></figcaption></figure>

Es gibt viele Möglichkeiten, zwischen Standorten zu kopieren, indem Sie die Benutzeroberfläche, das BQ-Befehlszeilentool und die API selbst verwenden. Weitere Informationen finden Sie auf diesen Google Cloud-Dokumentationsseiten:

* [Manage datasets | BigQuery](https://cloud.google.com/bigquery/docs/managing-datasets)
* [bq Befehlszeilenzeilenzool-Referenz](https://cloud.google.com/bigquery/docs/bq-command-line-tool)
* [Eine Single-Source-Tabelle kopieren](https://cloud.google.com/bigquery/docs/copying-datasets)

### Wie stelle ich eine Verbindung her, wenn ich kein GCP-API-Benutzer bin?

Epsilon Retail Media wird Ihnen die relevanten Anmeldedaten in einer JSON-Datei zur Verfügung stellen, die Sie in Ihren Authentifizierungsmechanismus einbinden können.

### Kann ich Abfragen nur mit der Reporting-API (ohne BigQuery-Benutzeroberfläche) debuggen?

Ja, die BigQuery-API gibt einen Code zurück, der anzeigt, ob ein Problem aufgetreten ist, und Fehlermeldungen sind ebenfalls verfügbar.

### Kann ich abschätzen, wie teuer eine Abfrage sein wird?

Ja, die API verfügt über einen Mechanismus, mit dem eine Byte-Schätzung darüber eingeholt werden kann, was die Abfrage bei der Ausführung scannen wird. Sie können diese Schätzung multipliziert mit der Häufigkeit der Abfrageaufrufe verwenden, um zu verstehen, wie nahe Sie dem Kontingent kommen werden.

Weitere Informationen finden Sie in der GCP-Dokumentation.

[Dry run query | BigQuery | Google Cloud](https://cloud.google.com/bigquery/docs/samples/bigquery-query-dry-run)

### Was passiert, wenn ich das Kontingentlimit überschreite?

Bitte lesen Sie Ihre Vereinbarung mit Epsilon Retail Media um zu verstehen, wie hoch Ihr Kontingent ist. Sofern nicht spezifisch definiert, gilt standardmäßig ein Limit von 10 TB an Abfragedaten-Scans pro Monat.

Ihre Vereinbarung kann auch eine maximale Anzahl von API-Aufrufen pro Tag beinhalten. Wenn dies nicht spezifisch definiert ist, gilt standardmäßig ein Limit von 100 API-Aufrufen pro Tag.

Für den Fall, dass Sie Ihr Kontingent überschreiten (weder Datenscan noch Anzahl der Aufrufe), werden wir uns mit Ihnen in Verbindung setzen, um Ihre Anwendungsfälle zu verstehen. Je nach Vereinbarung können Zusatzkosten anfallen.

Im Falle eines schwerwiegenden Missbrauchs außerhalb der Bedingungen Ihrer Vereinbarung (oder der Standardlimits) behalten wir uns das Recht vor, den Zugriff auszusetzen.

### Was ist ein Beispiel für die Verwendung der Reporting-API?

Nachfolgend finden Sie einige Beispiele unter Verwendung gängiger Methoden.

#### Google SDK für Python

Dieses Beispiel wird:

1. Mit BigQuery verbinden
2. Die Abfrage ausführen
3. Das Ergebnis in eine CSV-Datei ausgeben

```python
import google.cloud.bigquery as bq
import pandas as pd
bq_client = bq.Client.from_service_account_json("<REPLACE>.json")
job_config = bq.QueryJobConfig(allow_large_results=True)
query_job = bq_client.query(
    'SELECT count(1) FROM insight-platform-external-iam.<REPLACE>_insight_reporting.campaign
    LIMIT 1000', job_config=job_config)
df = query_job.to_dataframe(create_bqstorage_client=False)
df.to_csv(r"C:\Users\<REPLACE>\<REPLACE>.csv", index=False)
print("Run Complete")
```

Andere Methoden stehen zur Verfügung, um vor dem Ausführen der Abfrage die gescannten Bytes usw. zu schätzen.

Bitte lesen Sie die BigQuery-Dokumentation

[BigQuery API | Google Cloud](https://cloud.google.com/bigquery/docs/reference/rest)

Wenn Sie sich nicht in der GCP befinden, können Sie über eine Umgebungsvariable auf eine JSON-Anmeldedatei verweisen.

#### Generische API für Python

```python
import csv
import requests
from google.oauth2 import service_account

PROJECT_ID = "insight-platform-external-iam"
DATASET = "<YOUR DATASET HERE>"
END_POINT = f"https://bigquery.googleapis.com/bigquery/v2/projects/{PROJECT_ID}/queries"
QUERY = f"""
SELECT supplier_id, campaign_id, sum(ad_spend) as ad_spend, sum(clicks) as clicks
FROM `{PROJECT_ID}.{DATASET}.realised_ad_agg`
WHERE ingressed_at BETWEEN '2022-09-01' and '2022-12-31'
group by 1,2
"""

def get_token():
    # With service account
    credentials = service_account.Credentials.from_service_account_file('./secrets/service-account.json')
    scoped_credentials = credentials.with_scopes(['https://www.googleapis.com/auth/cloud-platform'])

    # Do token request
    def req( method, url, headers, body, **kwargs):
        resp = requests.post(url, headers=headers, data=body)
        return type('obj', (object,), {'data' : resp.text, 'status': 200})

    scoped_credentials.refresh(req)
    return scoped_credentials.token

def run_job(token):
    resp = requests.post(
            END_POINT,
            json={
                "query": QUERY,
                "useLegacySql": False
            },
            headers={
                "Content-Type": "application/json",
                "Authorization": f"Bearer {token}"
            }
    )
    return resp.json()['jobReference']['jobId']

def get_query_results(job_id, token):
    status_endpoint = f'{END_POINT}/{job_id}?location=australia-southeast1'
    completed = False
    while not completed:
        response = requests.get(status_endpoint, headers={
                "Content-Type": "application/json",
                "Authorization": f"Bearer {token}"
            })
        completed = response.json()['jobComplete']

    data = response.json()
    rows = data['rows']
    columns = [c['name'] for c in data['schema']['fields']]

    return rows, columns

def extract():
    token = get_token()
    job_id = run_job(token)
    rows, columns = get_query_results(job_id, token)

    with open('results.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(columns)

        for row in rows:
            writer.writerow([i['v'] for i in row['f']])

extract()
```

### Was ist, wenn ich mich in AWS usw. und nicht in der Google Cloud befinde? Kann ich mich trotzdem authentifizieren und die API nutzen?

Ja, das funktioniert. Wir stellen Ihnen Dienstkonto-Anmeldedaten zur Verfügung, und Sie können in Ihrer Anwendung darauf verweisen. Hier ist ein Beispiel.

```python
# TODO(developer): Set key_path to the path to the service account key
#                  file.
# key_path = "path/to/service_account.json"

credentials = service_account.Credentials.from_service_account_file(
    key_path, scopes=["https://www.googleapis.com/auth/cloud-platform"],
)

token = credentials.token

# use the token to do the API calls
# ...
# headers: Bearer ${token}
# ...
```

### Wie kann ich feststellen, wo sich die einzelnen Datensätze befinden, die mit mir geteilt werden?

Dieser API-Aufruf teilt Ihnen mit, an welchem Standort sich jeder Datensatz befindet.

`GET https://bigquery.googleapis.com/bigquery/v2/projects/insight-platform-external-iam/datasets`

```json
{
  "kind": "bigquery#datasetList",
  "etag": "RLU1Ww9C5FdhlcIuRHjW0A==",
  "datasets": [
    {
      "kind": "bigquery#dataset",
      "id": "insight-platform-external-iam:acme_insight_reporting",
      "datasetReference": {
        "datasetId": "acme_insight_reporting",
        "projectId": "insight-platform-external-iam"
      },
      "location": "australia-southeast1"
    },
    {
      "kind": "bigquery#dataset",
      "id": "insight-platform-external-iam:acme_acme_analytics",
      "datasetReference": {
        "datasetId": "acme_acme_analytics",
        "projectId": "insight-platform-external-iam"
      },
      "location": "us-central1"
    }
  ]
}
```

### Gibt es Best-Practice-Tipps?

Allgemein gesprochen: Wenn Sie die Daten intensiv nutzen möchten, insbesondere wenn Sie Zugriff auf die unaggregierten Daten haben (Requests/realised Ads/Orders/enhanced Attribution usw.), ist es am besten, die Tabellen in Ihr eigenes Data Warehouse zu kopieren (zu stagen) und DANN Ihre Abfragen für Ihre erforderliche Geschäftslogik auf diesen Kopien auszuführen.

Nutzer mit geringerem Umfang können die Tabellen auch einfach direkt für bestimmte Ergebnisse abfragen.

Es ist wichtig, unter dem zulässigen Kontingent zu bleiben, um einen reibungslosen Ablauf zu gewährleisten.

Beachten Sie auch, dass jede Abfrage maximal 1 GB herunterladen kann, da andernfalls eine Fehlermeldung ausgegeben wird. Falls ein sehr großer Download erforderlich ist, führen Sie stattdessen mehrere kleinere Abfragen aus (z. B. Teilmenge der Daten pro Tag oder Lieferant usw.).

### Was ist, wenn ich Hilfe beim Erstellen geeigneter SQL-Anweisungen benötige?

Erstellen Sie ein Ticket mit Ihrer versuchten Abfrage, und wir können bei der Überprüfung helfen – wir melden uns mit etwaigen Anmerkungen bei Ihnen zurück.

### Gibt es Tipps für die Verwendung des Pandas-Pakets?

Pandas ist eines der beliebtesten Analyse-Tools. Damit es funktioniert, müssen die Abhängigkeiten pandas-gbq und pydata-google-auth installiert sein.

Das folgende Snippet ist ein funktionierendes Beispiel dafür, wie Daten aus einer BigQuery-Tabelle gelesen werden.

```python
import pandas as pd
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file('path/to/the/credential/file')

query = 'select * from project.dataset.table'

dat = pd.read_gbq(
    query,
    project_id='project_id',
    credentials=credentials
)
```

Weitere Informationen zur Pandas-Funktion finden Sie unter [hier](https://pandas.pydata.org/docs/reference/api/pandas.read_gbq.html).

### Gibt es Tipps für die Verwendung des PySpark-Pakets?

Auszugehen von einer funktionierenden PySpark-Umgebung müssen Sie die korrekte jar-Datei für den BigQuery-Connector bereitstellen, die zu Ihrer PySpark-Version passt. Zum Beispiel erfordert PySpark 3.2.\* spark-3.2-bigquery-0.30.0.jar. Die Liste der jar-Dateien sowie praktische Code-Snippets und Parameter finden Sie unter [hier](https://github.com/GoogleCloudDataproc/spark-bigquery-connector).

Das folgende Code-Snippet bietet ein Beispiel für die Ausführung einer Abfrage.

```python
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('BigNumeric').config('spark.jars', 'spark-3.2-bigquery-0.30.0.jar').getOrCreate()

spark.conf.set('credentialsFile', 'path/to/the/credential/file')

spark.conf.set('viewsEnabled', 'true')
spark.conf.set('materializationProject', 'yourMaterializationProject')
spark.conf.set('materializationDataset', 'yourMaterializationDataset')

query = 'select * from project.dataset.table'

df = spark.read.format('bigquery').option('query', query).load()

df.show()
```

WICHTIG: Der Parameter viewsEnabled muss true sein.

Daten in Views werden in temporären Tabellen materialisiert, bevor sie von PySpark gelesen werden, wofür die Berechtigung bigquery.tables.create erforderlich ist. Daher müssen Sie das materializationProject und das materializionDataset angeben, für die der Benutzer Schreibzugriff hat.

### Ich erhalte einen Fehler, der einen Filter in der Abfrage fordert?

Für eine partitionierte Tabelle ist ein Filter obligatorisch, ohne den eine Fehlermeldung wie die folgende ausgegeben wird:

> Cannot query over table ‘dataset\_id.table\_id' without a filter over column(s) ‘partitioned\_column' that can be used for partition elimination

Um den Fehler zu beheben, fügen Sie einfach einen angemessenen Filter hinzu, der den Zielbereich abdeckt, z. B.

```sql
-- this query returns all records available since yesterday
select
  *
from
  dataset_id.table_id
where
  ingressed_at >= date_sub(current_date, interval 1 day)
```

Um herauszufinden, nach welcher Spalte die Tabelle partitioniert ist (wie ingressed\_at im obigen Beispiel), lesen Sie die Beschreibung der jeweiligen Tabelle.

### Wie kann ich Zugriff beantragen?

#### Ablauf

Es muss ein Ticket erstellt werden und den Berechtigungskriterien schriftlich zugestimmt werden.

Wir werden mit dem potenziellen Kandidaten zusammenarbeiten, um die erforderliche Zugriffsstufe und die Sicherheitseinstellungen zu ermitteln und festzulegen, welche Kontingente und Kosten anfallen können.

#### Berechtigungskriterien

Ein Kandidat muss die folgenden Kriterien erfüllen, um als berechtigt für den Zugriff auf die Reporting API zu gelten: -

**Allgemein**

1. Der Kandidat kann nur Zugriff auf Daten anfordern für Epsilon Retail Media Namespaces und Teams, in denen er ansonsten bereits Mitglied ist oder zu denen er allgemeinen Zugriff hat. Der Kandidat muss angeben, für welches der folgenden Szenarien er sich bewirbt (und Nachweise über bestehenden Zugriff erbringen):
   1. Umgebungsebene (eine gesamte Implementierung von Epsilon Retail Media Plattform ist dem Kandidaten gewidmet).
   2. Namespace-Ebene (der Kandidat hat die Berechtigung, alle Teams, sowohl Händler als auch Lieferanten, innerhalb eines einzelnen Namespace oder einer Liste von Namespaces zu sehen).
   3. Spezifische Händler-Team-ID oder Gruppenebene.
   4. Spezifische Lieferanten-Team-ID oder Gruppenebene.
      1. Zusätzlich kann ein Integrator auf eine spezifische Lieferanten-Team-ID oder Gruppenebene PLUS vollständige Händler-Produktkataloge zugreifen, sofern ein Händler dem im Einzelfall zustimmt.
2. Transaktionale Fact-Daten können nur Kandidaten bereitgestellt werden, die für die Allgemeinen Kriterien 1a oder 1b berechtigt sind.
3. Kandidaten, die sich nicht für transaktionale Fact-Daten qualifizieren, erhalten nur Zugriff auf voraggregierte Fact-Daten. Die Daten werden in täglichen Zusammenfassungen aggregiert (mit UTC+0 als Zeitzone der Aggregation).
4. Kandidaten, die nur für die Allgemeinen Kriterien 1d berechtigt sind, können keine Ad Request-Daten erhalten (im Gegensatz zu Realised Ad-Daten, die bereitgestellt werden). Produktdaten werden für die spezifischen Produkte bereitgestellt, die in den Realised Ads des Lieferanten beworben werden, AUSGENOMMEN Integratoren, die Händler-Produktkataloge erhalten können, sofern ein Händler dem im Einzelfall zustimmt.
5. Bei dimensionalen Daten wird nur garantiert, dass sie die aktuellen Versionen der betreffenden Datensätze enthalten. Es wird erwartet, dass die Nachverfolgung historischer Änderungen vom Kandidaten je nach Bedarf implementiert wird.
6. Die Daten werden täglich aktualisiert und werden spätestens um 12:00 UTC+0 für Daten bis einschließlich des vorherigen abgeschlossenen UTC+0-Tages aktualisiert.
7. Es wird davon ausgegangen, dass der Zugriff ausschließlich lesender Natur ist. Die API darf nicht verwendet werden, um Objekte in unserem Data Warehouse für irgendeinen Zweck zu erstellen.
8. Jede Verknüpfung mit anderen Datenquellen muss in der eigenen Umgebung des Kandidaten erfolgen.
9. Der Kandidat muss über ein SDK (oder ein Äquivalent) für den Zugriff auf die Google BigQuery API verfügen.
10. Der Kandidat verfügt über gute SQL-Kenntnisse.
11. Der Kandidat ist vertraut mit Epsilon Retail Media -Konzepten und trifft, falls nicht, Vorkehrungen für eine Standard-Produktgeschultung durch seinen Customer Support Manager oder Technical Account Manager.
12. Basierend auf den bereitgestellten Dokumenten wird vom Kandidaten erwartet, dass er seine eigenen Lösungen entwickelt. Wenn ein Problem damit festgestellt wird, dass sich eine SQL-Anweisung gemäß der Dokumentation nicht wie erwartet verhält, muss ein Ticket über die regulären Support-Kanäle erstellt werden. Die folgenden Informationen müssen bereitgestellt werden.
    1. Das Konto, über das die Verbindung hergestellt wird.
    2. Die exakte SQL-Anweisung, die aufgerufen wird.
    3. Eine detaillierte Beschreibung der auftretenden Fehlermeldungen.
13. Wenn der Kandidat ein Händler ist, ist es erforderlich, dass Impressions/Clicks/Orders an die Epsilon Retail Media Plattform übermittelt werden, sodass ein vollständiges Bild des Anzeigen-Lebenszyklus erstellt werden kann.
14. Von Zeit zu Zeit, Epsilon Retail Media behalten sich das Recht vor, das Schema zu ändern. Diese Änderungen umfassen in der Regel das Hinzufügen neuer Spalten zu bestehenden Tabellen und Views und sind abwärtskompatibel. Kandidaten müssen ihren SQL-Code so strukturieren, dass Spalten benannt werden, anstatt Platzhalter usw. zu verwenden. Für den Fall, dass eine Änderung das Veralten einer Spalte oder Tabelle beinhaltet, Epsilon Retail Media wird die Änderung mindestens 12 Wochen vor ihrer Implementierung angekündigt. Benachrichtigungen erfolgen über Standard-Release-Mitteilungen an Plattform-Benutzer.

Es ist für einen Kandidaten nicht zwingend erforderlich, ein bestehender Google Cloud Platform (GCP)-Benutzer zu sein; es gelten jedoch weitere Kriterien, je nachdem, ob der Kandidat ein GCP- oder Nicht-GCP-Benutzer ist.

**Nicht-GCP-Kandidat**

Sofern nicht anders vereinbart, Epsilon Retail Media wird dem Kandidaten Anmeldeinformationen für ein einzelnes Dienstkonto innerhalb unserer Umgebung bereitstellen.

Sofern nicht anders vereinbart, gelten die folgenden Standardbedingungen:

1. Maximal 100 API-Aufrufe pro Tag.
2. Nicht mehr als 10 TB Daten-Scans pro Monat (beachten Sie, dass die API eine Möglichkeit bietet, die Größe des Abfrage-Scans vor der Ausführung zu schätzen; siehe Google-Dokumentation [Dry run query | BigQuery | Google Cloud](https://cloud.google.com/bigquery/docs/samples/bigquery-query-dry-run)).
3. Wenn die Kriterien 1 und/oder 2 für Nicht-GCP-Kandidaten überschritten werden, Epsilon Retail Media behalten sich das Recht vor, den Zugriff nach eigenem Ermessen zu sperren.
4. Kein einzelner API-Aufruf kann mehr als 1 GB Daten auf einmal herunterladen.

#### Wie dekodiere ich die Dienstkontodatei?

Die Anmeldeinformationen des Dienstkontos werden Ihnen für eine sichere Übertragung in einem base64-kodierten Format bereitgestellt. Sie müssen diese vor der Verwendung dekodieren. Hier sind Beispiele zum Dekodieren der Datei:

Mit Bash:

```bash
# Replace encoded-credentials.txt with the file containing your base64 encoded credentials
base64 -d encoded-credentials.txt > service-account.json
```

Mit Python:

```python
import base64

# Replace encoded_credentials with your base64 encoded string
with open('encoded-credentials.txt', 'r') as f:
    encoded_credentials = f.read()

decoded_credentials = base64.b64decode(encoded_credentials)

with open('service-account.json', 'wb') as f:
    f.write(decoded_credentials)
```

Nach dem Dekodieren haben Sie eine `service-account.json` -Datei, die Sie mit den BigQuery-Client-Bibliotheken verwenden können, wie in den vorherigen Beispielen gezeigt.

**GCP-Kandidat**

Sofern nicht anders vereinbart, stellt der Kandidat Epsilon Retail Media Details von maximal 5 GCP-Konten bereit, damit wir den erforderlichen Zugriff zuweisen können.

Beachten Sie, dass dem Konto die Rolle BigQuery Job User (roles/bigquery.jobUser) zugewiesen sein muss.

Es gelten die folgenden Einschränkungen:

1. Maximal 100 API-Aufrufe pro Tag.
2. Wenn Kriterium 1 für GCP-Kandidaten überschritten wird, Epsilon Retail Media behalten sich das Recht vor, den Zugriff nach eigenem Ermessen zu sperren.
3. Kein einzelner API-Aufruf kann mehr als 1 GB Daten herunterladen.

### Glossar

#### Umgebung

Der Name der physischen Umgebung, in der die Epsilon Retail Media -Plattform bereitgestellt ist. Jede hostet einen oder mehrere Namespaces.

#### Namespace

Eine logische Gruppierung aller Entitäten, die Teil einer Implementierung der Epsilon Retail Media -Lösung sind. Dies umfasst Teams und alle Objekte im Besitz von Teams. In der Regel kann ein Namespace aus einem Händler (Team) und mehreren Lieferanten (Teams) zusammen mit Benutzern für jedes Team und anderen relevanten Konfigurationen bestehen (Händler besitzen Kataloge, Lieferanten konfigurieren Kampagnen usw.). Teams (und was sie besitzen) gehören exklusiv zu einem einzigen Namespace (keine Teams können über mehrere Namespaces hinweg existieren).

#### Benutzer

Eindeutiger Bezeichner eines Benutzers im Epsilon Retail Media -System. Eine einzelne E-Mail kann mehrere userIds haben. Jede userId ist pro Namespace eindeutig. Jeder Benutzer hat einen Vornamen, Nachnamen, eine E-Mail-Adresse und eine ID. Ein Benutzer kann Mitglied von mehreren Teams sein und auf diese in der Epsilon Retail Media -Plattform zugreifen.

#### Team

Ein Team innerhalb des Epsilon Retail Media -Systems. Kann ein Lieferant (Werbetreibender) oder Händler sein. Lieferanten-Teams erstellen in der Regel Kampagnen, Händler überprüfen Kampagnen und führen administrative Funktionen aus. Ein Benutzer im Epsilon Retail Media -System kann Mitglied vieler Teams oder nur eines Teams sein. Einem Team sind in der Regel Benutzer, Kampagnen und Wallets zugeordnet.

#### Lieferant

Ein Lieferanten-Team innerhalb des Epsilon Retail Media -Systems. Ein Lieferant kann typischerweise eine Marken-Muttergesellschaft oder eine Reihe von Teams pro einzelner Marke sein. Lieferanten verwalten in der Regel Kampagnen, verwalten Wallet-Guthaben usw.

#### Händler

Ein Händler-Team innerhalb des Epsilon Retail Media -Systems. Die meisten Namespaces haben nur ein Händler-Team. Händler verwalten in der Regel Produktkataloge, überprüfen Kampagnen usw.

#### Kampagne

Eine einzelne eindeutige Kampagne, die mit einer Platzierungs- und Targeting-Strategie für eine bestimmte Auswahl von Produkten konfiguriert ist. Beispielsweise könnte eine Kampagne im Epsilon Retail Media -System für Produkt A und B werben und auf die Suchbegriffe „Schokolade“ und „Schokoladen“ mit einem maximalen Gebot von 0,60 $ abzielen. Ein einzelnes Team hat in der Regel viele Kampagnen.

#### Katalog

Ein eindeutiger Produktkatalog eines Händlers im Epsilon Retail Media -System. Es ist typisch für einen Händler, nur einen Produktkatalog mit Epsilon Retail Media in einem einzigen Namespace zu synchronisieren. Ein Katalog enthält eine Liste aller Produkte im Katalog des Händlers, deren Namen, Marke, Kategorien und andere relevante Attribute, die in das Epsilon Retail Media -System eingelesen werden.

#### Produkt

Ein einzelnes eindeutiges Produkt im Epsilon Retail Media -System. Ein Produkt hat einen eindeutigen Produktcode, der im Produktkatalog synchronisiert ist. Ein Produkt kann Attribute wie Kategorie, Taxonomie, Marke usw. haben.

#### Wallet

Ein Wallet im Epsilon Retail Media -System speichert das Guthaben eines Werbetreibenden zum Zweck von Zahlungen (z. B. Bezahlung für realisierte Anzeigen). Jedes Wallet hat einen einzigen Währungscode und kann nur für Kataloge desselben Währungscodes Guthaben ausgeben. Ein Wallet gehört einem Team. Ein Team kann beliebig viele Wallets haben. Ein Wallet kann archiviert werden. Das Archivieren eines Wallets blendet es auf der Plattform nur ein/aus; ein archiviertes Wallet kann weiterhin Guthaben ausgeben.

#### Hauptbuch

Ein Hauptbuch von Ereignissen, die zu einer Transaktion im Epsilon Retail Media -System geführt haben. Dies sind meist Werbeereignisse wie Impressionen oder Klicks für gesponserte Produkte oder Banner-Anzeigen (was zu einer Abbuchung führt). Dies können auch Aufladungen und Anpassungen von Guthaben durch einen Lieferanten sein (Gutschriften). Jedes Ereignis hat einen „Grund“ wie Gesponserte Produkte, Banner-Anzeigen, Aufladung.

#### Anfrage

Eine Anfrage an das Epsilon Retail Media -System nach Anzeigen. In der Anfrage gibt der Händler eine Platzierung sowie den Kontext an, wie z. B. den eines Kunden sessionId oder für die Anfrage relevante Filter. Je nach Anfrage Epsilon Retail Media sendet Anzeigen eines relevanten AdType (z. B. Kategorie oder Suchbegriff) an den Händler zurück, die dieser dem Kunden anzeigt.

#### (Realisierte) Anzeige

Eine Anzeige ist ein einzelnes Werbeereignis, das an einen Händler zurückgesendet wird, um es seinem Kunden zu präsentieren. Sie wird zu einer realisierten Anzeige, wenn der Händler die Bestätigung zurückgibt, dass die Anzeige mindestens eine Impression hatte (explizite Bestätigung, dass die Anzeige tatsächlich verwendet, d. h. realisiert wurde). Im Epsilon Retail Media -System hat jede Anzeige eine eindeutige realisedad id, die als Referenz für dieses einzelne eindeutige Ereignis dient.

#### Kategorie

Eine Kategorie ist eine Seite auf der Website des Händlers als Teil der Taxonomie seiner Website, wie z. B. 'Bäckerei' oder 'Molkereiprodukte'. Ein Händler fordert in der Regel Anzeigen auf einer Kategorieseite an und gibt dieses relevante Attribut in seiner Anfrage an Epsilon Retail Media. If Epsilon Retail Media aktive und gültige Kampagnen für die Kategorie hat, werden Anzeigen zurückgegeben.

#### SearchTerm

Ein von einem Kunden auf der Website des Händlers eingegebener Suchbegriff. Dieser Suchbegriff wird dann gesendet an Epsilon Retail Media um relevante Anzeigen anzufordern. Wenn Epsilon Retail Media aktive und gültige Kampagnen für den Suchbegriff hat, werden Anzeigen zurückgegeben.

#### Bestellung

Eine eindeutige Bestellung im System des Händlers, synchronisiert mit Epsilon Retail Media. Eine einzelne Bestellung kann mehrere Bestellpositionen enthalten (ähnlich wie der Warenkorb eines Kunden mehrere Artikel enthalten kann). Sobald die Bestellung eines Kunden abgeschlossen ist, werden diese gesendet an Epsilon Retail Media um die Attribuierung von Epsilon Retail Mediazu unterstützen. Der Return on Ad Spend (ROAS) und andere wichtige KPIs können dann Händlern und Werbetreibenden zur Verfügung gestellt werden.

#### Attribuierung

Attribuierung ist ein Prozess, der im Epsilon Retail Media -System ausgeführt wird und einer übermittelten Bestellung eine einem Kunden angezeigte Anzeige zuordnet. Eine typische Customer Journey sieht so aus, dass der Kunde eine Anzeige sieht (Impression), darauf klickt (Klick), sie seinem Warenkorb hinzufügt und diesen Artikel kauft (Konvertierung). Die Bestellung wird der eindeutigen Anzeige 'attribuiert', auf die der Kunde geklickt hat. Damit eine Bestellung im Epsilon Retail Media -System attribuiert werden kann, muss mit der Anzeige interagiert worden sein (je nach Integration entweder gesehen oder geklickt), und der Kunde hat dann einen für die Anzeige relevanten Artikel gekauft. Epsilon Retail Media verwenden typischerweise eine 'sessionId', um Bestellungen Anzeigen zuzuordnen, wobei der Händler eine 'sessionId' in allen relevanten Touchpoints der Journey einer Anzeige angibt. So ist Epsilon Retail Media in der Lage zu erkennen, dass eine einzelne Anzeige, die einem einzelnen Kunden präsentiert wurde, zu einer bestimmten Bestellung geführt hat.

#### Datumsangaben

Alle Daten werden in die Zeitzone UTC+0 konvertiert, wenn sie aggregiert werden.

#### Deckelung

Implementierungen der Epsilon Retail Media -Plattform beinhalten oft, dass der Händler mehr Anzeigen anfordert, als realistischerweise jemals als Impressionen ausgespielt (realisiert) werden könnten. Aus Sicht der Analytik kann dies einen ungenauen Eindruck davon vermitteln, wie bestimmte Kennzahlen wirklich abschneiden. Wenn beispielsweise eine Anfrage für 20 Anzeigen gestellt wurde (AdType=Product) und die Plattform als Antwort 2 Anzeigen geliefert hat, entspricht dies einer 'Fill Rate' von 10 % auf die Anfrage (2 von 20). Wenn jedoch davon ausgegangen wird, dass in der Praxis wahrscheinlich nur 4 Anzeigen jemals verwendet (realisiert) werden, wäre es vorzuziehen, dies als zu 50 % erfüllt zu interpretieren (2 von 4). Daher das Konzept der Deckelung (Capping) innerhalb des Reportings. Die Deckelung wird pro Händler festgelegt, wobei eine Deckelung für Produktanzeigen und eine andere für Banneranzeigen verfügbar ist (da Produktanzeigen-Anfragen in der Regel viel mehr Anzeigen anfordern und nutzen als Banner). Um auf das Beispiel zurückzukommen: Wenn die Produktdeckelung = 4 für den Händler beträgt, würden die Anfrage-Kennzahlen wie folgt berichtet werden:- NumAdRequests = 1 NumAdsRequested = 20 CappedNumAdsRequested = 4 NumAdsServed = 2 CappedNumAdsServed = 2 Hinweis: Falls 5 Anzeigen geliefert wurden (d. h. die gelieferten Anzeigen haben die Deckelung selbst überschritten), würden die letzten 2 Kennzahlen wie folgt berichtet werden:- NumAdsServed = 5 CappedNumAdsServed = 4 (auf die Deckelung gekürzt) Deckelungen sind nicht obligatorisch. Falls sie nicht angegeben werden, sind die gedeckelten und ungedeckelten Ergebnisse identisch.

#### Erweiterte Attribuierung

Die Epsilon Retail Media -Plattform führt Attribuierungen wie im Abschnitt 'Attribuierung' beschrieben durch (siehe oben). Das Reporting-Subsystem kann je nach Händler auch andere Attribuierungsszenarien erkennen und markieren (erweiterte Attribuierung).

Die Szenarien sind:

* Impression-View-Through-Attribuierung
  * Eine Bestellung wurde einer Anzeige zugeschrieben, die für dasselbe Produkt in derselben Session-ID angesehen wurde (d. h. es handelte sich um eine Impression und keinen Klick).
* Halo-Klick-Attribuierung
  * Eine Bestellung wurde einer Anzeige zugeschrieben, die für ein Produkt geklickt wurde, das derselben Halo-Ebene in derselben Session-ID angehört. Die häufigste Halo-Ebene ist Marke (d. h. das Produkt der Anzeige und das Produkt der Bestellung sind unterschiedlich, gehören aber derselben Marke an). Je nach Implementierung sind andere Halo-Typen möglich. Beispielsweise kann der Halo spezifischer sein und verlangen, dass die Anzeige und die Bestellung für Produkte gelten, die zusätzlich zu einer gemeinsamen Marke eine gemeinsame Kategorie haben. Die pro Produkt im Katalog festgelegte Händler-Taxonomie wird verwendet, um diese zusätzliche Detailebene im Halo zu definieren.

Version: 1ace13f


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.citrusad.com/retail-media-interface/integration/de/reporting/reporting-faq.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
