dating_platform/enterprise.model.lookml 6 explores14 joins 4 warnings Repo files

LookML model · dating-platform

The enterprise LookML model: six explores, 14 joins and no declared relationships

At a glance

Does
Declares six explores on project_connection: churn, transactions, messages, propositions, date_ideas and tests. Together they wire 14 joins across revenue, messaging, proposal and experiment views.Trust: Source-defined
Why
The main analysis model for the dating product. It puts revenue, messaging, date proposals and A/B test metrics in one place, with guard filters on the messaging and proposition explores.Trust: Inferred
Breaks
4 warnings. Top: No join declares a relationship
Grain
Each explore takes the grain of its base view. Two base views, user_transactions and user_metrics, are not in the repo, so those explores have no known grain.Trust: Missing
Source
dating_platform/enterprise.model.lookml 78 lines

Explore graph: enterprise

Trust: Source-defined

Each lane is one explore: its base view on the left, joins on the right, labelled with the join key. Dashed edges declare no relationship, so Looker assumes many_to_one.

Explores and joins in enterprise
Explores and joins in enterprise. Text version follows the diagram.Exploreschurn"Churn Report"transactionsmessagesalways_filterpropositionsconditionally_filterdate_ideastests"Test Metrics" churn base view subscriptions fk transactions.subscription_id, fields: [] user_score fk users.id, fields: [] messages base view propositions base view messages on messages.proposition_id = propo..., fi... date_ideas from proposition_templates propositions on propositions.proposition_templa... user_experiment_buckets on user_metrics.id = user_experime..., fi... tests (experiments) fk user_experiment_buckets.experiment_id user_tenure_metrics fk user_metrics.id, fields: [] user_score fk user_metrics.id, fields: [] messages on messages.sender_id = user_metri..., fi...
  • No relationship declared
  • Not in the repo
Text version
  • churn ("Churn Report"): churn
  • transactions: transactions (not in repo), users (not in repo), subscriptions, user_score
  • messages (always_filter): messages, sender (users) (not in repo), recipient (users) (not in repo)
  • propositions (conditionally_filter): propositions, users (not in repo), messages
  • date_ideas: date_ideas, propositions
  • tests ("Test Metrics"): user_metrics (not in repo), user_experiment_buckets, tests (experiments), user_tenure_metrics, users (not in repo), user_score, messages
  • transactions (not in repo) joins (fk transactions.user_id) users (not in repo) (no relationship declared)
  • transactions (not in repo) joins (fk transactions.subscription_id) subscriptions (no relationship declared)
  • transactions (not in repo) joins (fk users.id) user_score (no relationship declared)
  • messages joins (fk sender_id) sender (users) (not in repo) (no relationship declared)
  • messages joins (fk recipient_id) recipient (users) (not in repo) (no relationship declared)
  • propositions joins (fk propositions.user_id) users (not in repo) (no relationship declared)
  • propositions joins (on messages.proposition_id = propo...) messages (no relationship declared)
  • date_ideas joins (on propositions.proposition_templa...) propositions (no relationship declared)
  • user_metrics (not in repo) joins (on user_metrics.id = user_experime...) user_experiment_buckets (no relationship declared)
  • user_metrics (not in repo) joins (fk user_experiment_buckets.experiment_id) tests (experiments) (no relationship declared)
  • user_metrics (not in repo) joins (fk user_metrics.id) user_tenure_metrics (no relationship declared)
  • user_metrics (not in repo) joins (fk user_metrics.id) users (not in repo) (no relationship declared)
  • user_metrics (not in repo) joins (fk user_metrics.id) user_score (no relationship declared)
  • user_metrics (not in repo) joins (on messages.sender_id = user_metri...) messages (no relationship declared)

Explores in enterprise 6

Trust: Source-defined

Connection project_connection. Includes *.view.lookml *.dashboard.lookml

