dbt
Marketplace automotive
Seller Listing Facts
Seller Listing Facts model for marketplace automotive.
inferred
Blocks
seller_listing_facts.sql · 62 lines
inferred
-- models/seller_listing_facts.sql
{{ config(materialized='table') }}
SELECT fl.dim_seller_user_id AS user_id
, COUNT(*) AS lifetime_listings
, MIN(CONVERT(datetime, fl.auction_end_date)) AS first_auction
, MAX(CONVERT(datetime, fl.auction_end_date)) AS last_auction
, SUM(
CASE
WHEN fl.listing_status NOT IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_not_sold
, SUM(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_sold
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.strike_price) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_strike_differential
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_close_differential
, MAX(fl.sale_attempts) AS maximum_sale_attempts_single_listing
, SUM(CONVERT(float, fl.seller_commission)) AS lifetime_commission
, MIN(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' ) THEN CONVERT(datetime, fl.auction_end_date)
ELSE NULL
END) AS first_sale
FROM fact_listing AS fl
GROUP BY fl.dim_seller_user_id
# models/schema.yml
version: 2
models:
- name: seller_listing_facts
columns:
- name: user_id
tests:
- unique
- not_null
- name: lifetime_listings
- name: lifetime_listings_tiered
- name: lifetime_amount_not_sold
- name: first_sale
- name: lifetime_amount_sold
- name: lifetime_amount_sold_tiered
- name: average_start_close_differential
- name: average_start_strike_differential
- name: maximum_sale_attempts_single_listing
- name: lifetime_commission
Assumptions
- materialized='table' inferred from a LookML persist hint (persist_for / datagroup / sql_trigger_value).
- schema.yml columns come from view dimensions; a primary_key dimension gets unique + not_null tests.
seller_listing_facts.sql · 38 lines
source-preserved
validation: parses
SELECT fl.dim_seller_user_id AS user_id
, COUNT(*) AS lifetime_listings
, MIN(CONVERT(datetime, fl.auction_end_date)) AS first_auction
, MAX(CONVERT(datetime, fl.auction_end_date)) AS last_auction
, SUM(
CASE
WHEN fl.listing_status NOT IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_not_sold
, SUM(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_sold
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.strike_price) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_strike_differential
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_close_differential
, MAX(fl.sale_attempts) AS maximum_sale_attempts_single_listing
, SUM(CONVERT(float, fl.seller_commission)) AS lifetime_commission
, MIN(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' ) THEN CONVERT(datetime, fl.auction_end_date)
ELSE NULL
END) AS first_sale
FROM fact_listing AS fl
GROUP BY fl.dim_seller_user_id
seller_listing_facts.view.lkml · 116 lines
inferred
view: seller_listing_facts {
derived_table: {
sql: SELECT fl.dim_seller_user_id AS user_id
, COUNT(*) AS lifetime_listings
, MIN(CONVERT(datetime, fl.auction_end_date)) AS first_auction
, MAX(CONVERT(datetime, fl.auction_end_date)) AS last_auction
, SUM(
CASE
WHEN fl.listing_status NOT IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_not_sold
, SUM(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_sold
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.strike_price) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_strike_differential
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_close_differential
, MAX(fl.sale_attempts) AS maximum_sale_attempts_single_listing
, SUM(CONVERT(float, fl.seller_commission)) AS lifetime_commission
, MIN(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' ) THEN CONVERT(datetime, fl.auction_end_date)
ELSE NULL
END) AS first_sale
FROM fact_listing AS fl
GROUP BY fl.dim_seller_user_id ;;
persist_for: "3 hours"
}
dimension: user_id {
type: number
primary_key: yes
sql: ${TABLE}.user_id ;;
}
dimension: lifetime_listings {
type: number
sql: ${TABLE}.lifetime_listings ;;
}
dimension: lifetime_listings_tiered {
type: tier
sql: ${lifetime_listings} ;;
}
dimension: lifetime_amount_not_sold {
type: number
sql: ${TABLE}.lifetime_amount_not_sold ;;
}
dimension: first_sale {
type: time
sql: ${TABLE}.first_sale ;;
}
dimension: lifetime_amount_sold {
type: number
sql: ${TABLE}.lifetime_amount_sold ;;
}
dimension: lifetime_amount_sold_tiered {
type: tier
sql: ${lifetime_amount_sold} ;;
}
dimension: average_start_close_differential {
type: number
sql: ${TABLE}.average_start_close_differential ;;
}
dimension: average_start_strike_differential {
type: number
sql: ${TABLE}.average_start_strike_differential ;;
}
dimension: maximum_sale_attempts_single_listing {
type: number
sql: ${TABLE}.maximum_sale_attempts_single_listing ;;
}
dimension: lifetime_commission {
type: number
sql: ${TABLE}.lifetime_commission ;;
}
dimension_group: first_auction {
type: time
timeframes: [time, date, week, month]
sql: ${TABLE}.first_auction ;;
}
dimension_group: last_auction {
type: time
timeframes: [time, date, week, month, year]
sql: ${TABLE}.last_auction ;;
}
measure: count {
type: count
drill_fields: [detail*]
}
}
seller_listing_facts.view.lookml · 97 lines
source-preserved
- view: seller_listing_facts
derived_table:
sql: SELECT fl.dim_seller_user_id AS user_id
, COUNT(*) AS lifetime_listings
, MIN(CONVERT(datetime, fl.auction_end_date)) AS first_auction
, MAX(CONVERT(datetime, fl.auction_end_date)) AS last_auction
, SUM(
CASE
WHEN fl.listing_status NOT IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_not_sold
, SUM(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd)
ELSE 0
END) AS lifetime_amount_sold
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.strike_price) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_strike_differential
, AVG(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' )
THEN CONVERT(float, fl.high_bid_amount_usd) - CONVERT(float, fl.starting_price )
ELSE NULL
END) AS average_start_close_differential
, MAX(fl.sale_attempts) AS maximum_sale_attempts_single_listing
, SUM(CONVERT(float, fl.seller_commission)) AS lifetime_commission
, MIN(
CASE
WHEN fl.listing_status IN ( 'Sold', 'Collapsed sale' ) THEN CONVERT(datetime, fl.auction_end_date)
ELSE NULL
END) AS first_sale
FROM fact_listing AS fl
GROUP BY fl.dim_seller_user_id
persist_for: 3 hours
fields:
- dimension: user_id
type: number
primary_key: true
sql: ${TABLE}.user_id
- dimension: lifetime_listings
type: number
sql: ${TABLE}.lifetime_listings
- dimension: lifetime_listings_tiered
type: tier
sql: ${lifetime_listings}
- dimension: lifetime_amount_not_sold
type: number
sql: ${TABLE}.lifetime_amount_not_sold
- dimension: first_sale
type: time
sql: ${TABLE}.first_sale
- dimension: lifetime_amount_sold
type: number
sql: ${TABLE}.lifetime_amount_sold
- dimension: lifetime_amount_sold_tiered
type: tier
sql: ${lifetime_amount_sold}
- dimension: average_start_close_differential
type: number
sql: ${TABLE}.average_start_close_differential
- dimension: average_start_strike_differential
type: number
sql: ${TABLE}.average_start_strike_differential
- dimension: maximum_sale_attempts_single_listing
type: number
sql: ${TABLE}.maximum_sale_attempts_single_listing
- dimension: lifetime_commission
type: number
sql: ${TABLE}.lifetime_commission
- dimension_group: first_auction
type: time
timeframes:
- time
- date
- week
- month
sql: ${TABLE}.first_auction
- dimension_group: last_auction
type: time
timeframes:
- time
- date
- week
- month
- year
sql: ${TABLE}.last_auction
- measure: count
type: count
drill_fields:
- detail*
Contents
- seller_listing_facts.sql
- seller_listing_facts.sql
- seller_listing_facts.view.lkml
- seller_listing_facts.view.lookml