Skip to content

Commit 634a896

Browse files
Explicit Item and Ecommerce field selection (#283)
* item and ecommerce field fix test concept * add missing parameters and readme update * restore missing fields * Will move the readme changes to the release notes and will make a new 5.1 release --------- Co-authored-by: Adam Ribaudo <[email protected]>
1 parent 9dfdbd4 commit 634a896

File tree

2 files changed

+143
-91
lines changed

2 files changed

+143
-91
lines changed

dbt_project.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: 'ga4'
2-
version: '5.0.0'
2+
version: '5.1.0'
33
config-version: 2
44
model-paths: ["models"]
55
analysis-paths: ["analyses"]

macros/base_select.sql

+142-90
Original file line numberDiff line numberDiff line change
@@ -3,107 +3,159 @@
33
{% endmacro %}
44

55
{% macro default__base_select_source() %}
6-
parse_date('%Y%m%d',event_date) as event_date_dt,
7-
event_timestamp,
8-
event_name,
9-
event_params,
10-
event_previous_timestamp,
11-
event_value_in_usd,
12-
event_bundle_sequence_id,
13-
event_server_timestamp_offset,
14-
user_id,
15-
user_pseudo_id,
16-
privacy_info,
17-
user_properties,
18-
user_first_touch_timestamp,
19-
user_ltv,
20-
device,
21-
geo,
22-
app_info,
23-
traffic_source,
24-
stream_id,
25-
platform,
26-
ecommerce,
27-
items,
6+
parse_date('%Y%m%d',event_date) as event_date_dt
7+
, event_timestamp
8+
, event_name
9+
, event_params
10+
, event_previous_timestamp
11+
, event_value_in_usd
12+
, event_bundle_sequence_id
13+
, event_server_timestamp_offset
14+
, user_id
15+
, user_pseudo_id
16+
, privacy_info
17+
, user_properties
18+
, user_first_touch_timestamp
19+
, user_ltv
20+
, device
21+
, geo
22+
, app_info
23+
, traffic_source
24+
, stream_id
25+
, platform
26+
, ecommerce.total_item_quantity
27+
, ecommerce.purchase_revenue_in_usd
28+
, ecommerce.purchase_revenue
29+
, ecommerce.refund_value_in_usd
30+
, ecommerce.refund_value
31+
, ecommerce.shipping_value_in_usd
32+
, ecommerce.shipping_value
33+
, ecommerce.tax_value_in_usd
34+
, ecommerce.tax_value
35+
, ecommerce.unique_items
36+
, ecommerce.transaction_id
37+
, items
2838
{% endmacro %}
2939

3040
{% macro base_select_renamed() %}
3141
{{ return(adapter.dispatch('base_select_renamed', 'ga4')()) }}
3242
{% endmacro %}
3343

3444
{% macro default__base_select_renamed() %}
35-
event_date_dt,
36-
event_timestamp,
37-
lower(replace(trim(event_name), " ", "_")) as event_name, -- Clean up all event names to be snake cased
38-
event_params,
39-
event_previous_timestamp,
40-
event_value_in_usd,
41-
event_bundle_sequence_id,
42-
event_server_timestamp_offset,
43-
user_id,
44-
user_pseudo_id,
45-
privacy_info.analytics_storage as privacy_info_analytics_storage,
46-
privacy_info.ads_storage as privacy_info_ads_storage,
47-
privacy_info.uses_transient_token as privacy_info_uses_transient_token,
48-
user_properties,
49-
user_first_touch_timestamp,
50-
user_ltv.revenue as user_ltv_revenue,
51-
user_ltv.currency as user_ltv_currency,
52-
device.category as device_category,
53-
device.mobile_brand_name as device_mobile_brand_name,
54-
device.mobile_model_name as device_mobile_model_name,
55-
device.mobile_marketing_name as device_mobile_marketing_name,
56-
device.mobile_os_hardware_model as device_mobile_os_hardware_model,
57-
device.operating_system as device_operating_system,
58-
device.operating_system_version as device_operating_system_version,
59-
device.vendor_id as device_vendor_id,
60-
device.advertising_id as device_advertising_id,
61-
device.language as device_language,
62-
device.is_limited_ad_tracking as device_is_limited_ad_tracking,
63-
device.time_zone_offset_seconds as device_time_zone_offset_seconds,
64-
device.browser as device_browser,
65-
device.browser_version as device_browser_version,
66-
device.web_info.browser as device_web_info_browser,
67-
device.web_info.browser_version as device_web_info_browser_version,
68-
device.web_info.hostname as device_web_info_hostname,
69-
geo.continent as geo_continent,
70-
geo.country as geo_country,
71-
geo.region as geo_region,
72-
geo.city as geo_city,
73-
geo.sub_continent as geo_sub_continent,
74-
geo.metro as geo_metro,
75-
app_info.id as app_info_id,
76-
app_info.version as app_info_version,
77-
app_info.install_store as app_info_install_store,
78-
app_info.firebase_app_id as app_info_firebase_app_id,
79-
app_info.install_source as app_info_install_source,
80-
traffic_source.name as user_campaign,
81-
traffic_source.medium as user_medium,
82-
traffic_source.source as user_source,
83-
stream_id,
84-
platform,
85-
ecommerce,
86-
items,
87-
{{ ga4.unnest_key('event_params', 'ga_session_id', 'int_value', 'session_id') }},
88-
{{ ga4.unnest_key('event_params', 'page_location') }},
89-
{{ ga4.unnest_key('event_params', 'ga_session_number', 'int_value', 'session_number') }},
90-
COALESCE(
45+
event_date_dt
46+
, event_timestamp
47+
, lower(replace(trim(event_name), " ", "_")) as event_name -- Clean up all event names to be snake cased
48+
, event_params
49+
, event_previous_timestamp
50+
, event_value_in_usd
51+
, event_bundle_sequence_id
52+
, event_server_timestamp_offset
53+
, user_id
54+
, user_pseudo_id
55+
, privacy_info.analytics_storage as privacy_info_analytics_storage
56+
, privacy_info.ads_storage as privacy_info_ads_storage
57+
, privacy_info.uses_transient_token as privacy_info_uses_transient_token
58+
, user_properties
59+
, user_first_touch_timestamp
60+
, user_ltv.revenue as user_ltv_revenue
61+
, user_ltv.currency as user_ltv_currency
62+
, device.category as device_category
63+
, device.mobile_brand_name as device_mobile_brand_name
64+
, device.mobile_model_name as device_mobile_model_name
65+
, device.mobile_marketing_name as device_mobile_marketing_name
66+
, device.mobile_os_hardware_model as device_mobile_os_hardware_model
67+
, device.operating_system as device_operating_system
68+
, device.operating_system_version as device_operating_system_version
69+
, device.vendor_id as device_vendor_id
70+
, device.advertising_id as device_advertising_id
71+
, device.language as device_language
72+
, device.is_limited_ad_tracking as device_is_limited_ad_tracking
73+
, device.time_zone_offset_seconds as device_time_zone_offset_seconds
74+
, device.browser as device_browser
75+
, device.browser_version as device_browser_version
76+
, device.web_info.browser as device_web_info_browser
77+
, device.web_info.browser_version as device_web_info_browser_version
78+
, device.web_info.hostname as device_web_info_hostname
79+
, geo.continent as geo_continent
80+
, geo.country as geo_country
81+
, geo.region as geo_region
82+
, geo.city as geo_city
83+
, geo.sub_continent as geo_sub_continent
84+
, geo.metro as geo_metro
85+
, app_info.id as app_info_id
86+
, app_info.version as app_info_version
87+
, app_info.install_store as app_info_install_store
88+
, app_info.firebase_app_id as app_info_firebase_app_id
89+
, app_info.install_source as app_info_install_source
90+
, traffic_source.name as user_campaign
91+
, traffic_source.medium as user_medium
92+
, traffic_source.source as user_source
93+
, stream_id
94+
, platform
95+
, struct(
96+
total_item_quantity
97+
, purchase_revenue_in_usd
98+
, purchase_revenue
99+
, refund_value_in_usd
100+
, refund_value
101+
, shipping_value_in_usd
102+
, shipping_value
103+
, tax_value_in_usd
104+
, tax_value
105+
, unique_items
106+
, transaction_id
107+
) as ecommerce
108+
, (select
109+
array_agg(struct(
110+
unnested_items.item_id
111+
, unnested_items.item_name
112+
, unnested_items.item_brand
113+
, unnested_items.item_variant
114+
, unnested_items.item_category
115+
, unnested_items.item_category2
116+
, unnested_items.item_category3
117+
, unnested_items.item_category4
118+
, unnested_items.item_category5
119+
, unnested_items.price_in_usd
120+
, unnested_items.price
121+
, unnested_items.quantity
122+
, unnested_items.item_revenue_in_usd
123+
, unnested_items.item_revenue
124+
, unnested_items.item_refund_in_usd
125+
, unnested_items.item_refund
126+
, unnested_items.coupon
127+
, unnested_items.affiliation
128+
, unnested_items.location_id
129+
, unnested_items.item_list_id
130+
, unnested_items.item_list_name
131+
, unnested_items.item_list_index
132+
, unnested_items.promotion_id
133+
, unnested_items.promotion_name
134+
, unnested_items.creative_name
135+
, unnested_items.creative_slot
136+
, unnested_items.item_params
137+
)) from unnest(items) as unnested_items
138+
) items
139+
, {{ ga4.unnest_key('event_params', 'ga_session_id', 'int_value', 'session_id') }}
140+
, {{ ga4.unnest_key('event_params', 'page_location') }}
141+
, {{ ga4.unnest_key('event_params', 'ga_session_number', 'int_value', 'session_number') }}
142+
, COALESCE(
91143
(SELECT value.int_value FROM unnest(event_params) WHERE key = "session_engaged"),
92144
(CASE WHEN (SELECT value.string_value FROM unnest(event_params) WHERE key = "session_engaged") = "1" THEN 1 END)
93-
) as session_engaged,
94-
{{ ga4.unnest_key('event_params', 'engagement_time_msec', 'int_value') }},
95-
{{ ga4.unnest_key('event_params', 'page_title') }},
96-
{{ ga4.unnest_key('event_params', 'page_referrer') }},
97-
{{ ga4.unnest_key('event_params', 'source', 'lower_string_value', 'event_source') }},
98-
{{ ga4.unnest_key('event_params', 'medium', 'lower_string_value', 'event_medium') }},
99-
{{ ga4.unnest_key('event_params', 'campaign', 'lower_string_value', 'event_campaign') }},
100-
{{ ga4.unnest_key('event_params', 'content', 'lower_string_value', 'event_content') }},
101-
{{ ga4.unnest_key('event_params', 'term', 'lower_string_value', 'event_term') }},
102-
CASE
145+
) as session_engaged
146+
, {{ ga4.unnest_key('event_params', 'engagement_time_msec', 'int_value') }}
147+
, {{ ga4.unnest_key('event_params', 'page_title') }}
148+
, {{ ga4.unnest_key('event_params', 'page_referrer') }}
149+
, {{ ga4.unnest_key('event_params', 'source', 'lower_string_value', 'event_source') }}
150+
, {{ ga4.unnest_key('event_params', 'medium', 'lower_string_value', 'event_medium') }}
151+
, {{ ga4.unnest_key('event_params', 'campaign', 'lower_string_value', 'event_campaign') }}
152+
, {{ ga4.unnest_key('event_params', 'content', 'lower_string_value', 'event_content') }}
153+
, {{ ga4.unnest_key('event_params', 'term', 'lower_string_value', 'event_term') }}
154+
, CASE
103155
WHEN event_name = 'page_view' THEN 1
104156
ELSE 0
105-
END AS is_page_view,
106-
CASE
157+
END AS is_page_view
158+
, CASE
107159
WHEN event_name = 'purchase' THEN 1
108160
ELSE 0
109161
END AS is_purchase

0 commit comments

Comments
 (0)