SQL
Advertising technology
Audience Gender Distribution
Audience Gender Distribution model for advertising technology.
source-preserved
Blocks
audience_gender_distribution.sql · 43 lines
inferred
-- models/audience_gender_distribution.sql
{{ config(materialized='view') }}
with df_dc_jct as(
select count(distinct df2.adnxsuid) as usercount, dc.geoid, df2.insertionorderid
FROM
analytics_data df2
JOIN
audience_coordinates dc
ON
df2.lat = dc.latitude
AND df2.long = dc.longitude
group by dc.geoid, df2.insertionorderid
HAVING count(distinct df2.adnxsuid) >= 30
)
select
insertionorderid,
key,
ratio_to_report(distribution) over(partition by insertionorderid)
from (
select df_dc_jct.insertionorderid,
da.key,
sum(df_dc_jct.usercount * geo_dist) as distribution
from df_dc_jct
join (
select geoid,
key,
ratio_to_report(value) over(partition by geoid) as geo_dist
from audience_gender
order by geoid, key
) da
on df_dc_jct.geoid = da.geoid
group by df_dc_jct.insertionorderid, da.key
)
# models/schema.yml
version: 2
models:
- name: audience_gender_distribution
columns:
- name: insertionorder_id
- name: gender
Assumptions
- materialized='view' is the default; no persist hint found.
- schema.yml columns come from view dimensions; a primary_key dimension gets unique + not_null tests.
audience_gender_distribution.sql · 31 lines
source-preserved
validation: parses
with df_dc_jct as(
select count(distinct df2.adnxsuid) as usercount, dc.geoid, df2.insertionorderid
FROM
analytics_data df2
JOIN
audience_coordinates dc
ON
df2.lat = dc.latitude
AND df2.long = dc.longitude
group by dc.geoid, df2.insertionorderid
HAVING count(distinct df2.adnxsuid) >= 30
)
select
insertionorderid,
key,
ratio_to_report(distribution) over(partition by insertionorderid)
from (
select df_dc_jct.insertionorderid,
da.key,
sum(df_dc_jct.usercount * geo_dist) as distribution
from df_dc_jct
join (
select geoid,
key,
ratio_to_report(value) over(partition by geoid) as geo_dist
from audience_gender
order by geoid, key
) da
on df_dc_jct.geoid = da.geoid
group by df_dc_jct.insertionorderid, da.key
)
audience_gender_distribution.view.lkml · 48 lines
inferred
view: audience_gender_distribution {
derived_table: {
sql: with df_dc_jct as(
select count(distinct df2.adnxsuid) as usercount, dc.geoid, df2.insertionorderid
FROM
analytics_data df2
JOIN
audience_coordinates dc
ON
df2.lat = dc.latitude
AND df2.long = dc.longitude
group by dc.geoid, df2.insertionorderid
HAVING count(distinct df2.adnxsuid) >= 30
)
select
insertionorderid,
key,
ratio_to_report(distribution) over(partition by insertionorderid)
from (
select df_dc_jct.insertionorderid,
da.key,
sum(df_dc_jct.usercount * geo_dist) as distribution
from df_dc_jct
join (
select geoid,
key,
ratio_to_report(value) over(partition by geoid) as geo_dist
from audience_gender
order by geoid, key
) da
on df_dc_jct.geoid = da.geoid
group by df_dc_jct.insertionorderid, da.key
) ;;
}
dimension: insertionorder_id {
sql: ${TABLE}.insertionorderid ;;
}
dimension: gender {
sql: ${TABLE}.key ;;
}
measure: ratio {
type: sum
sql: 100.0* ${TABLE}.ratio_to_report ;;
}
}
audience_gender_distribution.view.lookml · 41 lines
source-preserved
- view: audience_gender_distribution
derived_table:
sql: with df_dc_jct as(
select count(distinct df2.adnxsuid) as usercount, dc.geoid, df2.insertionorderid
FROM
analytics_data df2
JOIN
audience_coordinates dc
ON
df2.lat = dc.latitude
AND df2.long = dc.longitude
group by dc.geoid, df2.insertionorderid
HAVING count(distinct df2.adnxsuid) >= 30
)
select
insertionorderid,
key,
ratio_to_report(distribution) over(partition by insertionorderid)
from (
select df_dc_jct.insertionorderid,
da.key,
sum(df_dc_jct.usercount * geo_dist) as distribution
from df_dc_jct
join (
select geoid,
key,
ratio_to_report(value) over(partition by geoid) as geo_dist
from audience_gender
order by geoid, key
) da
on df_dc_jct.geoid = da.geoid
group by df_dc_jct.insertionorderid, da.key
)
fields:
- dimension: insertionorder_id
sql: ${TABLE}.insertionorderid
- dimension: gender
sql: ${TABLE}.key
- measure: ratio
type: sum
sql: 100.0* ${TABLE}.ratio_to_report
Contents
- audience_gender_distribution.sql
- audience_gender_distribution.sql
- audience_gender_distribution.view.lkml
- audience_gender_distribution.view.lookml