ExploreBase viewJoinsFiltersLines
churnChurn ReportchurnnonenoneL5-7
transactionsuser_transactions (not in repo) as transactionsusers (not in repo) fk transactions.user_id, no relationshipsubscriptions fk transactions.subscription_id, no relationshipuser_score fk users.id, no relationshipnoneL8-19
messagesmessagessender (not in repo) fk sender_id, no relationshiprecipient (not in repo) fk recipient_id, no relationshipalways: messages.type = -Messages::Welcome; recipient.is_spammer = false; sender.is_spammer = false; messages.created_date = last weekL20-35
propositionspropositionsusers (not in repo) fk propositions.user_id, no relationshipmessages on messages.proposition_id = propo..., no relationshipconditionally: propositions.status = published unless propositions.status is filteredL36-48
date_ideasproposition_templates as date_ideaspropositions on propositions.proposition_templa..., no relationshipnoneL49-54
testsTest Metricsuser_metrics (not in repo)user_experiment_buckets on user_metrics.id = user_experime..., no relationshiptests fk user_experiment_buckets.experiment_id, no relationshipuser_tenure_metrics fk user_metrics.id, no relationshipusers (not in repo) fk user_metrics.id, no relationshipuser_score fk user_metrics.id, no relationshipmessages on messages.sender_id = user_metri..., no relationshipnoneL55-78

Filters and exclusions that change meaning

The messages explore always hides welcome messages, spammers and older weeks

Trust: Source-defined

always_filter excludes Messages::Welcome, drops spammer senders and recipients, and sets created_date to last week. Readers can change the values but cannot remove the filters.

Source: enterprise.model.lookml L23-26
dating_platform/enterprise.model.lookmlL23-26
- explore: messages  view: messages  always_filter:    messages.type: -Messages::Welcome    recipient.is_spammer: false    sender.is_spammer: false    messages.created_date: last week  joins:  - join: sender    from: users

dating-platform, enterprise.model.lookml, lines 23-26

Propositions default to published

Trust: Source-defined

conditionally_filter applies status = published unless the query filters on status itself. A count with no status filter covers published propositions only.

Source: enterprise.model.lookml L39-41
dating_platform/enterprise.model.lookmlL39-41
- explore: propositions  view: propositions  conditionally_filter:    propositions.status: published    unless:    - propositions.status  joins:  - join: users    sql_foreign_key: propositions.user_id

dating-platform, enterprise.model.lookml, lines 39-41

Worth noticing

Explore names hide the real views

Trust: Source-defined

transactions reads user_transactions, date_ideas reads proposition_templates, and tests is both an explore name and a join alias over experiments.

Source: enterprise.model.lookml L49-64
dating_platform/enterprise.model.lookmlL49-64
  - join: messages    sql_on: messages.proposition_id = propositions.id    fields: []- explore: date_ideas  view: date_ideas  from: proposition_templates  joins:  - join: propositions    sql_on: propositions.proposition_template_id = date_ideas.id- explore: tests  view: user_metrics  label: Test Metrics  joins:  - join: user_experiment_buckets    sql_on: user_metrics.id = user_experiment_buckets.user_id    fields: []  - join: tests    from: experiments    sql_foreign_key: user_experiment_buckets.experiment_id  - join: user_tenure_metrics    sql_foreign_key: user_metrics.id    fields: []

dating-platform, enterprise.model.lookml, lines 49-64

Joins are trimmed with field sets

Trust: Source-defined

Several joins set fields: [] so only keys travel. The sender and recipient joins expose sender.messages and recipient.messages, sets that would live in a users view that is not in the repo.

Source: enterprise.model.lookml L27-35
dating_platform/enterprise.model.lookmlL27-35
    recipient.is_spammer: false    sender.is_spammer: false    messages.created_date: last week  joins:  - join: sender    from: users    sql_foreign_key: sender_id    fields: sender.messages  - join: recipient    from: users    sql_foreign_key: recipient_id    fields: recipient.messages- explore: propositions  view: propositions  conditionally_filter:

dating-platform, enterprise.model.lookml, lines 27-35

What can change the answer 4

Caution: No join declares a relationship

Trust: Source-defined

All 14 joins use sql_foreign_key or sql_on with no relationship, so Looker assumes many_to_one everywhere. The messages join on propositions is really one proposition to many messages.

What goes wrong: Proposition measures can repeat once per message when the messages join is pulled in.

Read the guide: Join fanout

Source: enterprise.model.lookml L46-48
dating_platform/enterprise.model.lookmlL46-48
  - join: users    sql_foreign_key: propositions.user_id    fields: users.messages  - join: messages    sql_on: messages.proposition_id = propositions.id    fields: []- explore: date_ideas  view: date_ideas  from: proposition_templates

