LKML
Nutrition coaching
User
User model for nutrition coaching.
inferred
Blocks
user.view.lkml · 250 lines
inferred
view: user {
sql_table_name: "user_table" ;;
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
dimension: apns_token {
hidden: yes
sql: ${TABLE}.apns_token ;;
}
dimension: attributes {
sql: ${TABLE}.attributes ;;
}
dimension: age {
type: int
sql: date_part('year',age(current_date, ${TABLE}.birthday)) ;;
}
dimension: age_tier {
type: tier
sql: ${age} ;;
}
dimension: days_on_platform {
type: number
sql: CASE
WHEN ${TABLE}.suspended_at IS NULL THEN NOW()::DATE - ${created_date}
ELSE ${suspended_date} - ${created_date}
END ;;
}
dimension: weeks_on_platform {
type: number
sql: ${days_on_platform} / 7 ;;
}
dimension: estimated_ltv {
description: "Estimated value, does not include refunds, chargebacks, etc."
type: number
sql: CASE
WHEN ${payment_plan} = 'monthly' THEN (${days_on_platform}/30)*${payment_plan_value}
WHEN ${payment_plan} = 'weekly' THEN (${days_on_platform}/7)*${payment_plan_value}
WHEN ${payment_plan} = 'trimonthly' THEN (${days_on_platform}/90)*${payment_plan_value}
ELSE 0
END ;;
}
dimension: current_login_ip {
hidden: yes
sql: ${TABLE}.current_login_ip ;;
}
dimension: email {
sql: ${TABLE}.email ;;
}
dimension: firstname {
sql: ${TABLE}.firstname ;;
}
dimension: gender {
sql: ${TABLE}.gender ;;
}
dimension: height {
type: int
sql: ${TABLE}.height ;;
}
dimension: last_login_ip {
hidden: yes
sql: ${TABLE}.last_login_ip ;;
}
dimension: lastname {
sql: ${TABLE}.lastname ;;
}
dimension: name {
sql: ${firstname} || ' ' || ${lastname} ;;
}
dimension: login_count {
type: int
hidden: yes
sql: ${TABLE}.login_count ;;
}
dimension: metrics_id {
hidden: yes
sql: ${TABLE}.metrics_id ;;
}
dimension: password {
hidden: yes
sql: ${TABLE}.password ;;
}
dimension: phone_number {
sql: ${TABLE}.phone_number ;;
}
dimension: picture {
sql: ${TABLE}.picture ;;
}
dimension: plan_id {
type: int
hidden: yes
sql: ${TABLE}.plan_id ;;
}
dimension: stripe_customer_id {
hidden: yes
sql: ${TABLE}.stripe_customer_id ;;
}
dimension: is_active {
type: yesno
sql: ${TABLE}.suspended_at IS NULL OR ${TABLE}.suspended_at > NOW() AT TIME ZONE 'utc' ;;
}
dimension: history {
sql: ${TABLE}.id ;;
}
dimension: has_entry {
type: yesno
sql: EXISTS(
SELECT me.*
FROM meal_entry AS me
LEFT JOIN meal AS m ON me.meal_id = m.id
WHERE ${TABLE}.id = m.client_id) ;;
}
dimension_group: birthday {
type: time
timeframes: [date, week, month]
sql: ${TABLE}.birthday ;;
}
dimension_group: confirmed {
type: time
timeframes: [time, date, week, month]
sql: ${TABLE}.confirmed_at ;;
}
dimension_group: created {
type: time
timeframes: [time, date, week, month]
sql: ${TABLE}.created_at ;;
}
dimension_group: current_login {
type: time
timeframes: [time, date, week, month]
sql: ${TABLE}.current_login_at ;;
}
dimension_group: last_login {
type: time
timeframes: [time, date, week, month]
sql: ${TABLE}.last_login_at ;;
}
dimension_group: suspended {
type: time
timeframes: [time, date, week, month]
sql: ${TABLE}.suspended_at ;;
}
measure: count {
type: count
drill_fields: [detail*]
}
measure: count_clients {
type: count
filters: [roles_users.role_name: "client"]
drill_fields: [detail*]
}
measure: count_active_clients {
type: count
filters: [is_active: "True"]
filters: [roles_users.role_name: "client"]
drill_fields: [detail*]
}
measure: count_coaches {
type: count
filters: [roles_users.role_name: "coach"]
drill_fields: [detail*]
}
measure: count_has_entry {
type: count
filters: [has_entry: "yes"]
drill_fields: [detail*]
}
measure: percent_clients {
type: number
sql: 100.0 * ${count_clients}/NULLIF(${count_coaches}+${count_clients},0) ;;
}
measure: percent_active_clients {
type: number
sql: 100.0 * ${count_active_clients}/NULLIF(${count},0) ;;
}
measure: percent_coaches {
type: number
sql: 100.0 * ${count_coaches}/NULLIF(${count_coaches}+${count_clients},0) ;;
}
measure: total_estimated_ltv {
type: sum
sql: ${estimated_ltv} ;;
}
measure: avg_estimated_ltv {
type: avg
sql: ${estimated_ltv} ;;
}
measure: avg_days_on_platform {
type: avg
sql: ${days_on_platform} ;;
}
measure: percent_of_total_users {
type: percent_of_total
sql: ${count} ;;
}
measure: percent_of_total_coaches {
type: percent_of_total
sql: ${count_coaches} ;;
}
measure: percent_of_total_clients {
type: percent_of_total
sql: ${count_clients} ;;
}
}
user.view.lookml · 190 lines
source-preserved
- view: user
sql_table_name: '"user_table"'
fields:
- dimension: id
primary_key: true
sql: ${TABLE}.id
- dimension: apns_token
hidden: true
sql: ${TABLE}.apns_token
- dimension: attributes
sql: ${TABLE}.attributes
- dimension: age
type: int
sql: date_part('year',age(current_date, ${TABLE}.birthday))
- dimension: age_tier
type: tier
sql: ${age}
- dimension: days_on_platform
type: number
sql: CASE
WHEN ${TABLE}.suspended_at IS NULL THEN NOW()::DATE - ${created_date}
ELSE ${suspended_date} - ${created_date}
END
- dimension: weeks_on_platform
type: number
sql: ${days_on_platform} / 7
- dimension: estimated_ltv
type: number
description: Estimated value, does not include refunds, chargebacks, etc.
sql: CASE
WHEN ${payment_plan} = 'monthly' THEN (${days_on_platform}/30)*${payment_plan_value}
WHEN ${payment_plan} = 'weekly' THEN (${days_on_platform}/7)*${payment_plan_value}
WHEN ${payment_plan} = 'trimonthly' THEN (${days_on_platform}/90)*${payment_plan_value}
ELSE 0
END
- dimension: current_login_ip
hidden: true
sql: ${TABLE}.current_login_ip
- dimension: email
sql: ${TABLE}.email
- dimension: firstname
sql: ${TABLE}.firstname
- dimension: gender
sql: ${TABLE}.gender
- dimension: height
type: int
sql: ${TABLE}.height
- dimension: last_login_ip
hidden: true
sql: ${TABLE}.last_login_ip
- dimension: lastname
sql: ${TABLE}.lastname
- dimension: name
sql: ${firstname} || ' ' || ${lastname}
- dimension: login_count
type: int
hidden: true
sql: ${TABLE}.login_count
- dimension: metrics_id
hidden: true
sql: ${TABLE}.metrics_id
- dimension: password
hidden: true
sql: ${TABLE}.password
- dimension: phone_number
sql: ${TABLE}.phone_number
- dimension: picture
sql: ${TABLE}.picture
- dimension: plan_id
type: int
hidden: true
sql: ${TABLE}.plan_id
- dimension: stripe_customer_id
hidden: true
sql: ${TABLE}.stripe_customer_id
- dimension: is_active
type: yesno
sql: ${TABLE}.suspended_at IS NULL OR ${TABLE}.suspended_at > NOW() AT TIME ZONE 'utc'
- dimension: history
sql: ${TABLE}.id
- dimension: has_entry
type: yesno
sql: EXISTS(
SELECT me.*
FROM meal_entry AS me
LEFT JOIN meal AS m ON me.meal_id = m.id
WHERE ${TABLE}.id = m.client_id)
- dimension_group: birthday
type: time
timeframes:
- date
- week
- month
sql: ${TABLE}.birthday
- dimension_group: confirmed
type: time
timeframes:
- time
- date
- week
- month
sql: ${TABLE}.confirmed_at
- dimension_group: created
type: time
timeframes:
- time
- date
- week
- month
sql: ${TABLE}.created_at
- dimension_group: current_login
type: time
timeframes:
- time
- date
- week
- month
sql: ${TABLE}.current_login_at
- dimension_group: last_login
type: time
timeframes:
- time
- date
- week
- month
sql: ${TABLE}.last_login_at
- dimension_group: suspended
type: time
timeframes:
- time
- date
- week
- month
sql: ${TABLE}.suspended_at
- measure: count
type: count
drill_fields:
- detail*
- measure: count_clients
type: count
drill_fields:
- detail*
filters:
- roles_users.role_name: client
- measure: count_active_clients
type: count
drill_fields:
- detail*
filters:
- is_active: True
- roles_users.role_name: client
- measure: count_coaches
type: count
drill_fields:
- detail*
filters:
- roles_users.role_name: coach
- measure: count_has_entry
type: count
drill_fields:
- detail*
filters:
- has_entry: yes
- measure: percent_clients
type: number
sql: 100.0 * ${count_clients}/NULLIF(${count_coaches}+${count_clients},0)
- measure: percent_active_clients
type: number
sql: 100.0 * ${count_active_clients}/NULLIF(${count},0)
- measure: percent_coaches
type: number
sql: 100.0 * ${count_coaches}/NULLIF(${count_coaches}+${count_clients},0)
- measure: total_estimated_ltv
type: sum
sql: ${estimated_ltv}
- measure: avg_estimated_ltv
type: avg
sql: ${estimated_ltv}
- measure: avg_days_on_platform
type: avg
sql: ${days_on_platform}
- measure: percent_of_total_users
type: percent_of_total
sql: ${count}
- measure: percent_of_total_coaches
type: percent_of_total
sql: ${count_coaches}
- measure: percent_of_total_clients
type: percent_of_total
sql: ${count_clients}
Contents
- user.view.lkml
- user.view.lookml