Использование операторов IF с полями NOT в GROUP BY - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь создать таблицу с одной строкой на посещение моего веб-сайта, а затем столбцы, которые показывают 0 или 1 в зависимости от того, выполнил ли пользователь определенные действия.

Чтобы создать эти столбцы, яЯ использовал операторы IF, но это означало, что мне пришлось добавить поля, на которые есть ссылки в инструкциях IF, в мой список GROUP BY, что, в свою очередь, означает, что у меня теперь есть несколько строк за посещение, как показано ниже:

enter image description here

Как я могу настроить свой код так, чтобы у меня была только одна строка на visit_ref, показывающая все взаимодействия в этом сеансе?

Вот мойкод:

SELECT CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING)) AS visit_ref,
customDimension.value AS UserID,
# Event actions
IF(hits.eventInfo.eventAction LIKE "Basket Icon Click",1,0) AS basket_icon_click,
IF(hits.eventInfo.eventAction LIKE "Add to Basket PLP",1,0) AS basket_add_plp,
# Event labels
IF(hits.eventInfo.eventLabel LIKE "Close Mini Basket",1,0) AS closed_minibasket_click,
IF(hits.eventInfo.eventLabel LIKE "%Delivery",1,0) AS checked_delivery_pdp,
IF(hits.eventInfo.eventLabel LIKE "%Returns",1,0) AS checked_returns_pdp,
# Page interactions
IF(hits.page.pagepath LIKE "%/Account/SignIn%",1,0) AS sign_in,
# Device category
IF(device.deviceCategory LIKE "mobile",1,0) AS device_mobile,
IF(device.deviceCategory LIKE "desktop",1,0) AS device_computer,
IF(device.deviceCategory LIKE "tablet",1,0) AS device_tablet,

IF(COUNT(DISTINCT hits.transaction.transactionid)>0,1,0) AS ordered
    FROM `PROJECT.DATASET.ga_sessions_20*` AS t
      CROSS JOIN UNNEST(hits) AS hits
      CROSS JOIN UNNEST(t.customdimensions) AS customDimension
    WHERE parse_date('%y%m%d', _table_suffix) between 
    DATE_sub(current_date(), interval 1 day) and
    DATE_sub(current_date(), interval 1 day)
    AND customDimension.index = 2
    GROUP BY visit_ref, UserID, device.deviceCategory, hits.eventInfo.eventAction, hits.eventInfo.eventCategory, hits.eventInfo.eventLabel, hits.page.pagepath, geoNetwork.country

1 Ответ

0 голосов
/ 30 мая 2018

Использовать условную агрегацию.,,с case не if():

SELECT CONCAT(CAST(fullVisitorId AS STRING), CAST(visitId AS STRING)) AS visit_ref,
        customDimension.value AS UserID,
# Event actions
        max(case when hits.eventInfo.eventAction LIKE 'Basket Icon Click' then 1 else 0 end) AS basket_icon_click,
        max((case when hits.eventInfo.eventAction LIKE 'Add to Basket PLP' then 1 else 0 end) AS basket_add_plp,
        . . .
from . . .
group by visit_ref, user_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...