> 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/fr/reporting/reporting-faq.md).

# Foire aux questions

### L'API Reporting est-elle sécurisée ?

Toutes les données stockées dans BigQuery sont chiffrées au repos et en transit. Cela signifie que lorsque les données sont stockées sur les serveurs de Google et lorsqu'elles sont transmises entre ces serveurs et le client, elles sont protégées par un chiffrement fort.

De plus, BigQuery intègre des contrôles d'accès qui vous permettent de restreindre l'accès à vos données en fonction des rôles et des autorisations des utilisateurs. Cela signifie que nous spécifions exactement qui a accès à vos données et quelles actions sont autorisées.

BigQuery prend également en charge l'authentification et l'autorisation via des mécanismes standards tels que OAuth 2.0 et les clés API.

L'infrastructure de Google est conçue pour protéger contre les menaces courantes telles que les attaques par déni de service, les violations de données et les accès non autorisés. Cela est réalisé à l'aide de diverses mesures de sécurité telles que des pare-feu, des systèmes de détection d'intrusion et des audits de sécurité réguliers. L'API BigQuery est conçue dans un souci de sécurité et emploie une gamme de mesures pour garantir que vos données sont protégées à tout moment.

### À quelle fréquence les données sont-elles mises à jour ?

Quotidiennement. La mise à jour commence à minuit UTC+0 avec un délai de mise à jour maximal de 12 heures. La mise à jour couvre toutes les données reçues jusqu'à minuit (UTC+0) la veille.

### Jusqu'à quand remontent les données historiques ?

Toutes les données historiques approuvées pour une organisation donnée seront disponibles.

### Si je suis un utilisateur Direct Access, comment me connecter ?

Étant déjà dans GCP, cela se fera de manière fluide. Connectez-vous simplement et tentez d'interroger les tables pertinentes via l'interface utilisateur ou l'API.

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

#### J'obtiens une erreur « User does not have bigquery.jobs.create permission in project » – que fais-je de mal ?

Pour les comptes que vous nous avez fournis, Epsilon Retail Media a accordé des privilèges de lecteur BigQuery aux jeux de données pertinents. Cela vous permettra de lire les tables qu'ils contiennent. Dans votre projet, plusieurs étapes sont nécessaires pour pouvoir interroger ces tables distantes.

Posons les hypothèses suivantes :

* Votre projet = « client-project-123456 »
* Votre utilisateur = <client-user@client-project-123456.iam.gserviceaccount.com>
* Epsilon Retail Media jeu de données : « insight-platform-external-iam.client\_insight\_reporting »

Vous devez :

