Saltar al contenido
Roman Prokashev.

Este es un archivo del blog Last Click City, publicado en lastclick.city entre 2019 y 2024.

2 min de lecturaPor Sergey Matrosov

BigQuery: totales por día y totales por intervalo de fechas en una sola tabla.

Imagina que quieres conocer el número de conversiones de un intervalo de fechas concreto en los datos que llegan a BigQuery: el total de cada día y también el total de todos los días. Puedes hacerlo con dos consultas que den dos tablas, o con una sola consulta que dé una tabla. La primera solución no resulta muy cómoda (tienes que ir saltando de una pestaña a otra, etc.), pero se hace rapidísimo. La segunda suena también bastante fácil, aunque tiene algo de truco; eso sí, el resultado es una única tabla.

Nuestras conversiones son «Registrations», así que nuestra tabla de datos entrantes tiene este aspecto:

DateEvent
2019-01-01Registration
2019-01-01Activation
2019-01-01Registration
......
2019-01-02Registration
......

Y así sucesivamente.

Obtener los datos solo por día es facilísimo:

SELECT
  date,
  COUNT(event) AS Conversions
FROM
  `your-project.your_dataset.table`
WHERE
  event = 'Registration'
  AND date BETWEEN ‘2019-01-01’
  AND ‘2019-01-05’
GROUP BY
  date
DateConversions
2019-01-0110
2019-01-025
2019-01-036
2019-01-041
2019-01-052

Después, para el total general (10 + 5 + 6 + 1 + 2 = 24 en nuestro caso), puede que pienses que basta con una línea más en el SELECT, pero no. Usar «Group By» solo contará los eventos de cada día.

Para conseguir tu objetivo tienes que usar «CROSS JOIN» con esta consulta:

SELECT
  COUNT(event) AS Total,
FROM
  `your-project.your_dataset.table`
WHERE
  event = 'Registration'
  AND date BETWEEN ‘2019-01-01’
  AND ‘2019-01-05’

Así que la consulta completa será:

SELECT
  t1.date AS Date,
  t1.Conversions AS Conversions,
  t2.Total AS Grand_Total
FROM (
  SELECT
  date,
  COUNT(event) AS Conversions
FROM
  `your-project.your_dataset.table`
WHERE
  event = 'Registration'
  AND date BETWEEN ‘2019-01-01’
  AND ‘2019-01-05’) AS t1
CROSS JOIN (
SELECT
  COUNT(event) AS Total,
FROM
  `your-project.your_dataset.table`
WHERE
  event = 'Registration'
  AND date BETWEEN ‘2019-01-01’
  AND ‘2019-01-05’) AS t2
ORDER BY
  Date ASC

Y el resultado será el esperado:

DateConversionsGrand_Total
2019-01-011024
2019-01-02524
2019-01-03624
2019-01-04124
2019-01-05224

Efectivamente, el total aparecerá duplicado en cada fila. Pero el resultado es más claro y más cómodo, sobre todo si solo se va a usar dentro de la interfaz de BigQuery.

Traducido del inglés con Claude.

← Volver a Last Click City