dbt Model Registry
Purpose : Complete map of every dbt model in production. Claude Code uses this to avoid duplicate models, understand dependencies, and ensure new models follow established patterns.
Last Updated : 2026-06-11
Project location : apps/dbt/xo-medallion/
ADR 019 standardization complete (Phases 1–4): All models follow client/layer folder structure, use 3-character client prefix, and aggregates source from Gold facts only. See ADR 019 .
How to Update This File
When you deploy a new dbt model, add it here. When you deprecate a model, mark it deprecated and record the date. This file is Claude's map of the transformation layer.
Model Summary
Client / Domain
Silver
Gold Facts
Gold Dims
Gold Aggs
Gold Int
Gold rpt_
Gold exp_
Gold feed_
Seeds
Warby Parker (WBP_DB)
16
17
0
18
1
14
17
1
0
Condé Nast (CND_DB)
11
8
0
3
0
2
0
0
0
J.Crew (JCR_DB)
3
6
0
8
0
3
0
0
0
Core / Shared (CORE_DB)
29
0
28
0
0
1
0
0
2
Total
59
31
28
29
1
20
17
1
2
Counts verified 2026-06-11 against apps/dbt/xo-medallion/models/, excluding disabled _pending/ models.
Core Silver: 27 bi_roster_* + 2 PH HR roster models = 29. Core Gold: 28 dim_employee_* (incl. dim_employee_ph) + 1 rpt_master_roster. Core seeds: dim_client_metrics.csv, dim_metric_definitions.csv (in GOLD).
WBP Gold: 17 facts + 18 aggs + 1 int + 14 rpt_ + 17 exp_ + 1 feed_.
CND Silver: Maestro models (from MAESTRO_DB, no Bronze layer) + Gladly incremental (merge) + 2 Gladly rolling-window exports (Bronze merge, ADR 024). CND Gold: 8 facts + 3 aggs + 2 reports. AGG_CND_QA_DAILY / RPT_CND_QA_DAILY are in _pending/ (disabled) and excluded.
⚠️ Detail tables below are not yet reconciled (2026-06-11). The Model Summary above is verified against the current project and is authoritative . The per-model detail tables that follow (Silver and Gold per client) are stale in places — CND/JCR Gold and the WBP exp_/feed_ models in particular are under-listed. A full per-model rebuild is pending. Note: the ai_agents.csv seed referenced in older detail rows no longer exists; current seeds are the two dim_* CSVs above.
Silver Models
Warby Parker (WBP_DB.SILVER / WBP_DB_DEV.SILVER)
Model File
Table Name
Grain
Source Bronze Table
Status
warbyparker/silver/wbp_gladly_contact_timestamps.sql
WBP_GLADLY_CONTACT_TIMESTAMPS
One row per event (CONTACT_ID + EVENT_TYPE + TIMESTAMP)
GLADLY_CONTACT_TIMESTAMPS
✅ Production
warbyparker/silver/wbp_gladly_conversation_timestamps.sql
WBP_GLADLY_CONVERSATION_TIMESTAMPS
One row per event (CONVERSATION_ID + EVENT_TYPE + TIMESTAMP)
GLADLY_CONVERSATION_TIMESTAMPS
✅ Production
warbyparker/silver/wbp_gladly_work_sessions.sql
WBP_GLADLY_WORK_SESSIONS
One row per WORK_SESSION_ID
GLADLY_WORK_SESSIONS
✅ Production
warbyparker/silver/wbp_gladly_agent_durations.sql
WBP_GLADLY_AGENT_DURATIONS
One row per agent status span
GLADLY_AGENT_DURATIONS
✅ Production
warbyparker/silver/wbp_gsheet_csat.sql
WBP_GSHEET_CSAT
One row per survey response
GSHEET_CSAT
✅ Production
warbyparker/silver/wbp_gsheet_qa.sql
WBP_GSHEET_QA
One row per QA evaluation
GSHEET_QA
✅ Production
warbyparker/silver/wbp_gsheet_qa_partner.sql
WBP_GSHEET_QA_PARTNER
One row per QA evaluation
GSHEET_QA_PARTNER
✅ Production
warbyparker/silver/wbp_aspect_conformance.sql
WBP_ASPECT_CONFORMANCE
One row per (EID × date)
ASPECT_CONFORMANCE
✅ Production
warbyparker/silver/wbp_aws_csat.sql
WBP_AWS_CSAT
One row per (contact × question)
AWS_CSAT
✅ Production
Silver Rules :
- Gladly models: incremental (append), preserves permanent history
- GSheets models: table (rebuilds from latest BATCH_ID each run)
- No JOINs, no business filters, no aggregation (per ADR 019)
- Deduplicates by RECORD_KEY
- Type converts VARCHAR → proper types via TRY_TO_*
Gold Models — Warby Parker (WBP_DB.GOLD / WBP_DB_DEV.GOLD)
Facts (fct_)
Model File
Table Name
Grain
Source Silver
Enriched With
Source Category
warbyparker/gold/fct_wbp_contacts.sql
FCT_WBP_CONTACTS
One row per CONTACT_ID
WBP_GLADLY_CONTACT_TIMESTAMPS, WBP_GLADLY_WORK_SESSIONS
BI_ROSTER_WARBYPARKER (IS_XO_AGENT flag + EID via ended agent)
Case 3 (LEFT JOIN + IS_XO_AGENT flag; includes non-XO rows)
warbyparker/gold/fct_wbp_conversations.sql
FCT_WBP_CONVERSATIONS
One row per CONVERSATION_ID
WBP_GLADLY_CONVERSATION_TIMESTAMPS, WBP_GLADLY_CONTACT_TIMESTAMPS
BI_ROSTER_WARBYPARKER (EID via first-close agent)
Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_csat.sql
FCT_WBP_CSAT
One row per survey response
WBP_GSHEET_CSAT
BI_ROSTER_WARBYPARKER (EID via OKTA_USER)
Case 2 (in-source filter + LEFT JOIN)
warbyparker/gold/fct_wbp_aws_csat.sql
FCT_WBP_AWS_CSAT
One row per contact (INITIAL_CONTACT_ID)
WBP_AWS_CSAT
BI_ROSTER_WARBYPARKER (EID via ACCOUNT_EMAIL)
Case 2 (in-source filter + LEFT JOIN)
warbyparker/gold/fct_wbp_qa_internal.sql
FCT_WBP_QA_INTERNAL
One row per QA evaluation
WBP_GSHEET_QA
BI_ROSTER_WARBYPARKER (EID)
Case 1 (LEFT JOIN, EID can be NULL)
warbyparker/gold/fct_wbp_qa_partner.sql
FCT_WBP_QA_PARTNER
One row per QA evaluation
WBP_GSHEET_QA_PARTNER
BI_ROSTER_WARBYPARKER (EID)
Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_work_sessions.sql
FCT_WBP_WORK_SESSIONS
One row per WORK_SESSION_ID
WBP_GLADLY_WORK_SESSIONS
BI_ROSTER_WARBYPARKER (EID)
Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_agent_durations.sql
FCT_WBP_AGENT_DURATIONS
One row per agent status span
WBP_GLADLY_AGENT_DURATIONS
BI_ROSTER_WARBYPARKER (EID)
Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_agent_channel_summary.sql
FCT_WBP_AGENT_CHANNEL_SUMMARY
One row per agent per day per channel
WBP_GLADLY_AGENT_SUMMARY
BI_ROSTER_WARBYPARKER (EID, join on EMAIL = ACCOUNT_EMAIL)
Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_agent_summary_daily.sql
FCT_WBP_AGENT_SUMMARY_DAILY
One row per agent per day
WBP_GLADLY_AGENT_SUMMARY
BI_ROSTER_WARBYPARKER (EID, join on EMAIL = ACCOUNT_EMAIL)
Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_conversation_topics.sql
FCT_WBP_CONVERSATION_TOPICS
One row per topic add event
WBP_GLADLY_CONVERSATION_TIMESTAMPS
BI_ROSTER_WARBYPARKER (EID)
Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_aspect_conformance.sql
FCT_WBP_ASPECT_CONFORMANCE
One row per (EID × date)
WBP_ASPECT_CONFORMANCE
BI_ROSTER_WARBYPARKER (EID direct join)
Case 1 (LEFT JOIN + WHERE r.EID IS NOT NULL)
Model File
Table Name
Purpose
Used By
Status
warbyparker/intermediate/int_wbp_contacts_hold.sql
(ephemeral)
Hold time calculation via LAG() over contact events
fct_wbp_contacts
✅ Production
Aggregates (agg_)
Model File
Table Name
Grain
Source
Status
warbyparker/gold/agg_wbp_agent_contacts_daily.sql
AGG_WBP_AGENT_CONTACTS_DAILY
(date, eid, channel, direction, status, inbox)
fct_wbp_contacts + fct_wbp_agent_durations
✅ Production
warbyparker/gold/agg_wbp_agent_performance_daily.sql
AGG_WBP_AGENT_PERFORMANCE_DAILY
(date, eid, channel)
fct_wbp_contacts + fct_wbp_work_sessions
✅ Production
warbyparker/gold/agg_wbp_csat_daily.sql
AGG_WBP_CSAT_DAILY
(date, eid)
fct_wbp_csat
✅ Production
warbyparker/gold/agg_wbp_qa_daily.sql
AGG_WBP_QA_DAILY
(date, eid, evaluation_type)
fct_wbp_qa_internal + fct_wbp_qa_partner
✅ Production
warbyparker/gold/agg_wbp_qa_attributes_daily.sql
AGG_WBP_QA_ATTRIBUTES_DAILY
(date, attribute, eval_type, eid, agent, auditor, channel)
fct_wbp_qa_internal + fct_wbp_qa_partner
✅ Production
warbyparker/gold/agg_wbp_agent_summary_channel_daily.sql
AGG_WBP_AGENT_SUMMARY_CHANNEL_DAILY
(date, eid, channel)
fct_wbp_agent_channel_summary
✅ Production
warbyparker/gold/agg_wbp_agent_durations_daily.sql
AGG_WBP_AGENT_DURATIONS_DAILY
(date, eid)
fct_wbp_agent_durations
✅ Production
warbyparker/gold/agg_wbp_handle_time_topic_daily.sql
AGG_WBP_HANDLE_TIME_TOPIC_DAILY
(date, eid, channel, topic_id)
fct_wbp_contacts + fct_wbp_conversation_topics
✅ Production
warbyparker/gold/agg_wbp_fcr_topic_daily.sql
AGG_WBP_FCR_TOPIC_DAILY
(date, eid, channel, topic_id)
fct_wbp_conversations + fct_wbp_conversation_topics + bi_roster_warbyparker
✅ Production
warbyparker/gold/agg_wbp_qa_topic_daily.sql
AGG_WBP_QA_TOPIC_DAILY
(date, eid, channel, evaluation_type, topic_id)
fct_wbp_qa_internal + fct_wbp_qa_partner + fct_wbp_contacts + fct_wbp_conversation_topics
✅ Production
warbyparker/gold/agg_wbp_csat_topic_daily.sql
AGG_WBP_CSAT_TOPIC_DAILY
(date, eid, channel, topic_id)
fct_wbp_csat + fct_wbp_conversations + fct_wbp_conversation_topics
✅ Production
warbyparker/gold/agg_wbp_csat_channel_daily.sql
AGG_WBP_CSAT_CHANNEL_DAILY
(date, eid, interaction_type)
fct_wbp_csat
✅ Production
warbyparker/gold/agg_wbp_aws_csat_channel_daily.sql
AGG_WBP_AWS_CSAT_CHANNEL_DAILY
(date, eid, interaction_type)
fct_wbp_aws_csat
✅ Production (#1406 — AWS IVR CSAT; additive with agg_wbp_csat_channel_daily)
All aggregates source from Gold facts only — no Silver, no Bronze, no direct roster JOINs (ADR 019 Phase 4).
agg_wbp_agent_contacts_daily is consumed directly by Tableau — no dbt downstream refs. Attribution anchored on FULFILLED_AT (closing agent).
agg_wbp_agent_durations_daily (issue #934) pivots the durations fact by TYPE_FIELD + CONTEXT. Provides total_active_time_sec, total_acw_time_sec (the #931 fix), and AWAY-context breakouts (Break, Lunch, Training, Meeting).
Topic aggs (added 2026-05): fan-out grain — one row per topic per metric. CSAT uses a fuzzy join (customer_id + week + channel); QA uses URL parsing to resolve conversation ID. See ADR 022 .
Reports (rpt_)
Model File
View Name
Source
Status
warbyparker/gold/rpt_wbp_agent_performance.sql
RPT_WBP_AGENT_PERFORMANCE
agg_wbp_agent_performance_daily, agg_wbp_qa_daily, agg_wbp_csat_daily, fct_wbp_agent_durations
✅ Production
warbyparker/gold/rpt_wbp_email_daily.sql
RPT_WBP_EMAIL_DAILY
agg_wbp_agent_contacts_daily, agg_wbp_qa_daily, agg_wbp_csat_daily
✅ Production
warbyparker/gold/rpt_wbp_xoos_agent_performance.sql
RPT_WBP_XOOS_AGENT_PERFORMANCE
agg_wbp_agent_performance_daily, agg_wbp_qa_daily, agg_wbp_csat_daily
✅ Production
warbyparker/gold/rpt_wbp_agent_performance_channel.sql
RPT_WBP_AGENT_PERFORMANCE_CHANNEL
agg_wbp_agent_summary_channel_daily, agg_wbp_aws_agent_performance_channel_daily, agg_wbp_csat_channel_daily, agg_wbp_aws_csat_channel_daily, agg_wbp_qa_channel_daily, agg_wbp_fcr_channel_daily, agg_wbp_agent_durations_daily, bi_roster_warbyparker
✅ Production (extended 2026-04 with durations ACW for #931; #1406 adds additive AWS CSAT)
warbyparker/gold/rpt_wbp_agent_productivity_daily.sql
RPT_WBP_AGENT_PRODUCTIVITY_DAILY
agg_wbp_agent_durations_daily, agg_wbp_agent_summary_channel_daily, fct_wbp_aspect_conformance, bi_roster_warbyparker
✅ Production (issue #934 — all agents, no AI filter; EPH/MPH/CPH/ACW% at agent-day grain; conformance columns added 2026-05)
warbyparker/gold/rpt_wbp_account_performance_channel_daily.sql
RPT_WBP_ACCOUNT_PERFORMANCE_CHANNEL_DAILY
agg_wbp_agent_summary_channel_daily, agg_wbp_csat_channel_daily, agg_wbp_qa_channel_daily, agg_wbp_fcr_channel_daily
✅ Production (issue #934 — account-level, no agent dimension; AHT/SLA/ASA/CSAT/QA/FCR)
warbyparker/gold/rpt_wbp_metrics_topic_daily.sql
RPT_WBP_METRICS_TOPIC_DAILY
agg_wbp_handle_time_topic_daily, agg_wbp_qa_topic_daily, agg_wbp_csat_topic_daily, agg_wbp_fcr_topic_daily
✅ Production (replaces OPERATIONS.AGGREGATE.WARBYPARKER_METRICS_BY_TOPIC; see ADR 022)
warbyparker/gold/rpt_wbp_contact_volume.sql
RPT_WBP_CONTACT_VOLUME
fct_wbp_contacts
✅ Production (issue #1043 — inbound contact volume by vendor/ai_status/ai_wave; multi-date spine for queued/offered/fulfilled/ended; AI status = roster enrollment date)
warbyparker/gold/rpt_wbp_aws_contact_volume.sql
RPT_WBP_AWS_CONTACT_VOLUME
agg_wbp_aws_queue_productivity_interval, agg_wbp_gladly_contact_volume_daily, fct_wbp_forecast_volume
✅ Production (issue #1291 — unified AWS + Gladly historical contact volume; grain: date × channel × ai_status × data_source; Email=AI Enabled, Chat/Phone=Not Enabled; forecasted_volume joined for AI Enabled rows only)
Exploration (exp_)
AI pilot analysis views — no SLA. May change or be dropped without notice. Promote to rpt_ when logic stabilizes and a Tableau dashboard adopts it. See ADR 021 .
Model File
View Name
Source
Status
warbyparker/gold/exp_wbp_contact_volume_inbox.sql
EXP_WBP_CONTACT_VOLUME_INBOX
fct_wbp_contacts
🔬 Exploration (issue #1043 — contact volume variant; AI status = inbox-based IS_AI_QUEUE flag; same grain as rpt_wbp_contact_volume)
warbyparker/gold/exp_wbp_contact_volume_agent.sql
EXP_WBP_CONTACT_VOLUME_AGENT
agg_wbp_agent_summary_channel_daily, bi_roster_warbyparker
🔬 Exploration (issue #1043 — contact volume from agent summary; AI status = roster enrollment; XO only; queued=accepted; fulfilled_same_day=NULL)
warbyparker/gold/exp_wbp_agent_qa_trend.sql
EXP_WBP_AGENT_QA_TREND
fct_wbp_qa_internal, fct_wbp_qa_partner
🔬 Exploration
warbyparker/gold/exp_wbp_ai_agent_concurrency_daily.sql
EXP_WBP_AI_AGENT_CONCURRENCY_DAILY
agg_wbp_gladly_productivity_agent_daily, dim_employee_warbyparker
🔬 Exploration
warbyparker/gold/exp_wbp_ai_agents_durations_daily.sql
EXP_WBP_AI_AGENTS_DURATIONS_DAILY
fct_wbp_agent_durations, dim_employee_warbyparker
🔬 Exploration
warbyparker/gold/exp_wbp_ai_agent_qa_week_over_week.sql
EXP_WBP_AI_AGENT_QA_WEEK_OVER_WEEK
agg_wbp_qa_daily, dim_employee_warbyparker
🔬 Exploration
warbyparker/gold/exp_wbp_ai_agent_qa_month_over_month.sql
EXP_WBP_AI_AGENT_QA_MONTH_OVER_MONTH
agg_wbp_qa_daily, dim_employee_warbyparker
🔬 Exploration
warbyparker/gold/exp_wbp_ai_wave_qa_week_over_week.sql
EXP_WBP_AI_WAVE_QA_WEEK_OVER_WEEK
agg_wbp_qa_daily
🔬 Exploration
warbyparker/gold/exp_wbp_ai_wave_qa_month_over_month.sql
EXP_WBP_AI_WAVE_QA_MONTH_OVER_MONTH
agg_wbp_qa_daily
🔬 Exploration
warbyparker/gold/exp_wbp_ai_wave_qa_quarter_over_quarter.sql
EXP_WBP_AI_WAVE_QA_QUARTER_OVER_QUARTER
agg_wbp_qa_daily
🔬 Exploration
warbyparker/gold/exp_wbp_ai_vs_nonai_qa_wow.sql
EXP_WBP_AI_VS_NONAI_QA_WOW
agg_wbp_qa_daily
🔬 Exploration
warbyparker/gold/exp_wbp_ai_vs_nonai_qa_mom.sql
EXP_WBP_AI_VS_NONAI_QA_MOM
agg_wbp_qa_daily
🔬 Exploration
warbyparker/gold/exp_wbp_ai_vs_nonai_qa_qoq.sql
EXP_WBP_AI_VS_NONAI_QA_QOQ
agg_wbp_qa_daily
🔬 Exploration
warbyparker/gold/exp_wbp_ai_qa_attributes_week_over_week.sql
EXP_WBP_AI_QA_ATTRIBUTES_WEEK_OVER_WEEK
agg_wbp_qa_attributes_daily, dim_employee_warbyparker
🔬 Exploration
warbyparker/gold/exp_wbp_ai_qa_attributes_month_over_month.sql
EXP_WBP_AI_QA_ATTRIBUTES_MONTH_OVER_MONTH
agg_wbp_qa_attributes_daily, dim_employee_warbyparker
🔬 Exploration
warbyparker/gold/exp_wbp_gladly_blended_ai_productivity.sql
EXP_WBP_GLADLY_BLENDED_AI_PRODUCTIVITY
agg_wbp_gladly_productivity_agent_daily
🔬 Exploration
warbyparker/gold/exp_wbp_gladly_blended_ai_productivity_weekly.sql
EXP_WBP_GLADLY_BLENDED_AI_PRODUCTIVITY_WEEKLY
agg_wbp_gladly_productivity_agent_daily
🔬 Exploration
warbyparker/gold/exp_wbp_gladly_blended_ai_productivity_channel_daily.sql
EXP_WBP_GLADLY_BLENDED_AI_PRODUCTIVITY_CHANNEL_DAILY
agg_wbp_gladly_productivity_agent_daily
🔬 Exploration
Silver Models — Condé Nast (CND_DB.SILVER / CND_DB_DEV.SILVER)
Model File
Table Name
Grain
Source
Status
condenast/silver/cnd_maestro_answers.sql
CND_MAESTRO_ANSWERS
One row per ANSWER_ID
MAESTRO_DB.PUBLIC.ANSWERS
✅ Production
condenast/silver/cnd_maestro_questions.sql
CND_MAESTRO_QUESTIONS
One row per TEMPLATE_ID + QUESTION_ID
MAESTRO_DB.PUBLIC.QUESTIONS
✅ Production
condenast/silver/cnd_maestro_sections.sql
CND_MAESTRO_SECTIONS
One row per TEMPLATE_ID + SECTION_ID
MAESTRO_DB.PUBLIC.SECTIONS
✅ Production
condenast/silver/cnd_maestro_templates.sql
CND_MAESTRO_TEMPLATES
One row per TEMPLATE_ID
MAESTRO_DB.PUBLIC.TEMPLATES
✅ Production
condenast/silver/cnd_maestro_question_scores.sql
CND_MAESTRO_QUESTION_SCORES
One row per ANSWER_ID + QUESTION_ID
MAESTRO_DB.PUBLIC.QUESTION_SCORES
✅ Production
condenast/silver/cnd_maestro_section_scores.sql
CND_MAESTRO_SECTION_SCORES
One row per ANSWER_ID + SECTION_ID
MAESTRO_DB.PUBLIC.SECTION_SCORES
✅ Production
condenast/silver/cnd_maestro_helpdesk_id_email.sql
CND_MAESTRO_HELPDESK_ID_EMAIL
One row per HELPDESK + HELPDESK_ID
MAESTRO_DB.PUBLIC.HELPDESK_ID_EMAIL
✅ Production
Gladly (CND_DB.BRONZE — incremental merge)
Model File
Table Name
Grain
Source Bronze Table
Status
condenast/silver/cnd_gladly_contact_timestamps.sql
CND_GLADLY_CONTACT_TIMESTAMPS
One row per event (CONTACT_ID + EVENT_TYPE + TIMESTAMP)
GLADLY_CONTACT_TIMESTAMPS
✅ Production
condenast/silver/cnd_gladly_conversation_timestamps.sql
CND_GLADLY_CONVERSATION_TIMESTAMPS
One row per event (CONVERSATION_ID + composite key)
GLADLY_CONVERSATION_TIMESTAMPS
✅ Production
condenast/silver/cnd_gladly_work_sessions.sql
CND_GLADLY_WORK_SESSIONS
One row per WORK_SESSION_ID
GLADLY_WORK_SESSIONS
✅ Production
condenast/silver/cnd_gladly_agent_durations.sql
CND_GLADLY_AGENT_DURATIONS
One row per agent status span (composite key)
GLADLY_AGENT_DURATIONS
✅ Production
condenast/silver/cnd_gladly_agent_summary.sql
CND_GLADLY_AGENT_SUMMARY
One row per AGENT_ID + day
GLADLY_AGENT_SUMMARY
✅ Production
condenast/silver/cnd_gladly_fcr_by_agent.sql
CND_GLADLY_FCR_BY_AGENT
One row per agent + day
GLADLY_FCR_BY_AGENT
✅ Production
Gladly Rolling-Window Exports (CND_DB.BRONZE — Bronze merge strategy, ADR 024)
Model File
Table Name
Grain
Source Bronze Table
Status
condenast/silver/cnd_gladly_contact_export.sql
CND_GLADLY_CONTACT_EXPORT
One row per CONTACT_ID (latest state)
GLADLY_CONTACT_EXPORT
✅ Production
condenast/silver/cnd_gladly_conversation_export.sql
CND_GLADLY_CONVERSATION_EXPORT
One row per CONVERSATION_ID (latest state)
GLADLY_CONVERSATION_EXPORT
✅ Production
Gold Models — Condé Nast (CND_DB.GOLD)
Facts (fct_)
Model File
Table Name
Grain
Source
Enriched With
Source Category
condenast/gold/fct_cnd_qa.sql
FCT_CND_QA
One row per ANSWER_ID
CND_MAESTRO_ANSWERS, CND_MAESTRO_TEMPLATES, CND_MAESTRO_HELPDESK_ID_EMAIL
OPERATIONS.BAMBOOHR.ROSTER_CONDENAST (EID — pending migration to ref())
Case 1 (LEFT JOIN, EID can be NULL)
Note : fct_cnd_qa still uses source('operations_bamboohr', 'ROSTER_CONDENAST') — migration to ref('bi_roster_condenast') is pending (Phase 5+).
Aggregates (agg_)
Model File
Table Name
Grain
Source
Status
condenast/gold/agg_cnd_qa_daily.sql
AGG_CND_QA_DAILY
(evaluation_date, agent_name, direct_leader, channel)
fct_cnd_qa
✅ Production
Reports (rpt_)
Model File
View Name
Source
Status
condenast/gold/rpt_cnd_qa_daily.sql
RPT_CND_QA_DAILY
agg_cnd_qa_daily
✅ Production
Silver Models — J.Crew (JCR_DB.SILVER / JCR_DB_DEV.SILVER)
Model File
Table Name
Grain
Source Bronze Table
Status
jcrew/silver/jcr_gdrive_aaa.sql
JCR_GDRIVE_AAA
One row per ASSOCIATE × date
GDRIVE_JCREW_AAA
✅ Production
jcrew/silver/jcr_gdrive_interactions.sql
JCR_GDRIVE_INTERACTIONS
One row per conversation
GDRIVE_JCREW_INTERACTIONS
🟡 New (Gold pending spike)
jcrew/silver/jcr_gdrive_csat.sql
JCR_GDRIVE_CSAT
One row per CSAT record
GDRIVE_JCREW_CSAT
✅ Production
jcrew/silver/jcr_gdrive_fcr.sql
JCR_GDRIVE_FCR
One row per agent × channel × contact reason × week
GDRIVE_JCREW_FCR
✅ Production
jcrew/silver/jcr_gdrive_qa.sql
JCR_GDRIVE_QA
One row per conversation
GDRIVE_JCREW_QA
🟡 New (Gold pending spike)
jcrew/silver/jcr_gdrive_agent_daily_aht.sql
JCR_GDRIVE_AGENT_DAILY_AHT
One row per agent × interval × media type
GDRIVE_JCREW_AGENT_DAILY_AHT
🟡 New (Gold pending spike #1269)
jcrew/silver/jcr_gdrive_agent_status.sql
JCR_GDRIVE_AGENT_STATUS
One row per agent × interval (daily); no channel
GDRIVE_JCREW_AGENT_STATUS
🟡 New (Gold deferred #1322)
All three models use incremental merge strategy (ADR 020). Source: Google Drive / Google Sheets exports loaded weekly by jcrew_gdrive_weekly DAG.
Gold Models — J.Crew (JCR_DB.GOLD)
Facts (fct_)
Model File
Table Name
Grain
Source
Enriched With
Source Category
jcrew/gold/fct_jcr_aaa.sql
FCT_JCR_AAA
One row per agent × date
JCR_GDRIVE_AAA
bi_roster_jcrew (SAP primary, CUIC_NAME fallback)
Category 1 (LEFT JOIN, EID can be NULL)
jcrew/gold/fct_jcr_csat.sql
FCT_JCR_CSAT
One row per CSAT record
JCR_GDRIVE_CSAT
bi_roster_jcrew (SAP)
Category 1 (LEFT JOIN, EID can be NULL)
jcrew/gold/fct_jcr_fcr.sql
FCT_JCR_FCR
One row per agent × channel × contact reason × week
JCR_GDRIVE_FCR
bi_roster_jcrew (CUIC_NAME)
Category 1 (LEFT JOIN, EID can be NULL)
jcrew/gold/fct_jcr_aht_ops.sql
FCT_JCR_AHT_OPS
One row per agent × interval × media_type
JCR_GDRIVE_AGENT_DAILY_AHT
bi_roster_jcrew_new (AGENT_ID → GENESYS_ID)
Mixed — LEFT JOIN, non-XO retained (spike #1269) 🟡 New
jcrew/gold/fct_jcr_interactions.sql
FCT_JCR_INTERACTIONS
One row per conversation (last-agent-wins)
JCR_GDRIVE_INTERACTIONS
bi_roster_jcrew_new (last USERS_INTERACTED token → USER_NAME)
Mixed — LEFT JOIN, BPO_GROUP = XtendOps / J.Crew Corporate, non-XO retained (#1275/#1347) 🟡 New
jcrew/gold/fct_jcr_qa.sql
FCT_JCR_QA
One row per conversation (latest scored evaluation; all-Retracted/Deleted dropped)
JCR_GDRIVE_QA
bi_roster_jcrew_new (TRIM(EVALUATED_AGENT) → USER_NAME)
Mixed — LEFT JOIN, BPO_GROUP = XtendOps / J.Crew Corporate, non-XO retained (#1290/#1349) 🟡 New
jcrew/gold/fct_jcr_agent_daily_aht.sql
FCT_JCR_AGENT_DAILY_AHT
One row per AGENT_ID × interval × media_type
JCR_GDRIVE_AGENT_DAILY_AHT
bi_roster_jcrew_new (3-key COALESCE: AGENT_ID→GENESYS_ID, EMAIL→ACCOUNT_EMAIL, AGENT_NAME→USER_NAME)
Mixed — non-XO retained; BPO_GROUP = XtendOps / J.Crew In-House / J.Crew Corporate (#1343) ✅ Production
jcrew/gold/fct_jcr_agent_status.sql
FCT_JCR_AGENT_STATUS
One row per AGENT_ID × interval (daily); no channel
JCR_GDRIVE_AGENT_STATUS
bi_roster_jcrew_new (3-key COALESCE: AGENT_ID→GENESYS_ID, EMAIL→ACCOUNT_EMAIL, AGENT_NAME→USER_NAME)
Mixed — non-XO retained; BPO_GROUP = XtendOps / J.Crew Corporate (no site field, no In-House bucket) (#1322) 🟡 New
Aggregates (agg_)
Model File
Table Name
Grain
Source
Status
jcrew/gold/agg_jcr_aaa_daily.sql
AGG_JCR_AAA_DAILY
(date, EID, site, skill)
fct_jcr_aaa
✅ Production
jcrew/gold/agg_jcr_csat_channel_daily.sql
AGG_JCR_CSAT_CHANNEL_DAILY
(date, EID, site, channel)
fct_jcr_csat
✅ Production
jcrew/gold/agg_jcr_fcr_channel_weekly.sql
AGG_JCR_FCR_CHANNEL_WEEKLY
(week_date, EID, channel, site)
fct_jcr_fcr
✅ Production
jcrew/gold/agg_jcr_aht_channel_daily_ops.sql
AGG_JCR_AHT_CHANNEL_DAILY_OPS
(date, agent_id, media_type) — XO + non-XO retained, keyed on agent_id
fct_jcr_aht_ops
🟡 New
jcrew/gold/agg_jcr_interactions_channel_daily.sql
AGG_JCR_INTERACTIONS_CHANNEL_DAILY
(date, media_type, BPO_GROUP) — conversation volume + duration sums
fct_jcr_interactions
🟡 New
jcrew/gold/agg_jcr_qa_channel_daily.sql
AGG_JCR_QA_CHANNEL_DAILY
(date, evaluated_agent, media_type) — score sums/counts, carries BPO_GROUP; XO + non-XO retained
fct_jcr_qa
🟡 New
jcrew/gold/agg_jcr_agent_daily_aht.sql
AGG_JCR_AGENT_DAILY_AHT
(INTERVAL_DATE, AGENT_ID, MEDIA_TYPE) — HANDLE > 0; XO + non-XO retained, keyed on agent_id (#1343)
fct_jcr_agent_daily_aht
✅ Production
jcrew/gold/agg_jcr_agent_status_daily.sql
AGG_JCR_AGENT_STATUS_DAILY
(INTERVAL_DATE, AGENT_ID) — LOGGED_IN > 0; XO + non-XO retained, keyed on agent_id (#1322)
fct_jcr_agent_status
🟡 New
jcrew/gold/agg_jcr_agent_metrics_daily.sql
AGG_JCR_AGENT_METRICS_DAILY
(date, EID, site, channel, SOURCE) — compact wide; ~4 rows per agent × date (Phone, Email, Chat, ALL); CSAT survey cols merged onto Chat AAA row; FCR at weekly grain
agg_jcr_aaa_daily, agg_jcr_csat_channel_daily, agg_jcr_fcr_channel_weekly
✅ Production
agg_jcr_agent_metrics_daily full column set:
Column
Type
Populated for
date
DATE
All rows
EID
VARCHAR
All rows
site
VARCHAR
All rows
channel
VARCHAR
All rows (Phone, Email, Chat, ALL for AAA; Chat, Email, Phone for FCR)
source
VARCHAR
All rows (AAA or FCR)
is_xo_agent
BOOLEAN
AAA rows; NULL for FCR
associate
VARCHAR
AAA rows; NULL for FCR
SAP
VARCHAR
AAA rows; NULL for FCR
supervisor
VARCHAR
AAA rows; NULL for FCR
skill
VARCHAR
AAA rows (collapsed via MAX); NULL for FCR
YEAR
NUMBER
AAA rows; NULL for FCR
SEASON
VARCHAR
AAA rows; NULL for FCR
QUARTER
VARCHAR
AAA rows; NULL for FCR
MONTH
VARCHAR
AAA rows; NULL for FCR
WKOF_MON
VARCHAR
AAA rows; NULL for FCR
ACTIVE
BOOLEAN
AAA rows; NULL for FCR
volume
NUMBER
AAA rows (interactions/handled_emails/nchat_completed/total); NULL for FCR
handle_time_total
NUMBER
Phone/Email/Chat AAA rows; NULL for ALL and FCR
qa_audits_total
NUMBER
Phone/Email/Chat AAA rows; NULL for ALL and FCR
qa_score_sum
NUMBER
Phone/Email/Chat AAA rows; NULL for ALL and FCR
log_time_secs
NUMBER
ALL AAA rows only
aux_secs
NUMBER
ALL AAA rows only
wrap_time_secs
NUMBER
ALL AAA rows only
ja_calls_made
NUMBER
ALL AAA rows only
ch_csat_score_sum
NUMBER
Chat AAA rows only
ch_csat_total
NUMBER
Chat AAA rows only
csat_rating_total
NUMBER
Chat AAA rows only (NULL when no CSAT match)
csat_survey_count
NUMBER
Chat AAA rows only
csat_bad_count
NUMBER
Chat AAA rows only
csat_neutral_count
NUMBER
Chat AAA rows only
csat_good_count
NUMBER
Chat AAA rows only
fcr_count
NUMBER
FCR rows only
fcr_eligible_contacts
NUMBER
FCR rows only
Reports (rpt_)
Model File
View Name
Grain
Source
Status
jcrew/gold/rpt_jcr_agent_performance.sql
RPT_JCR_AGENT_PERFORMANCE
(week_date, EID, channel, site)
agg_jcr_csat_channel_daily, agg_jcr_fcr_channel_weekly
✅ Production
jcrew/gold/rpt_jcr_agent_metrics_daily.sql
RPT_JCR_AGENT_METRICS_DAILY
(date, EID, site, channel, SOURCE)
agg_jcr_agent_metrics_daily, bi_roster_jcrew_new
✅ Production
jcrew/gold/rpt_jcr_aht_account_ops.sql
RPT_JCR_AHT_ACCOUNT_OPS
(date, media_type, agent_group=XO/Non-XO) — account AHT, XO vs non-XO
agg_jcr_aht_channel_daily_ops
🟡 New
jcrew/gold/rpt_jcr_interactions_volume.sql
RPT_JCR_INTERACTIONS_VOLUME
(date, media_type, BPO_GROUP) — account conversation volume + AHT by BPO group
agg_jcr_interactions_channel_daily
🟡 New
jcrew/gold/rpt_jcr_qa_agent_scorecard.sql
RPT_JCR_QA_AGENT_SCORECARD
(date, evaluated_agent, media_type) — per-agent QA avg score + critical, carries BPO_GROUP
agg_jcr_qa_channel_daily
🟡 New
jcrew/gold/rpt_jcr_qa_account.sql
RPT_JCR_QA_ACCOUNT
(date, media_type, BPO_GROUP) — account QA by BPO group
agg_jcr_qa_channel_daily
🟡 New
jcrew/gold/rpt_jcr_handle_time_daily.sql
RPT_JCR_HANDLE_TIME_DAILY
(INTERVAL_DATE, AGENT_ID, MEDIA_TYPE) — per-agent AHT/handle-time KPIs, all BPO groups; roster attrs join on EID (NULL for non-XO) (#1343)
agg_jcr_agent_daily_aht, bi_roster_jcrew_new
✅ Production
jcrew/gold/rpt_jcr_agent_status_daily.sql
RPT_JCR_AGENT_STATUS_DAILY
(INTERVAL_DATE, AGENT_ID) — per-agent adherence/occupancy rates, all BPO groups; roster attrs join on EID (NULL for non-XO) (#1322)
agg_jcr_agent_status_daily, bi_roster_jcrew_new
🟡 New
jcrew/gold/exp_jcr_interactions_join_coverage.sql
EXP_JCR_INTERACTIONS_JOIN_COVERAGE
account-wide (1 row) — explode vs direct USER_NAME join coverage comparison (spike #1275)
jcr_gdrive_interactions, bi_roster_jcrew_new
🟡 New (exp)
Silver Models — Core / Shared (CORE_DB.SILVER)
All materialized as table, rebuilt each run from the latest BATCH_ID. One row per employee (current state). Tagged core_bi_roster.
PH HR Roster
Model File
Table Name
Grain
Source Bronze Table
Status
core/silver/ph_hr_roster_active.sql
PH_HR_ROSTER_ACTIVE
One row per EMPLOYEE_ID
PH_HR_ROSTER_ACTIVE
✅ Production
core/silver/ph_hr_roster_inactive.sql
PH_HR_ROSTER_INACTIVE
One row per EMPLOYEE_ID
PH_HR_ROSTER_INACTIVE
✅ Production
BI Rosters (Standard_Roster Google Sheet)
Model File
Table Name
Client
Status
core/silver/bi_roster_warbyparker.sql
BI_ROSTER_WARBYPARKER
Warby Parker
✅ Production
core/silver/bi_roster_bi_team.sql
BI_ROSTER_BI_TEAM
BI Team
✅ Production
core/silver/bi_roster_staff_mx.sql
BI_ROSTER_STAFF_MX
Staff MX
✅ Production
core/silver/bi_roster_morganandmorgan.sql
BI_ROSTER_MORGANANDMORGAN
Morgan & Morgan
✅ Production
core/silver/bi_roster_quadlock.sql
BI_ROSTER_QUADLOCK
Quad Lock
✅ Production
core/silver/bi_roster_ionos.sql
BI_ROSTER_IONOS
IONOS
✅ Production
core/silver/bi_roster_flare.sql
BI_ROSTER_FLARE
Flare
✅ Production
core/silver/bi_roster_postman_law.sql
BI_ROSTER_POSTMAN_LAW
Postman Law
✅ Production
core/silver/bi_roster_rugiet.sql
BI_ROSTER_RUGIET
Rugiet
✅ Production
core/silver/bi_roster_jcrew.sql
BI_ROSTER_JCREW
J.Crew
✅ Production
core/silver/bi_roster_keller_postman.sql
BI_ROSTER_KELLER_POSTMAN
Keller Postman
✅ Production
core/silver/bi_roster_condenast.sql
BI_ROSTER_CONDENAST
Condé Nast
✅ Production
core/silver/bi_roster_within_health.sql
BI_ROSTER_WITHIN_HEALTH
Within Health
✅ Production
core/silver/bi_roster_western_dental.sql
BI_ROSTER_WESTERN_DENTAL
Western Dental
✅ Production
core/silver/bi_roster_match.sql
BI_ROSTER_MATCH
Match
✅ Production
core/silver/bi_roster_logitech.sql
BI_ROSTER_LOGITECH
Logitech
✅ Production
core/silver/bi_roster_drfirst.sql
BI_ROSTER_DRFIRST
DrFirst
✅ Production
core/silver/bi_roster_goodfood.sql
BI_ROSTER_GOODFOOD
GoodFood
✅ Production
core/silver/bi_roster_imagine_wellness.sql
BI_ROSTER_IMAGINE_WELLNESS
Imagine Wellness
✅ Production
core/silver/bi_roster_nba.sql
BI_ROSTER_NBA
NBA
✅ Production
core/silver/bi_roster_trim.sql
BI_ROSTER_TRIM
Trim
✅ Production
core/silver/bi_roster_ur_labs.sql
BI_ROSTER_UR_LABS
UR Labs
✅ Production
core/silver/bi_roster_flex_mg.sql
BI_ROSTER_FLEX_MG
Flex MG
✅ Production
core/silver/bi_roster_cartamundi.sql
BI_ROSTER_CARTAMUNDI
Cartamundi
✅ Production
core/silver/bi_roster_hellofresh.sql
BI_ROSTER_HELLOFRESH
HelloFresh
✅ Production
core/silver/bi_roster_smashtech.sql
BI_ROSTER_SMASHTECH
Smashtech
✅ Production
Silver Rules (Core BI Rosters) :
- Materialized as table (not dynamic table — rebuilt each run)
- No JOINs, no filters beyond latest BATCH_ID
- Date columns cast with TRY_TO_DATE(), numbers with TRY_TO_NUMBER()
- Deduplicated by EID (natural key, not hashed)
Gold Models — Core / Shared (CORE_DB.GOLD)
Reports (rpt_)
Model File
View Name
Purpose
Status
core/gold/rpt_master_roster.sql
RPT_MASTER_ROSTER
Cross-client active employee view, deduped by email/EID
✅ Production
Dimensions (dim_employee_*)
Employee dimensions for all clients. SCD Type 1 — latest state wins. Per ADR 010 , all employee dimensions live in CORE_DB regardless of client.
Model File
Table Name
Source Silver
Client
Status
core/gold/dim_employee_warbyparker.sql
DIM_EMPLOYEE_WARBYPARKER
BI_ROSTER_WARBYPARKER
Warby Parker
✅ Production
core/gold/dim_employee_bi_team.sql
DIM_EMPLOYEE_BI_TEAM
BI_ROSTER_BI_TEAM
BI Team
✅ Production
core/gold/dim_employee_staff_mx.sql
DIM_EMPLOYEE_STAFF_MX
BI_ROSTER_STAFF_MX
Staff MX
✅ Production
core/gold/dim_employee_morganandmorgan.sql
DIM_EMPLOYEE_MORGANANDMORGAN
BI_ROSTER_MORGANANDMORGAN
Morgan & Morgan
✅ Production
core/gold/dim_employee_quadlock.sql
DIM_EMPLOYEE_QUADLOCK
BI_ROSTER_QUADLOCK
Quad Lock
✅ Production
core/gold/dim_employee_ionos.sql
DIM_EMPLOYEE_IONOS
BI_ROSTER_IONOS
IONOS
✅ Production
core/gold/dim_employee_flare.sql
DIM_EMPLOYEE_FLARE
BI_ROSTER_FLARE
Flare
✅ Production
core/gold/dim_employee_postman_law.sql
DIM_EMPLOYEE_POSTMAN_LAW
BI_ROSTER_POSTMAN_LAW
Postman Law
✅ Production
core/gold/dim_employee_rugiet.sql
DIM_EMPLOYEE_RUGIET
BI_ROSTER_RUGIET
Rugiet
✅ Production
core/gold/dim_employee_jcrew.sql
DIM_EMPLOYEE_JCREW
BI_ROSTER_JCREW
J.Crew
✅ Production
core/gold/dim_employee_keller_postman.sql
DIM_EMPLOYEE_KELLER_POSTMAN
BI_ROSTER_KELLER_POSTMAN
Keller Postman
✅ Production
core/gold/dim_employee_condenast.sql
DIM_EMPLOYEE_CONDENAST
BI_ROSTER_CONDENAST
Condé Nast
✅ Production
core/gold/dim_employee_within_health.sql
DIM_EMPLOYEE_WITHIN_HEALTH
BI_ROSTER_WITHIN_HEALTH
Within Health
✅ Production
core/gold/dim_employee_western_dental.sql
DIM_EMPLOYEE_WESTERN_DENTAL
BI_ROSTER_WESTERN_DENTAL
Western Dental
✅ Production
core/gold/dim_employee_match.sql
DIM_EMPLOYEE_MATCH
BI_ROSTER_MATCH
Match
✅ Production
core/gold/dim_employee_logitech.sql
DIM_EMPLOYEE_LOGITECH
BI_ROSTER_LOGITECH
Logitech
✅ Production
core/gold/dim_employee_drfirst.sql
DIM_EMPLOYEE_DRFIRST
BI_ROSTER_DRFIRST
DrFirst
✅ Production
core/gold/dim_employee_goodfood.sql
DIM_EMPLOYEE_GOODFOOD
BI_ROSTER_GOODFOOD
GoodFood
✅ Production
core/gold/dim_employee_imagine_wellness.sql
DIM_EMPLOYEE_IMAGINE_WELLNESS
BI_ROSTER_IMAGINE_WELLNESS
Imagine Wellness
✅ Production
core/gold/dim_employee_nba.sql
DIM_EMPLOYEE_NBA
BI_ROSTER_NBA
NBA
✅ Production
core/gold/dim_employee_trim.sql
DIM_EMPLOYEE_TRIM
BI_ROSTER_TRIM
Trim
✅ Production
core/gold/dim_employee_ur_labs.sql
DIM_EMPLOYEE_UR_LABS
BI_ROSTER_UR_LABS
UR Labs
✅ Production
core/gold/dim_employee_flex_mg.sql
DIM_EMPLOYEE_FLEX_MG
BI_ROSTER_FLEX_MG
Flex MG
✅ Production
core/gold/dim_employee_cartamundi.sql
DIM_EMPLOYEE_CARTAMUNDI
BI_ROSTER_CARTAMUNDI
Cartamundi
✅ Production
core/gold/dim_employee_hellofresh.sql
DIM_EMPLOYEE_HELLOFRESH
BI_ROSTER_HELLOFRESH
HelloFresh
✅ Production
core/gold/dim_employee_smashtech.sql
DIM_EMPLOYEE_SMASHTECH
BI_ROSTER_SMASHTECH
Smashtech
✅ Production
core/gold/dim_employee_ph.sql
DIM_EMPLOYEE_PH
PH_HR_ROSTER_ACTIVE
PH (internal)
✅ Production
Seeds
Seed File
Table Name
Schema
Purpose
Updated
seeds/warbyparker/ai_agents.csv
AI_AGENTS
WBP_DB.GOLD
AI wave enablement dates per agent
As needed
Source Definitions (sources.yml)
Source Name
Database
Schema
Tables
warbyparker_bronze
WBP_DB / WBP_DB_DEV
BRONZE
gladly_contact_timestamps, gladly_conversation_timestamps, gladly_work_sessions, gladly_agent_durations
warbyparker_gsheets
WBP_DB / WBP_DB_DEV
BRONZE
gsheet_csat, gsheet_qa, gsheet_qa_partner
core_bronze
CORE_DB / CORE_DB_DEV
BRONZE
gsheet_bi_roster_* (26 tables), ph_hr_roster_active, ph_hr_roster_inactive
condenast_maestro
MAESTRO_DB
PUBLIC
answers, questions, sections, templates, question_scores, section_scores, helpdesk_id_email
operations_bamboohr
OPERATIONS
BAMBOOHR
ROSTER_CONDENAST (legacy — fct_cnd_qa still uses this; pending migration)
Dependency Graph
Bronze Tables (xo-foundry)
│
▼
Silver Models (dbt tables)
├── wbp_gladly_contact_timestamps
├── wbp_gladly_conversation_timestamps
├── wbp_gladly_work_sessions
├── wbp_gladly_agent_durations
├── wbp_gsheet_csat
├── wbp_gsheet_qa
└── wbp_gsheet_qa_partner
│
▼
Gold Facts (dbt tables)
├── fct_wbp_contacts ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
│ ◄── WBP_DB.SILVER.WBP_GLADLY_WORK_SESSIONS
│ ▲
│ int_wbp_contacts_hold (ephemeral)
├── fct_wbp_conversations ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_csat ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_qa_internal ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_qa_partner ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_work_sessions ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_agent_durations
├── fct_wbp_agent_channel_summary ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EMAIL → EID)
├── fct_wbp_agent_summary_daily ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EMAIL → EID)
└── fct_wbp_conversation_topics
│
▼
Gold Aggregates (dbt tables)
├── agg_wbp_agent_contacts_daily ← fct_wbp_contacts + fct_wbp_agent_durations
├── agg_wbp_agent_performance_daily ← fct_wbp_contacts + fct_wbp_work_sessions
├── agg_wbp_csat_daily ← fct_wbp_csat
├── agg_wbp_qa_daily ← fct_wbp_qa_internal + fct_wbp_qa_partner
├── agg_wbp_qa_attributes_daily ← fct_wbp_qa_internal + fct_wbp_qa_partner
└── agg_wbp_agent_summary_channel_daily ← fct_wbp_agent_channel_summary
│
▼
Gold Reports (dbt views)
├── rpt_wbp_agent_performance
├── rpt_wbp_email_daily
├── rpt_wbp_xoos_agent_performance
├── rpt_wbp_agent_performance_channel
├── rpt_wbp_agent_productivity_daily
├── rpt_wbp_account_performance_channel_daily
├── exp_wbp_agent_qa_trend
├── exp_wbp_ai_agent_concurrency_daily
├── exp_wbp_ai_agents_durations_daily
├── exp_wbp_ai_agent_qa_week_over_week
├── exp_wbp_ai_agent_qa_month_over_month
├── exp_wbp_ai_qa_attributes_week_over_week
├── exp_wbp_ai_qa_attributes_month_over_month
├── exp_wbp_ai_wave_qa_week_over_week
├── exp_wbp_ai_wave_qa_month_over_month
├── exp_wbp_ai_wave_qa_quarter_over_quarter
├── exp_wbp_ai_vs_nonai_qa_wow
├── exp_wbp_ai_vs_nonai_qa_mom
├── exp_wbp_ai_vs_nonai_qa_qoq
├── exp_wbp_gladly_blended_ai_productivity
├── exp_wbp_gladly_blended_ai_productivity_weekly
└── exp_wbp_gladly_blended_ai_productivity_channel_daily
│
▼
Tableau / Consumers
Planned Models (Not Yet Built)
Track upcoming models here so the team knows what's coming.
Model
Type
Client
Priority
Notes
agg_wbp_agent_daily_conversations
Aggregate
WBP
High
Conversation KPIs by agent/day; depends on fct_wbp_conversations
rpt_wbp_agent_performance_v2
Report
WBP
Medium
Post Phase ⅚: full enrichment with macros + KPI registry
silver/condenast/*
Silver
CND
Medium
Sprout Social messages Silver layer