dating-platform, enterprise.model.lookml, lines 46-48

Caution: user_tenure_metrics is joined on a key that is not unique

Trust: Inferred

The tests explore joins it with sql_foreign_key: user_metrics.id, but user_tenure_metrics.id repeats three times per user, once per tenure. fields: [] hides it today.

What goes wrong: If anyone exposes its fields, every user_metrics measure in the tests explore can triple.

Read the guide: Join fanout

Source: enterprise.model.lookml L65-67
dating_platform/enterprise.model.lookmlL65-67
  - join: tests    from: experiments    sql_foreign_key: user_experiment_buckets.experiment_id  - join: user_tenure_metrics    sql_foreign_key: user_metrics.id    fields: []  - join: users    from: users    sql_foreign_key: user_metrics.id

dating-platform, enterprise.model.lookml, lines 65-67

Caution: Two explores are built on views that are not in the repo

Trust: Source-defined

transactions reads user_transactions and tests reads user_metrics. Neither file exists here, and neither does users, which five joins target.

What goes wrong: The repo cannot show what these explores count, so tiles built on them cannot be checked.

Read the guide: Missing tables and stale references

Source: enterprise.model.lookml L8-13
dating_platform/enterprise.model.lookmlL8-13
- explore: churn  label: Churn Report  view: churn- explore: transactions  view: transactions  from: user_transactions  joins:  - join: users    sql_foreign_key: transactions.user_id  - join: subscriptions    sql_foreign_key: transactions.subscription_id    fields: []

dating-platform, enterprise.model.lookml, lines 8-13

Note: The user_score join chains through a missing view

Trust: Source-defined

In the transactions explore, user_score joins on sql_foreign_key: users.id, which depends on the users join. With users missing, the score join cannot be verified.

Read the guide: Missing tables and stale references

Source: enterprise.model.lookml L17-19
dating_platform/enterprise.model.lookmlL17-19
  - join: subscriptions    sql_foreign_key: transactions.subscription_id    fields: []  - join: user_score    sql_foreign_key: users.id    fields: []- explore: messages  view: messages  always_filter:

dating-platform, enterprise.model.lookml, lines 17-19

Parser checks 22

Trust: Source-defined

Mechanical findings from parsing the LookML. They are facts about the files. The cards above explain which ones matter.

Show all 22 checks
  • missing-view 7
    • enterprise.model.lookml:8 Explore transactions is based on user_transactions, which is not in the repo.
    • enterprise.model.lookml:12 Join transactions.users targets users, which is not in the repo.
    • enterprise.model.lookml:28 Join messages.sender targets users, which is not in the repo.
    • enterprise.model.lookml:32 Join messages.recipient targets users, which is not in the repo.
    • enterprise.model.lookml:43 Join propositions.users targets users, which is not in the repo.
    • enterprise.model.lookml:55 Explore tests is based on user_metrics, which is not in the repo.
    • enterprise.model.lookml:68 Join tests.users targets users, which is not in the repo.
  • duplicate-explore 1
    • enterprise.model.lookml:8 Explore transactions is declared in 2 models (enterprise, event_tracker).
  • no-relationship 14
    • enterprise.model.lookml:12 Join transactions.users declares no relationship.
    • enterprise.model.lookml:14 Join transactions.subscriptions declares no relationship.
    • enterprise.model.lookml:17 Join transactions.user_score declares no relationship.
    • enterprise.model.lookml:28 Join messages.sender declares no relationship.
    • enterprise.model.lookml:32 Join messages.recipient declares no relationship.
    • enterprise.model.lookml:43 Join propositions.users declares no relationship.
    • enterprise.model.lookml:46 Join propositions.messages declares no relationship.
    • enterprise.model.lookml:53 Join date_ideas.propositions declares no relationship.
    • enterprise.model.lookml:59 Join tests.user_experiment_buckets declares no relationship.
    • enterprise.model.lookml:62 Join tests.tests declares no relationship.
    • enterprise.model.lookml:65 Join tests.user_tenure_metrics declares no relationship.
    • enterprise.model.lookml:68 Join tests.users declares no relationship.
    • enterprise.model.lookml:72 Join tests.user_score declares no relationship.
    • enterprise.model.lookml:75 Join tests.messages declares no relationship.

Related

Guides built on this file

Related source files

Source model