=== Report 1: B2B Wholesale Pipeline: Opportunities by Merchant and Stage (written by Grace) === Engineer's note: Grain is tenant x stage as requested. avg_opportunity_amount/currency_code are computed per (tenant, stage) without FX conversion; if a tenant's opportunities span more than one currency, currency_code shows only the lexically-smallest code present and the average mixes currencies for that row (per the request's assumption of one currency per tenant, this should be rare/absent). Please have the analyst check row count and flag any wholesale tenant that returns zero stages or zero opportunity rows, as that would indicate the industry filter missed a merchant or that merchant doesn't use the CRM/pipeline module - I could not verify this without reading data. REPORT: B2B Wholesale Pipeline: Opportunities by Merchant and Stage QUESTION: Across our B2B wholesale merchants, at which pipeline stage do the most opportunities get stuck or lost — i.e. which stage is the graveyard? merchant | pipeline_name | stage_name | stage_order | default_win_probability | opportunities_open | opportunities_closed_won | opportunities_closed_lost | avg_opportunity_amount | currency_code ------------------------------+---------------+---------------+-------------+-------------------------+--------------------+--------------------------+---------------------------+------------------------+-------------- Ballycorran Industrial Supply | New business | Prospecting | 0 | 0.1000 | 0 | 0 | 0 | NULL | NULL Ballycorran Industrial Supply | Renewals | Renewal due | 0 | 0.6000 | 0 | 0 | 0 | NULL | NULL Ballycorran Industrial Supply | Renewals | Proposal sent | 1 | 0.7500 | 0 | 0 | 0 | NULL | NULL Ballycorran Industrial Supply | New business | Qualification | 1 | 0.2500 | 0 | 0 | 0 | NULL | NULL Ballycorran Industrial Supply | New business | Proposal | 2 | 0.5000 | 0 | 0 | 0 | NULL | NULL Ballycorran Industrial Supply | Renewals | Renewed | 2 | 1.0000 | 0 | 74 | 0 | 4374.32 | EUR Ballycorran Industrial Supply | Renewals | Churned | 3 | 0.0000 | 0 | 0 | 17 | 4494.12 | EUR Ballycorran Industrial Supply | New business | Negotiation | 3 | 0.7500 | 0 | 0 | 0 | NULL | NULL Ballycorran Industrial Supply | New business | Closed Won | 4 | 1.0000 | 0 | 63 | 0 | 4088.89 | EUR Ballycorran Industrial Supply | New business | Closed Lost | 5 | 0.0000 | 0 | 0 | 13 | 3938.46 | EUR Castell Fasteners | New business | Prospecting | 0 | 0.1000 | 0 | 0 | 0 | NULL | NULL Castell Fasteners | Renewals | Renewal due | 0 | 0.6000 | 0 | 0 | 0 | NULL | NULL Castell Fasteners | Renewals | Proposal sent | 1 | 0.7500 | 0 | 0 | 0 | NULL | NULL Castell Fasteners | New business | Qualification | 1 | 0.2500 | 0 | 0 | 0 | NULL | NULL Castell Fasteners | New business | Proposal | 2 | 0.5000 | 0 | 0 | 0 | NULL | NULL Castell Fasteners | Renewals | Renewed | 2 | 1.0000 | 0 | 38 | 0 | 11002.63 | USD Castell Fasteners | Renewals | Churned | 3 | 0.0000 | 0 | 0 | 4 | 6175.0 | USD Castell Fasteners | New business | Negotiation | 3 | 0.7500 | 0 | 0 | 0 | NULL | NULL Castell Fasteners | New business | Closed Won | 4 | 1.0000 | 0 | 31 | 0 | 7877.42 | USD Castell Fasteners | New business | Closed Lost | 5 | 0.0000 | 0 | 0 | 5 | 6300.0 | USD Hanse Industriebedarf | New business | Prospecting | 0 | 0.1000 | 0 | 0 | 0 | NULL | NULL Hanse Industriebedarf | Renewals | Renewal due | 0 | 0.6000 | 0 | 0 | 0 | NULL | NULL Hanse Industriebedarf | Renewals | Proposal sent | 1 | 0.7500 | 0 | 0 | 0 | NULL | NULL Hanse Industriebedarf | New business | Qualification | 1 | 0.2500 | 0 | 0 | 0 | NULL | NULL Hanse Industriebedarf | New business | Proposal | 2 | 0.5000 | 0 | 0 | 0 | NULL | NULL Hanse Industriebedarf | Renewals | Renewed | 2 | 1.0000 | 0 | 19 | 0 | 7410.53 | EUR Hanse Industriebedarf | Renewals | Churned | 3 | 0.0000 | 0 | 0 | 1 | 5600.0 | EUR Hanse Industriebedarf | New business | Negotiation | 3 | 0.7500 | 0 | 0 | 0 | NULL | NULL Hanse Industriebedarf | New business | Closed Won | 4 | 1.0000 | 0 | 15 | 0 | 5553.33 | EUR Hanse Industriebedarf | New business | Closed Lost | 5 | 0.0000 | 0 | 0 | 2 | 5200.0 | EUR Midland Safety Wear | New business | Prospecting | 0 | 0.1000 | 0 | 0 | 0 | NULL | NULL Midland Safety Wear | Renewals | Renewal due | 0 | 0.6000 | 1 | 0 | 0 | 2600.0 | EUR Midland Safety Wear | Renewals | Proposal sent | 1 | 0.7500 | 3 | 0 | 0 | 10366.67 | EUR Midland Safety Wear | New business | Qualification | 1 | 0.2500 | 0 | 0 | 0 | NULL | NULL Midland Safety Wear | New business | Proposal | 2 | 0.5000 | 0 | 0 | 0 | NULL | NULL Midland Safety Wear | Renewals | Renewed | 2 | 1.0000 | 0 | 44 | 0 | 5984.09 | EUR Midland Safety Wear | Renewals | Churned | 3 | 0.0000 | 0 | 0 | 11 | 4990.91 | EUR Midland Safety Wear | New business | Negotiation | 3 | 0.7500 | 0 | 0 | 0 | NULL | NULL Midland Safety Wear | New business | Closed Won | 4 | 1.0000 | 0 | 34 | 0 | 5526.47 | EUR Midland Safety Wear | New business | Closed Lost | 5 | 0.0000 | 0 | 0 | 6 | 4300.0 | EUR Polder Packaging | New business | Prospecting | 0 | 0.1000 | 0 | 0 | 0 | NULL | NULL Polder Packaging | Renewals | Renewal due | 0 | 0.6000 | 0 | 0 | 0 | NULL | NULL Polder Packaging | Renewals | Proposal sent | 1 | 0.7500 | 0 | 0 | 0 | NULL | NULL Polder Packaging | New business | Qualification | 1 | 0.2500 | 0 | 0 | 0 | NULL | NULL Polder Packaging | New business | Proposal | 2 | 0.5000 | 0 | 0 | 0 | NULL | NULL Polder Packaging | Renewals | Renewed | 2 | 1.0000 | 0 | 9 | 0 | 5388.89 | EUR Polder Packaging | Renewals | Churned | 3 | 0.0000 | 0 | 0 | 4 | 3275.0 | EUR Polder Packaging | New business | Negotiation | 3 | 0.7500 | 0 | 0 | 0 | NULL | NULL Polder Packaging | New business | Closed Won | 4 | 1.0000 | 0 | 12 | 0 | 4908.33 | EUR Polder Packaging | New business | Closed Lost | 5 | 0.0000 | 0 | 0 | 4 | 10875.0 | EUR (50 rows) === Report 2: B2B Wholesale Deal Cycle Time Trend by Month (written by Viktor) === Engineer's note: Cycle time is approximated as closed_at - created_at on the opportunity itself, since opportunities carry no FK back to the originating lead (known limitation, as requested). Win rate, avg and median cycle days are rounded to 1 decimal; monthly grain uses calendar_days.month_label keyed off closed_at. REPORT: B2B Wholesale Deal Cycle Time Trend by Month QUESTION: From an opportunity being opened to it closing (won or lost), how long does that take for our B2B wholesale merchants, and is that cycle time getting longer or shorter over the last three years? month | opportunities_closed | closed_won | closed_lost | win_rate_pct | avg_cycle_days | median_cycle_days --------+----------------------+------------+-------------+--------------+----------------+------------------ 2023-01 | 5 | 5 | 0 | 100.0 | 12.0 | 15.0 2023-02 | 5 | 5 | 0 | 100.0 | 16.6 | 12.0 2023-03 | 8 | 5 | 3 | 62.5 | 22.8 | 21.5 2023-04 | 5 | 5 | 0 | 100.0 | 17.2 | 21.0 2023-05 | 6 | 5 | 1 | 83.3 | 24.2 | 22.5 2023-06 | 9 | 6 | 3 | 66.7 | 21.1 | 24.0 2023-07 | 5 | 3 | 2 | 60.0 | 33.6 | 34.0 2023-08 | 7 | 6 | 1 | 85.7 | 17.4 | 16.0 2023-09 | 10 | 8 | 2 | 80.0 | 30.5 | 35.0 2023-10 | 9 | 8 | 1 | 88.9 | 26.1 | 25.0 2023-11 | 12 | 8 | 4 | 66.7 | 24.5 | 23.0 2023-12 | 7 | 4 | 3 | 57.1 | 22.7 | 26.0 2024-01 | 11 | 9 | 2 | 81.8 | 15.6 | 16.0 2024-02 | 10 | 10 | 0 | 100.0 | 22.9 | 24.5 2024-03 | 8 | 8 | 0 | 100.0 | 26.5 | 30.0 2024-04 | 8 | 8 | 0 | 100.0 | 19.4 | 20.5 2024-05 | 12 | 10 | 2 | 83.3 | 21.6 | 20.0 2024-06 | 6 | 4 | 2 | 66.7 | 27.7 | 26.5 2024-07 | 10 | 7 | 3 | 70.0 | 28.8 | 26.5 2024-08 | 10 | 10 | 0 | 100.0 | 21.3 | 19.0 2024-09 | 7 | 7 | 0 | 100.0 | 25.9 | 23.0 2024-10 | 19 | 15 | 4 | 78.9 | 24.3 | 24.0 2024-11 | 12 | 8 | 4 | 66.7 | 24.1 | 21.5 2024-12 | 11 | 6 | 5 | 54.5 | 24.2 | 26.0 2025-01 | 11 | 8 | 3 | 72.7 | 25.5 | 26.0 2025-02 | 11 | 7 | 4 | 63.6 | 32.2 | 35.0 2025-03 | 12 | 9 | 3 | 75.0 | 20.5 | 21.0 2025-04 | 13 | 11 | 2 | 84.6 | 21.5 | 19.0 2025-05 | 10 | 10 | 0 | 100.0 | 26.7 | 26.5 2025-06 | 9 | 8 | 1 | 88.9 | 22.9 | 26.0 2025-07 | 11 | 11 | 0 | 100.0 | 21.8 | 22.0 2025-08 | 11 | 10 | 1 | 90.9 | 21.5 | 24.0 2025-09 | 14 | 13 | 1 | 92.9 | 22.7 | 22.0 2025-10 | 16 | 14 | 2 | 87.5 | 27.2 | 31.0 2025-11 | 18 | 13 | 5 | 72.2 | 26.4 | 27.0 2025-12 | 9 | 6 | 3 | 66.7 | 25.2 | 19.0 (36 rows) === Report 3: B2B Wholesale Opportunities: Won vs Lost Characteristics (written by Ines) === Engineer's note: Amounts converted to EUR using the exchange rate as of the closed_at date, falling back to the most recent prior available rate (covers weekends/gaps) per house standards. Activities-before-close counts only activities linked directly to the opportunity via activities.opportunity_id with occurred_at <= closed_at. REPORT: B2B Wholesale Opportunities: Won vs Lost Characteristics QUESTION: Among closed B2B wholesale opportunities, what reliably differs between the ones we won and the ones we lost — deal size, touches/activities before close, days open, or how concentrated they are among accounts and reps? outcome | opportunities | avg_amount_eur | median_amount_eur | avg_activities_before_close | avg_days_open | distinct_accounts | distinct_reps --------+---------------+----------------+-------------------+-----------------------------+---------------+-------------------+-------------- won | 339 | 5736.76 | 4500.00 | 3.0 | 18.9 | 155 | 10 lost | 67 | 4946.74 | 4200.00 | 3.48 | 33.1 | 67 | 9 (2 rows)