1. Accorder à <client-user@client-project.iam-123456.gserviceaccount.com> la permission bigquery.jobs.create au sein du projet client-project-123456 (et non le projet Epsilon Retail Media ). Vous pouvez le faire en attribuant le rôle BigQuery Job User.
2. Lors de l'exécution d'une requête, vous devez exécuter la requête au sein de votre projet (car vous ne disposez que des autorisations pour lire le jeu de données au sein du projet Epsilon Retail Media , et non pour y exécuter des requêtes). Voici comment cela peut se passer à l'aide d'un exemple simple de commande cloud shell (exécutée en tant que <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;'
```

Notez que le projet client est configuré sur votre projet, et non sur insight-platform-external-iam.

Une approche similaire doit être adoptée avec tous les autres outils utilisés. Veuillez vous référer à la documentation des outils concernés pour plus d'informations ainsi qu'à la documentation en ligne de GCP pour obtenir des conseils !

#### Le Epsilon Retail Media les données ne sont pas dans mon emplacement, comment puis-je importer les données dans mon emplacement ?

Il existe de nombreuses possibilités, mais il est facile de simplement créer des jeux de données dans le même emplacement que le nôtre, puis d'effectuer des transformations, des requêtes, etc., dans des tables au sein de ces jeux de données, puis de copier cela vers votre propre emplacement préféré.

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

Il existe de nombreuses façons de copier entre des emplacements à l'aide de l'interface utilisateur, de l'outil de ligne de commande BQ et de l'API elle-même. Pour plus d'informations, reportez-vous à ces pages de documentation Google Cloud :

* [Manage datasets | BigQuery](https://cloud.google.com/bigquery/docs/managing-datasets)
* [Référence de l'outil en ligne de commande bq](https://cloud.google.com/bigquery/docs/bq-command-line-tool)
* [Copier une table à source unique](https://cloud.google.com/bigquery/docs/copying-datasets)

### Si je suis un utilisateur API non-GCP, comment me connecter ?

Epsilon Retail Media vous fournira les identifiants pertinents dans un fichier JSON que vous pourrez intégrer dans votre mécanisme d'authentification.

### Puis-je déboguer des requêtes en utilisant uniquement l'API Reporting (et non l'interface utilisateur de BigQuery) ?

Oui, l'API BigQuery renverra un code indiquant s'il y a eu un problème et des messages d'erreur seront également disponibles.

### Puis-je estimer le coût d'une requête ?

Oui, l'API dispose d'un mécanisme permettant d'obtenir une estimation en octets de ce que la requête analysera si elle est exécutée. Vous pouvez utiliser cette estimation multipliée par la fréquence à laquelle vous appelez la requête pour comprendre à quel point vous vous rapprocherez du quota.

Plus d'informations peuvent être trouvées dans la documentation GCP.

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

### Que se passe-t-il si je dépasse la limite de quota ?

Veuillez vous référer à votre contrat avec Epsilon Retail Media pour comprendre quel est votre quota. S'il n'est pas spécifiquement défini, il sera par défaut de 10 To d'analyses de données de requête par mois.

Votre contrat peut également prévoir un nombre maximum d'appels d'API par jour. S'il n'est pas spécifiquement défini, il sera par défaut de 100 appels d'API par jour.

Dans le cas où vous dépasseriez votre quota (qu'il s'agisse de l'analyse de données ou du nombre d'appels), nous vous contacterons pour comprendre vos cas d'utilisation. Des frais de dépassement peuvent s'appliquer selon votre contrat.

En cas d'utilisation abusive majeure en dehors des termes de votre contrat (ou des limites par défaut), nous nous réservons le droit de suspendre l'accès.

### Quel est un exemple d'utilisation de l'API Reporting ?

Vous trouverez ci-dessous quelques exemples utilisant des méthodes courantes.

#### Google SDK pour Python

Cet exemple va :

1. Se connecter à BigQuery
2. Exécuter la requête
3. Acheminer le résultat vers un fichier csv

```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")
```

D'autres méthodes sont disponibles pour estimer les octets analysés, etc. avant d'exécuter la requête.

Veuillez vous référer à la documentation BigQuery

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

Si vous n'êtes pas dans GCP, vous pouvez référencer un fichier d'identifiants JSON via une variable d'environnement.

#### API générique pour 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()
```

### Que faire si je suis dans AWS etc. et non dans Google Cloud, puis-je toujours m'authentifier et utiliser l'API ?

Oui, cela fonctionnera. Nous fournirons des identifiants de compte de service et vous pourrez les référencer dans votre application. Voici un exemple.

```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}
# ...
```

### Comment puis-je déterminer quel est l'emplacement de chaque jeu de données partagé avec moi ?

Cet appel API vous indiquera dans quel emplacement se trouve chaque jeu de données.

`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"
    }
  ]
}
```

### Des conseils pour les bonnes pratiques ?

De manière générale, si vous prévoyez d'être un grand utilisateur des données, en particulier si vous avez accès aux données non agrégées (requêtes/annonces réalisées/commandes/attribution enrichie, etc.), il est préférable de copier (stager) les tables dans votre propre entrepôt de données, PUIS d'implémenter des requêtes pour la logique métier requise sur ces copies.

Les utilisateurs plus occasionnels peuvent simplement choisir de interroger les tables directement pour des résultats spécifiques.

Il est important de rester en dessous du quota autorisé pour garantir un bon fonctionnement.

Notez également que chaque requête peut télécharger 1 Go maximum, sinon un message d'erreur sera reçu. Dans le cas où un très grand téléchargement est nécessaire, exécutez plutôt plusieurs requêtes plus petites (par exemple, un sous-ensemble de données par jour ou par fournisseur, etc.).

### Que faire si j'ai besoin d'aide pour rédiger des instructions SQL appropriées ?

Ouvrez un ticket en spécifiant la requête que vous avez tentée et nous pourrons vous aider à la réviser - nous vous reviendrons avec les commentaires que nous pourrions avoir.

### Des conseils pour utiliser le package Pandas ?

Pandas est l'un des outils d'analyse les plus populaires. Pour le faire fonctionner, les dépendances pandas-gbq et pydata-google-auth doivent être installées.

L'extrait ci-dessous est un exemple fonctionnel de la façon de lire des données à partir d'une table BigQuery.

```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
)
```

Vous trouverez plus d'informations sur la fonction Pandas [ici](https://pandas.pydata.org/docs/reference/api/pandas.read_gbq.html).

### Des conseils pour utiliser le package PySpark ?

En supposant que vous disposiez d'un environnement PySpark fonctionnel, vous devez fournir le fichier jar correct pour le connecteur BigQuery adapté à votre version de PySpark. Par exemple, PySpark 3.2.\* nécessite spark-3.2-bigquery-0.30.0.jar. La liste des fichiers jar ainsi que des extraits de code pratiques et des paramètres sont disponibles [ici](https://github.com/GoogleCloudDataproc/spark-bigquery-connector).

L'extrait de code ci-dessous fournit un exemple de la façon d'exécuter une requête.

```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()
```

IMPORTANT : Le paramètre viewsEnabled doit être défini sur true.

Les données dans les vues sont matérialisées dans des tables temporaires avant d'être lues par PySpark, où la permission bigquery.tables.create est requise. Vous devez donc fournir le materializationProject et le materializionDataset pour lesquels l'utilisateur dispose d'un accès en écriture.

### J'obtiens une erreur exigeant un filtre dans la requête ?

Pour une table partitionnée, un filtre est obligatoire, sans lequel un message d'erreur comme celui ci-dessous sera renvoyé :

> Impossible d'interroger la table 'dataset\_id.table\_id' sans un filtre sur la ou les colonnes 'partitioned\_column' pouvant être utilisé pour l'élimination de partition

Pour résoudre l'erreur, ajoutez simplement un filtre raisonnable couvrant la plage cible, par ex.

```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)
```

Pour savoir sur quelle colonne la table est partitionnée (comme ingressed\_at dans l'exemple ci-dessus), reportez-vous à la description de la table donnée.

### Comment puis-je demander un accès ?

#### Procédure

Un ticket doit être ouvert et les critères d'éligibilité doivent être acceptés par écrit.

Nous travaillerons avec le candidat potentiel pour identifier le niveau d'accès et les paramètres de sécurité requis et déterminer les quotas et coûts qui peuvent s'appliquer.

#### Critères d'éligibilité

Un candidat doit se conformer aux critères suivants pour être considéré comme éligible à l'accès à l'API de reporting : -

**Général**

1. Le candidat ne peut demander l'accès qu'aux données pour Epsilon Retail Media les espaces de noms (namespaces) et les équipes dont il est par ailleurs déjà membre, ou auxquels il dispose d'un accès général. Le candidat doit spécifier pour lequel des scénarios suivants il pose sa candidature (et fournir la preuve d'un accès existant) :
   1. Niveau environnement (une implémentation entière de la Epsilon Retail Media plateforme est dédiée au candidat).
   2. Niveau namespace (le candidat a la permission de voir toutes les équipes, tant distributeur que fournisseur, au sein d'un Namespace individuel ou d'une liste de Namespaces).
   3. ID d'équipe distributeur spécifique ou niveau de groupe.
   4. ID d'équipe fournisseur spécifique ou niveau de groupe.
      1. de plus, un Intégrateur peut accéder à un ID d'équipe fournisseur spécifique ou à un niveau de groupe PLUS aux catalogues de produits complets du distributeur lorsque cela a été accepté par un distributeur au cas par cas.
2. Les données de fait transactionnelles ne peuvent être fournies qu'aux candidats éligibles aux critères généraux 1a ou 1b.
3. Les candidats qui ne qualifient pas pour les données de fait transactionnelles se verront accorder un accès aux données de fait pré-agrégées uniquement. Les données seront agrégées en résumés quotidiens (avec UTC+0 comme fuseau horaire d'agrégation).
4. Les candidats éligibles uniquement au critère général 1d ne peuvent pas recevoir de données Ad Request (par opposition aux données Realised Ad qui seront fournies). Les données sur les produits seront fournies pour les produits spécifiques faisant l'objet de publicités dans les Realised Ads par le fournisseur, SAUF pour les intégrateurs qui peuvent recevoir les catalogues de produits du distributeur lorsque cela a été accepté par un distributeur au cas par cas.
5. Les données dimensionnelles sont uniquement garanties d'inclure les versions actuelles des enregistrements en question. Il est attendu que le suivi des modifications historiques soit mis en œuvre par le candidat selon ses besoins.
6. Les données sont mises à jour quotidiennement et seront mises à jour au plus tard à 12:00 UTC+0 pour les données allant jusqu'au jour UTC+0 terminé précédent inclus.
7. Il est entendu que l'accès est de nature lecture seule. L'API ne doit pas être utilisée pour créer des objets dans notre entrepôt de données à quelque fin que ce soit.
8. Tout croisement avec d'autres sources de données doit être effectué dans l'environnement propre du candidat.
9. Le candidat doit disposer d'un SDK (ou équivalent) disponible pour accéder à l'API Google BigQuery.
10. Le candidat possède de bonnes connaissances en SQL.
11. Le candidat sera familiarisé avec les Epsilon Retail Media concepts, et si ce n'est pas le cas, prendra des dispositions pour qu'une formation produit standard soit fournie par l'intermédiaire de son Customer Support Manager ou Technical Account Manager.
12. Sur la base des documents fournis, le candidat est censé développer ses propres solutions. Si un problème est détecté avec un SQL ne se comportant pas comme prévu selon la documentation, un ticket doit être ouvert via les canaux de support habituels. Les informations suivantes doivent être fournies.
    1. Le compte à travers lequel la connexion est établie.
    2. Le SQL exact appelé.
    3. Une description détaillée des messages d'erreur qui surviennent.
13. Si le candidat est un distributeur, il est requis que les impressions/clics/commandes soient fournis à la Epsilon Retail Media plateforme afin qu'une image complète du cycle de vie de l'annonce puisse être établie.
14. De temps à autre, Epsilon Retail Media se réservent le droit de modifier le schéma. Ces modifications impliquent généralement l'ajout de nouvelles colonnes aux tables et vues existantes et seraient rétrocompatibles. Les candidats doivent structurer leur SQL pour nommer les colonnes plutôt que d'utiliser des caractères génériques, etc. Dans le cas où une modification implique la dépréciation d'une colonne ou d'une table, Epsilon Retail Media donnera un préavis d'au moins 12 semaines avant que la modification ne soit mise en œuvre. Les notifications se feront via les communications de version standard adressées aux utilisateurs de la plateforme.

Il n'est pas obligatoire qu'un candidat soit un utilisateur existant de Google Cloud Platform (GCP) ; cependant, d'autres critères s'appliquent selon que le candidat est ou non un utilisateur de GCP.

**Candidat non-GCP**

Sauf accord contraire, Epsilon Retail Media fournira des identifiants pour un compte de service unique au sein de notre environnement au candidat.

Sauf accord contraire, les conditions par défaut suivantes s'appliquent :

1. Un maximum de 100 appels API par jour.
2. Pas plus de 10 To d'analyses de données par mois (remarque : l'API dispose d'un moyen d'estimer la taille de l'analyse de requête avant l'exécution, reportez-vous à la documentation Google [Dry run query | BigQuery | Google Cloud](https://cloud.google.com/bigquery/docs/samples/bigquery-query-dry-run)).
3. Si les critères 1 et/ou 2 du candidat non-GCP sont dépassés, Epsilon Retail Media se réservent le droit de suspendre l'accès à notre seule discrétion.
4. Aucun appel API individuel ne peut télécharger plus de 1 Go de données à la fois.

#### Comment décoder le fichier de compte de service ?

Les identifiants du compte de service vous seront fournis au format encodé en base64 pour une transmission sécurisée. Vous devrez le décoder avant de l'utiliser. Voici des exemples de décodage du fichier :

En utilisant bash :

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

En utilisant 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)
```

Après le décodage, vous aurez un fichier `service-account.json` que vous pourrez utiliser avec les bibliothèques clientes BigQuery comme illustré dans les exemples précédents.

**Candidat GCP**

Sauf accord contraire, le candidat fournira Epsilon Retail Media les détails d'un maximum de 5 comptes GCP afin que nous puissions attribuer l'accès requis.

Notez que le compte doit avoir le rôle d'utilisateur des travaux BigQuery (roles/bigquery.jobUser) attribué.

Les restrictions suivantes s'appliquent :

1. Un maximum de 100 appels API par jour.
2. Si le critère 1 du candidat GCP est dépassé, Epsilon Retail Media se réservent le droit de suspendre l'accès à notre seule discrétion.
3. Aucun appel API individuel ne peut télécharger plus de 1 Go de données.

### Glossaire

#### Environnement

Le nom de l'environnement physique dans lequel la Epsilon Retail Media plateforme est déployée. Chacun héberge un ou plusieurs espaces de noms.

#### Espace de noms

Un regroupement logique de toutes les entités qui font partie d'une mise en œuvre de la Epsilon Retail Media solution. Cela inclut les équipes et tous les objets appartenant aux équipes. En règle générale, un espace de noms peut consister en un distributeur (équipe) et plusieurs fournisseurs (équipes) ainsi que des utilisateurs pour chaque équipe et d'autres configurations connexes (les distributeurs possèdent des catalogues, les fournisseurs configurent des campagnes, etc.). Les équipes (et ce qu'elles possèdent) appartiennent exclusivement à un seul espace de noms (aucune équipe ne peut exister sur plusieurs espaces de noms).

#### Utilisateur

Identifiant unique d'un utilisateur dans le Epsilon Retail Media système. Un seul e-mail peut avoir plusieurs userId. Chaque userId est unique par espace de noms. Chaque utilisateur aura un prénom, un nom, un e-mail et un id. Un utilisateur peut être membre de et accéder à plusieurs équipes dans la Epsilon Retail Media plateforme.

#### Équipe

Une équipe au sein du Epsilon Retail Media système. Peut être un fournisseur (annonceur) ou un distributeur. Les équipes de fournisseurs créeront généralement des campagnes, les distributeurs examinent les campagnes et exécutent des fonctions administratives. Un utilisateur dans le Epsilon Retail Media système peut être membre de plusieurs équipes ou d'une seule. Une équipe aura généralement des utilisateurs, des campagnes et des portefeuilles associés.

#### Fournisseur

Une équipe de fournisseur au sein du Epsilon Retail Media système. Un fournisseur peut typiquement être une société mère de marque ou une série d'équipes par marque individuelle. Les fournisseurs gèrent généralement les campagnes, administrent les soldes des portefeuilles, etc.

#### Distributeur

Une équipe de distributeur au sein du Epsilon Retail Media système. La plupart des espaces de noms n'auront qu'une seule équipe de distributeur. Les distributeurs gèrent généralement les catalogues de produits, examinent les campagnes, etc.

#### Campagne

Une seule campagne unique configurée avec un emplacement et une stratégie de ciblage pour une sélection spécifique de produits. Par exemple, une campagne dans le Epsilon Retail Media système pourrait promouvoir les produits A et B en ciblant les termes de recherche 'chocolat' et 'chocolats' avec une offre maximale de 0,60 $. Une seule équipe a généralement plusieurs campagnes.

#### Catalogue

Un catalogue de produits unique d'un distributeur dans le Epsilon Retail Media système. Il est typique pour un distributeur de ne synchroniser qu'un seul catalogue de produits avec Epsilon Retail Media dans un seul espace de noms. Un catalogue contiendra une liste de tous les produits du catalogue du distributeur, leur nom, leur marque, leurs catégories et d'autres attributs pertinents qui sont ingérés dans le Epsilon Retail Media système.

#### Produit

Un produit unique dans le Epsilon Retail Media système. Un produit aura un code produit unique synchronisé dans le catalogue de produits. Un produit peut avoir des attributs tels que la catégorie, la taxonomie, la marque, etc.

#### Portefeuille

Un portefeuille dans le Epsilon Retail Media système stocke les fonds d'un annonceur afin d'effectuer des paiements (par exemple, payer pour des annonces réalisées). Chaque portefeuille a un code devise unique et ne peut dépenser que dans les catalogues de ce même code devise. Un portefeuille appartient à une équipe. Une équipe peut avoir n'importe quel nombre de portefeuilles. Un portefeuille peut être archivé. L'archivage d'un portefeuille ne fera que l'afficher/le masquer dans la plateforme, un portefeuille archivé peut toujours dépenser des crédits.

#### Livre journal

Un livre journal des événements qui ont entraîné une transaction dans le Epsilon Retail Media système. Il s'agit le plus souvent d'événements publicitaires tels que des impressions ou des clics pour des produits sponsorisés ou des annonces bannières (entraînant un débit). Il peut également s'agir de rechargements et d'ajustements de soldes par un fournisseur (crédits). Chaque événement aura une 'raison' telle que Produits sponsorisés, Annonces bannières, Rechargement.

#### Requête

Une requête faite au Epsilon Retail Media système pour des annonces. Dans la requête, le distributeur spécifie un emplacement ainsi que le contexte tel que celui d'un client sessionId ou des filtres pertinents pour la requête. Selon la requête, Epsilon Retail Media renverra des annonces d'un AdType pertinent (par ex. Catégorie ou Terme de recherche) au distributeur pour qu'il les affiche au client.

#### Annonce (réalisée)

Une annonce est un événement publicitaire unique renvoyé à un distributeur pour être servi à son client. Elle devient une annonce réalisée lorsque le distributeur renvoie la confirmation que l'annonce a fait l'objet d'au moins une impression (confirmation explicite que l'annonce a effectivement été utilisée, c'est-à-dire réalisée). Dans le Epsilon Retail Media système, chaque annonce aura un identifiant realisedad unique qui est une référence pour cet événement unique.

#### Catégorie

Une catégorie est une page sur le site du détaillant faisant partie de la taxonomie de son site web, comme « Boulangerie » ou « Produits laitiers ». Un détaillant demande généralement des annonces sur une page de catégorie et spécifie cet attribut pertinent dans sa demande à Epsilon Retail Media. If Epsilon Retail Media a des campagnes actives et valides pour la catégorie, les annonces seront renvoyées.

#### SearchTerm

Un terme de recherche saisi par un client sur le site web du détaillant. Ce terme de recherche est ensuite envoyé à Epsilon Retail Media pour demander des annonces pertinentes. Si Epsilon Retail Media a des campagnes actives et valides pour le terme de recherche, les annonces seront renvoyées.

#### Commande

Une commande unique dans le système du détaillant synchronisée avec Epsilon Retail Media. Une seule commande peut contenir plusieurs articles de commande (tout comme le panier d'un client peut contenir plusieurs articles). Une fois la commande d'un client terminée, ces données sont envoyées à Epsilon Retail Media pour alimenter l'attribution de Epsilon Retail Media. Le retour sur investissement publicitaire (ROAS) et d'autres KPI importants peuvent ensuite être fournis aux détaillants et aux annonceurs.

#### Attribution

L'attribution est un processus exécuté dans le système Epsilon Retail Media qui attribue les annonces diffusées auprès d'un client à une commande passée. Un parcours client typique serait le suivant : il voit une annonce (impression), clique dessus (clic), l'ajoute à son panier et achète cet article (conversion). La commande est « attribuée » à l'annonce unique sur laquelle le client a cliqué. Pour qu'une commande soit attribuée dans le système Epsilon Retail Media , l'annonce doit avoir fait l'objet d'une interaction (soit vue, soit cliquée selon l'intégration), et le client doit ensuite avoir acheté un article correspondant à l'annonce. Epsilon Retail Media utilisent généralement un «sessionId » pour attribuer les commandes aux annonces, où le détaillant spécifie un « sessionId » dans tous les points de contact pertinents du parcours d'une annonce. C'est ainsi que Epsilon Retail Media est en mesure d'identifier qu'une seule annonce, diffusée auprès d'un seul client, a généré une commande spécifique.

#### Dates

Toutes les données sont converties dans le fuseau horaire UTC+0 si elles sont agrégées.

#### Plafond

Les implémentations de la plateforme Epsilon Retail Media impliquent souvent que le détaillant demande plus d'annonces qu'il n'en sera réalistement jamais affiché (réalisé). Du point de vue de l'analyse, cela peut donner une impression inexacte de la performance réelle de certains métriques. Par exemple, si une demande a été faite pour 20 annonces (AdType=Product), et que la plateforme a renvoyé 2 annonces en réponse, cela représente un « taux de remplissage » de 10 % sur la demande (2 sur 20). Cependant, s'il est entendu qu'en pratique seules 4 annonces sont susceptibles d'être un jour utilisées (réalisées), il serait préférable de l'interpréter comme étant rempli à 50 % (2 sur 4). D'où la notion de plafonnement (capping) dans le reporting. Le plafonnement est défini par détaillant, avec un plafond disponible pour les annonces de produits et un autre pour les annonces de bannières (étant donné que les demandes d'annonces de produits demandent et utilisent généralement beaucoup plus d'annonces que les bannières). En reprenant l'exemple, si le plafond de produit = 4 pour le détaillant, les métriques de la demande s'afficheraient comme suit :- NumAdRequests = 1 NumAdsRequested = 20 CappedNumAdsRequested = 4 NumAdsServed = 2 CappedNumAdsServed = 2 Notez que dans le cas où 5 annonces ont été diffusées (c'est-à-dire que les annonces diffusées ont dépassé le plafond lui-même), les 2 dernières métriques s'afficheraient comme suit :- NumAdsServed = 5 CappedNumAdsServed = 4 (ramené au plafond) Les plafonds ne sont pas obligatoires. Dans le cas où ils ne sont pas spécifiés, les résultats plafonnés et non plafonnés seront identiques.

#### Attribution améliorée

La plateforme Epsilon Retail Media effectue les attributions comme décrit dans la section Attribution (voir ci-dessus). Le sous-système de reporting peut également détecter et signaler d'autres scénarios d'attribution selon le détaillant (attribution améliorée).

Les scénarios sont :

* Attribution View Thru après impression
  * Une commande a été attribuée à une annonce qui a été vue pour le même produit au cours de la même session (c'est-à-dire qu'il s'agissait d'une impression et non d'un clic).
* Attribution au clic Halo
  * Une commande a été attribuée à une annonce qui a été cliquée pour un produit appartenant au même niveau Halo au cours de la même session. Le niveau halo le plus courant est la marque (c'est-à-dire que le produit de l'annonce et le produit de la commande sont différents, mais appartiennent à la même marque). D'autres types de halo sont possibles selon l'implémentation. Par exemple, le halo peut être plus spécifique et exiger que l'annonce et la commande concernent des produits qui ont une catégorie commune en plus d'une marque commune. La taxonomie du détaillant définie par produit dans le catalogue est utilisée pour définir ce niveau de détail supplémentaire dans le Halo.

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/fr/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.
