Лучший способ в вашем случае - удалить перекрестные объединения и использовать вместо этого подвыборы:
SELECT
PARSE_DATE('%Y%m%d', t.date) AS Date
,(SELECT value FROM UNNEST(customDimensions) WHERE index=1) Orig
,COUNT(DISTINCT(fullvisitorid)) AS User
,SUM( totals.newVisits ) AS New_Visitors
FROM
`table` t
GROUP BY Orig, Date
Если у вас есть измерение в области действия и вам действительно нужно сгладить таблицу, вам нужно создать идентификатор сеанса, который вы можете посчитать отдельно. Это связано с тем, что вы повторяете все области сессий в области охвата, применяя перекрестное соединение:
SELECT
PARSE_DATE('%Y%m%d', t.date) AS Date
,(SELECT value FROM h.customDimensions WHERE index=2) justAHitCd
,h.page.pagePathLevel1
,COUNT(DISTINCT(fullvisitorid)) AS User
-- create session id and count distinct
,COUNT(DISTINCT CONCAT(fullvisitorid, CAST(visitstarttime AS STRING)) ) AS all_sessions
-- only count distinct session id of sessions where totals.newVisits = 1
,COUNT(DISTINCT
IF(totals.newVisits=1,
CONCAT(fullvisitorid, CAST(visitstarttime AS STRING)),
NULL )
) AS New_Visitors
FROM
-- flatten table to hit scope (comma means cross-join in stnd sql)
`table` t, t.hits h
GROUP BY 1,2,3
Таким образом, в случае новых посетителей я предоставляю идентификатор сеанса только если totals.newVisits = 1, иначе оператор if предоставляет NULL
, который не может быть подсчитан.
Если у вас есть что-то похожее в области продукта, вам нужно создать идентификатор, учитывающий сеанс и ударить.
Например. Подсчет страниц для товараСку:
SELECT
PARSE_DATE('%Y%m%d', t.date) AS Date
,(SELECT value FROM h.customDimensions WHERE index=2) justAHitCd
,p.productSku
,COUNT(DISTINCT fullvisitorid) AS users
,COUNT(DISTINCT CONCAT(fullvisitorid, CAST(visitstarttime AS STRING))) AS sessions
,COUNT(DISTINCT
IF(h.type='PAGE',
CONCAT(fullvisitorid, cast(visitstarttime AS STRING),CAST(hitNumber AS STRING)),
NULL)
) as pageviews
,COUNT(1) AS products
FROM
`table` t, t.hits h LEFT JOIN h.product p
GROUP BY 1,2,3
Обратите внимание, что я остался присоединиться к массиву продуктов. Поскольку иногда оно пустое, перекрестное соединение уничтожит всю информацию о попаданиях: перекрестное объединение с пустой таблицей приводит к пустой таблице.
Надеюсь, это поможет!