Come Analizzare i Prodotti Best Seller Utilizzando BigQuery

Vuoi comprendere le tendenze di vendita, le preferenze dei consumatori e l’efficacia delle campagne promozionali? Questo tipo di analisi richiede strumenti potenti e flessibili. BigQuery, con le sue avanzate capacità di elaborazione dei dati, rappresenta la soluzione ideale grazie all’utilizzo dello scripting SQL e delle tabelle temporanee. Ma di cosa si tratta? Scopriamolo!

BigQuery supporta lo scripting SQL ovvero permette di eseguire più istruzioni SQL in un unico lavoro di query. Questa funzionalità è particolarmente utile per compiti di elaborazione dei dati complessi che richiedono passaggi intermedi, logica condizionale o variabili.

A questa funzionalità si aggiungono le tabelle temporanee che in BigQuery rappresentano un ottimo modo per memorizzare i risultati dei passaggi intermedi della tua analisi. Vengono eliminate automaticamente al termine della tua sessione, risparmiandoti il problema della pulizia manuale. Le tabelle temporanee possono velocizzare significativamente il tuo flusso di lavoro, soprattutto quando si lavora con grandi dataset.

Vediamo come utilizzare insieme queste due funzionalità per analizzare i dati di un e-commerce.

Esempio Pratico: Analizzare i Dati di E-Commerce

Supponiamo che tu stia analizzando un dataset di e-commerce per trovare i prodotti più venduti in ogni categoria nell’ultimo mese.

Per fare questo, creeremo una serie di query utilizzando le tabelle temporanee in BigQuery per analizzare i dati di vendita partendo da un dataset che segue lo schema degli eventi di Google Analytics 4 (GA4) con i dati strutturati in array annidati.

Il nostro obiettivo è creare un report di questo tipo:

Leggendo questo output, possiamo facilmente desumere che il prodotto “Meliconi CME ETR120 81,3 cm (32″) Nero” è stato l’articolo più venduto nella categoria “ACCESSORI TV” con un totale di vendite che ammonta a 1362 €. Questa informazione può essere molto utile per analisi di mercato, pianificazione dell’inventario, e per informare decisioni strategiche riguardanti promozioni o scorte di prodotti specifici.

Bello vero? Ma veniamo alla creazione del nostro SQL per BigQuery.

Passaggi dello Script SQL

  1. Estrazione delle Vendite dell’Ultimo Mese
    Creiamo una tabella temporanea per filtrare gli eventi di vendita dell’ultimo mese, estrarre il nome del prodotto, la categoria e il valore delle vendite.
CREATE TEMP TABLE vendite_recenti AS
SELECT
  event_date,
  item.item_name AS product_name,
  (SELECT value.string_value FROM UNNEST(item.item_params) WHERE key = 'item_category_4') AS category,
  (SELECT value.double_value FROM UNNEST(event_params) WHERE key = 'value') AS sales_value
FROM
  `your_project.your_dataset.your_table`,
  UNNEST(items) as item
WHERE
  _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
  AND event_name = 'purchase';

PS. Ricorda di sostituire your_projectyour_dataset e your_table con i tuoi identificativi di progetto, dataset e tabella effettivi. Queste query sono solo punti di partenza e potrebbero necessitare di personalizzazioni per adattarsi alle tue esigenze specifiche e alla struttura dei tuoi dati.

Forse questo punto è quello più complesso! In questo esempio specifico, stiamo estraendo il nome prodotto da item.item_name da un UNNEST di items, il nome categoria da un UNNEST(item.item_params) con key = ‘item_category_4’, e il valore delle vendite da UNNEST(event_params) con key = ‘value’).

Ti consiglio di leggere l’articolo dedicato alla funzione UNNEST.

Tu ovviamente dovrai adeguare la query al tuo caso specifico. Attenzione a non bloccarti in questo punto! 🙁

  1. Aggregazione delle Vendite per Prodotto e Categoria
    Successivamente, aggreghiamo le vendite per prodotto e categoria nella tabella temporanea per ottenere il totale venduto per ogni prodotto in ogni categoria.
CREATE TEMP TABLE vendite_aggregate AS
SELECT
  product_name,
  category,
  ROUND(SUM(sales_value)) AS total_sales
FROM
  vendite_recenti
GROUP BY
  product_name, category;

WITH RankedProducts AS (
  SELECT
    category,
    product_name,
    ROUND(total_sales) as total_sales,
    RANK() OVER(PARTITION BY category ORDER BY total_sales DESC) as rank
  FROM
    vendite_aggregate
)
  1. Identificazione dei Prodotti Più Venduti per Categoria
    Infine, utilizziamo una finestra di funzioni per classificare i prodotti all’interno delle loro categorie basandoci sul totale delle vendite e selezionare i più venduti.
SELECT
  category,
  product_name,
  total_sales
FROM
  RankedProducts
WHERE
  rank = 1;

Riassunto dell’Approccio

  • Aggreghiamo questi dati per prodotto e categoria per calcolare il totale delle vendite.
  • Infine, identifichiamo i prodotti più venduti in ogni categoria.
  • In primo luogo, filtriamo gli eventi di vendita dell’ultimo mese estraendo le informazioni rilevanti come il nome del prodotto, la categoria e il valore delle vendite.

Quello che dovrai fare è mettere insieme queste 3 query in una unica, ed eseguirla!

CREATE TEMP TABLE vendite_recenti AS
SELECT
  event_date,
  item.item_name AS product_name,
  (SELECT value.string_value FROM UNNEST(item.item_params) WHERE key = 'item_category_4') AS category,
  (SELECT value.double_value FROM UNNEST(event_params) WHERE key = 'value') AS sales_value
FROM
  `your_project.your_dataset.your_table`,
  UNNEST(items) as item
WHERE
  _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
  AND event_name = 'purchase';


CREATE TEMP TABLE vendite_aggregate AS
SELECT
  product_name,
  category,
  ROUND(SUM(sales_value)) AS total_sales
FROM
  vendite_recenti
GROUP BY
  product_name, category;

WITH RankedProducts AS (
  SELECT
    category,
    product_name,
    ROUND(total_sales) as total_sales,
    RANK() OVER(PARTITION BY category ORDER BY total_sales DESC) as rank
  FROM
    vendite_aggregate
)

SELECT
  category,
  product_name,
  total_sales
FROM
  RankedProducts
WHERE
  rank = 1;

Questo approccio consente di decomporre il problema complesso in passaggi più gestibili, migliorando la leggibilità del codice e facilitando il debug. Ogni passaggio costruisce il fondamento per il successivo, portando a una soluzione organizzata e efficiente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

error: Questo contenuto è protetto!