( websiteId: string, filters: QueryFilters, )
| 142 | } |
| 143 | |
| 144 | async function clickhouseQuery( |
| 145 | websiteId: string, |
| 146 | filters: QueryFilters, |
| 147 | ): Promise<ChannelExpandedMetricsData[]> { |
| 148 | const { rawQuery, parseFilters } = clickhouse; |
| 149 | const { queryParams, filterQuery, cohortQuery, excludeBounceQuery } = parseFilters({ |
| 150 | ...filters, |
| 151 | websiteId, |
| 152 | }); |
| 153 | |
| 154 | return rawQuery( |
| 155 | ` |
| 156 | select |
| 157 | name, |
| 158 | sum(t.c) as "pageviews", |
| 159 | uniq(t.session_id) as "visitors", |
| 160 | uniq(t.visit_id) as "visits", |
| 161 | sum(if(t.c = 1, 1, 0)) as "bounces", |
| 162 | sum(max_time-min_time) as "totaltime" |
| 163 | from ( |
| 164 | select |
| 165 | session_id, |
| 166 | visit_id, |
| 167 | coalesce(nullIf(argMin(name, tuple(if(name != '', 0, 1), created_at, event_id)), ''), 'direct') as name, |
| 168 | count(*) c, |
| 169 | min(created_at) min_time, |
| 170 | max(created_at) max_time |
| 171 | from ( |
| 172 | select |
| 173 | case when multiSearchAny(lower(utm_medium), ['cp', 'ppc', 'retargeting', 'paid']) != 0 then 'paid' else 'organic' end prefix, |
| 174 | case |
| 175 | when referrer_domain = '' and url_query = '' then 'direct' |
| 176 | when multiSearchAny(lower(url_query), [${toClickHouseStringArray( |
| 177 | PAID_AD_PARAMS, |
| 178 | )}]) != 0 then 'paidAds' |
| 179 | when multiSearchAny(lower(utm_medium), ['referral', 'app','link']) != 0 then 'referral' |
| 180 | when position(lower(utm_medium), 'affiliate') > 0 then 'affiliate' |
| 181 | when position(lower(utm_medium), 'sms') > 0 or position(lower(utm_source), 'sms') > 0 then 'sms' |
| 182 | when multiSearchAny(lower(referrer_domain), [${toClickHouseStringArray( |
| 183 | LLM_DOMAINS, |
| 184 | )}]) != 0 then 'llm' |
| 185 | when multiSearchAny(lower(referrer_domain), [${toClickHouseStringArray( |
| 186 | SEARCH_DOMAINS, |
| 187 | )}]) != 0 or position(lower(utm_medium), 'organic') > 0 then concat(prefix, 'Search') |
| 188 | when multiSearchAny(lower(referrer_domain), [${toClickHouseStringArray( |
| 189 | SOCIAL_DOMAINS, |
| 190 | )}]) != 0 then concat(prefix, 'Social') |
| 191 | when multiSearchAny(lower(referrer_domain), [${toClickHouseStringArray( |
| 192 | EMAIL_DOMAINS, |
| 193 | )}]) != 0 or position(lower(utm_medium), 'mail') > 0 then 'email' |
| 194 | when multiSearchAny(lower(referrer_domain), [${toClickHouseStringArray( |
| 195 | SHOPPING_DOMAINS, |
| 196 | )}]) != 0 or position(lower(utm_medium), 'shop') > 0 then concat(prefix, 'Shopping') |
| 197 | when multiSearchAny(lower(referrer_domain), [${toClickHouseStringArray( |
| 198 | VIDEO_DOMAINS, |
| 199 | )}]) != 0 or position(lower(utm_medium), 'video') > 0 then concat(prefix, 'Video') |
| 200 | when referrer_domain != hostname and referrer_domain != '' then 'referral' |
| 201 | else '' end AS "name", |
no test coverage detected