Вычисление и отображение гистограммы стоимости жизни клиента с помощью BigQuery и Data Studio - PullRequest
1 голос
/ 03 ноября 2019

Рассмотрим таблицу в Google BigQuery, содержащую записи покупок для клиента. Для простоты давайте сосредоточимся на следующих свойствах: customer_id, product_id, amount

Я хотел бы создать отчет Google Data Studio из вышеуказанного набора данных, показывающий гистограмму значения времени жизни клиента. Срок службы клиента - это сумма amount для любого данного клиента. Гистограмма будет показывать, сколько клиентов попадает в определенный сегмент по их общей сумме - я бы определил диапазоны, например, диапазоны значений 0-10, 10-20, 20-30 и т. Д.

Примерно так: enter image description here

Наконец, я также хотел бы отфильтровать гистограмму по product_id. Когда фильтр активен, гистограмма будет показывать итоги для клиентов, которые - хотя бы один раз - приобрели данный продукт.

На данный момент, я думаю, что это невозможно реализовать в Datastudio, но я надеюсь, чтоЯ не прав.

То, что я до сих пор пробовал:

  1. Отображение среднего значения времени жизни клиента для всего набора данных легко с помощьювычисляемое поле в Datastudio как SUM(amount) / COUNT(customer_id)

  2. Для создания гистограммы я не вижу ничего чисто в Data Studio (на основе вышеуказанного набора данных). Я думаю, что мне нужно создать представление исходной таблицы, состоящей из одной строки для каждого клиента с общей суммой. Назначение корзины может быть реализовано либо в Big Query, либо в Data Studio с помощью CASE ... WHEN.

Однако для последнего шага, то есть создания фильтра продукта, который фильтрует гистограмму для этих клиентовкто купил данный товар, я понятия не имею, как к этому подойти.

Есть мысли?

1 Ответ

2 голосов
/ 03 ноября 2019

Мне удалось сделать воспроизведение, подобное тому, что вы описываете, но это не так просто, поэтому я постараюсь все подробно описать. Основная идея состоит в том, чтобы иметь два источника данных из одной таблицы: один содержит customer_id и product_id, чтобы мы могли отфильтровать его, а другой содержит customer_id и уже рассчитанное поле amount_bucket. Таким образом, мы можем объединить (смешать данные) на customer_id и фильтровать в соответствии с product_id, что не изменит вычислений amount_bucket.

Я использовал следующий скрипт для создания некоторых данных в BigQuery:

CREATE OR REPLACE TABLE data_studio.histogram
(
  customer_id STRING,
  product_id STRING,
  amount INT64
);

INSERT INTO data_studio.histogram (customer_id, product_id, amount)
VALUES ('John', 'Game', 60),
       ('John', 'TV', 800),
       ('John', 'Console', 300),
       ('Paul', 'Sofa', 1200),
       ('George', 'TV', 750),
       ('Ringo', 'Movie', 20),
       ('Ringo', 'Console', 250)
;

Затем я подключаюсь напрямую к таблице BigQuery и получаю следующие поля. Источник данных называется histogram:

enter image description here

Мы добавляем наш второй источник данных (BigQuery), используя пользовательский запрос:

SELECT
  customer_id,
  CASE
    WHEN SUM(amount) < 500 THEN '0-500'
    WHEN SUM(amount) < 1000 THEN '500-1000'
    WHEN SUM(amount) < 1500 THEN '1000-1500'
    ELSE '1500+'
END
  AS amount_bucket
FROM
  data_studio.histogram
GROUP BY
  customer_id

Только с последним мы могли бы сделать базовую гистограмму со следующей конфигурацией:

enter image description here

Размерность amount_bucket, метрика Record count. Я создал пользовательское поле bucket_order, чтобы отсортировать его, так как лексикографически '1000-1500' предшествует '500-1000':

CASE 
  WHEN amount_bucket = '0-500' THEN 0
  WHEN amount_bucket = '500-1000' THEN 1
  WHEN amount_bucket = '1000-1500' THEN 2
  ELSE 3
END

Теперь мы добавляем фильтр product_id сверху и новый график сследующая конфигурация:

enter image description here

Обратите внимание, что метрикой является CTD (счетное различие) customer_id, а источник данных Blended data реализован следующим образом:

enter image description here

Пример, в котором я фильтрую по TV, поэтому отображаются только George и John, но другие продукты по-прежнему учитываются для общей суммырасчет:

enter image description here

Надеюсь, это сработает для вас.

...