Monthly PL
Monthly PL Build
29 steps · October 7, 2026
No one's real data is in this template. It contains the recipe — steps, column names and SQL logic (plus sample data for demos). When you run it, your data is processed in your own browser; your files are never uploaded.
What data it expects
TB_2024-09.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2024-10.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2024-11.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2024-12.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-01.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-02.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-03.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-04.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-05.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-06.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-07.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-08.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-09.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-10.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-11.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2025-12.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-01.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-02.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-03.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-04.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-05.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-06.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-07.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
TB_2026-08.csv
period_end · Date32<DAY>fiscal_year · Int64account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8debit · Float64credit · Float64net · Float64
chart_of_accounts.csv
account_id · Int64account_name · Utf8account_type · Utf8account_subtype · Utf8normal_balance · Utf8
Connect QuickBooks Online or drop a CSV / Excel export with a similar layout — the AI adapts the workflow if your columns differ.
How it works — every step, readable
- 01TB_2024-09
SELECT * FROM read_csv_auto('TB_2024-09.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 02TB_2024-10
SELECT * FROM read_csv_auto('TB_2024-10.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 03TB_2024-11
SELECT * FROM read_csv_auto('TB_2024-11.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 04TB_2024-12
SELECT * FROM read_csv_auto('TB_2024-12.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 05TB_2025-01
SELECT * FROM read_csv_auto('TB_2025-01.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 06TB_2025-02
SELECT * FROM read_csv_auto('TB_2025-02.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 07TB_2025-03
SELECT * FROM read_csv_auto('TB_2025-03.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 08TB_2025-04
SELECT * FROM read_csv_auto('TB_2025-04.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 09TB_2025-05
SELECT * FROM read_csv_auto('TB_2025-05.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 10TB_2025-06
SELECT * FROM read_csv_auto('TB_2025-06.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 11TB_2025-07
SELECT * FROM read_csv_auto('TB_2025-07.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 12TB_2025-08
SELECT * FROM read_csv_auto('TB_2025-08.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 13TB_2025-09
SELECT * FROM read_csv_auto('TB_2025-09.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 14TB_2025-10
SELECT * FROM read_csv_auto('TB_2025-10.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 15TB_2025-11
SELECT * FROM read_csv_auto('TB_2025-11.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 16TB_2025-12
SELECT * FROM read_csv_auto('TB_2025-12.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 17TB_2026-01
SELECT * FROM read_csv_auto('TB_2026-01.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 18TB_2026-02
SELECT * FROM read_csv_auto('TB_2026-02.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 19TB_2026-03
SELECT * FROM read_csv_auto('TB_2026-03.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 20TB_2026-04
SELECT * FROM read_csv_auto('TB_2026-04.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 21TB_2026-05
SELECT * FROM read_csv_auto('TB_2026-05.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 22TB_2026-06
SELECT * FROM read_csv_auto('TB_2026-06.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 23TB_2026-07
SELECT * FROM read_csv_auto('TB_2026-07.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 24TB_2026-08
SELECT * FROM read_csv_auto('TB_2026-08.csv', auto_type_candidates=['BOOLEAN','BIGINT','DOUBLE','DATE','TIMESTAMP','VARCHAR']) - 25Union TBs Sep 2024–Apr 2025appends result sets (e.g. a TOTAL row)
SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_1 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_2 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_3 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_4 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_5 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_6 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_7 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_8 - 26Union TBs May 2025–Dec 2025appends result sets (e.g. a TOTAL row)
SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_1 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_2 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_3 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_4 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_5 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_6 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_7 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_8 - 27Union TBs Jan 2026–Aug 2026appends result sets (e.g. a TOTAL row)
SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_1 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_2 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_3 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_4 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_5 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_6 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_7 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_8 - 28Union All Monthly Trial Balancesappends result sets (e.g. a TOTAL row)
SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_1 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_2 UNION ALL SELECT period_end, fiscal_year, account_id, account_name, account_type, account_subtype, normal_balance, debit, credit, net FROM input_3 - 29Monthly P&L Sep 2024–Aug 2026combines data from multiple inputs · aggregates rows into summary totals · buckets values by condition
WITH cleaned AS ( SELECT CAST(period_end AS DATE) AS period_end, CAST(account_id AS BIGINT) AS account_id, account_name, account_type, account_subtype, COALESCE(CAST(debit AS DOUBLE), 0) AS debit, COALESCE(CAST(credit AS DOUBLE), 0) AS credit FROM input_1 ), classified AS ( SELECT period_end, account_id, account_name, CASE WHEN account_id = 4000 OR lower(account_name) LIKE '%product%revenue%' THEN 'Product revenue' WHEN account_id = 4100 OR lower(account_name) LIKE '%service%revenue%' THEN 'Service revenue' WHEN account_id BETWEEN 4200 AND 4299 OR lower(account_name) LIKE '%return%' OR lower(account_name) LIKE '%allowance%' THEN 'Returns and allowances' WHEN account_id BETWEEN 5000 AND 5200 THEN 'COGS' WHEN account_id BETWEEN 6000 AND 6900 THEN account_name WHEN account_id IN (7000, 7100) THEN 'Depreciation and amortization' WHEN account_id BETWEEN 8000 AND 8099 OR lower(account_name) LIKE '%interest expense%' OR lower(account_name) LIKE '%interest income%' THEN 'Interest expense net of interest income' WHEN account_id BETWEEN 9000 AND 9099 OR lower(account_name) LIKE '%tax%' THEN 'Income tax' ELSE 'Exclude' END AS line_item, CASE WHEN account_id BETWEEN 4000 AND 4299 THEN credit - debit WHEN lower(account_name) LIKE '%interest income%' THEN credit - debit ELSE debit - credit END AS amount FROM cleaned WHERE account_id BETWEEN 4000 AND 9999 ), line_activity AS ( SELECT period_end, line_item, ROUND(SUM(amount), 0) AS amount FROM classified WHERE line_item <> 'Exclude' GROUP BY period_end, line_item ), base_lines AS ( SELECT CASE WHEN line_item = 'Product revenue' THEN 10 WHEN line_item = 'Service revenue' THEN 20 WHEN line_item = 'Returns and allowances' THEN 30 WHEN line_item = 'COGS' THEN 50 WHEN line_item = 'Depreciation and amortization' THEN 90 WHEN line_item = 'Interest expense net of interest income' THEN 120 WHEN line_item = 'Income tax' THEN 140 ELSE 70 END AS sort_order, line_item, period_end, amount FROM line_activity ), metrics AS ( SELECT period_end, SUM(CASE WHEN line_item IN ('Product revenue','Service revenue','Returns and allowances') THEN amount ELSE 0 END) AS total_revenue, SUM(CASE WHEN line_item = 'COGS' THEN amount ELSE 0 END) AS cogs, SUM(CASE WHEN line_item NOT IN ('Product revenue','Service revenue','Returns and allowances','COGS','Depreciation and amortization','Interest expense net of interest income','Income tax') THEN amount ELSE 0 END) AS sga, SUM(CASE WHEN line_item = 'Depreciation and amortization' THEN amount ELSE 0 END) AS da, SUM(CASE WHEN line_item = 'Interest expense net of interest income' THEN amount ELSE 0 END) AS interest_net, SUM(CASE WHEN line_item = 'Income tax' THEN amount ELSE 0 END) AS tax FROM line_activity GROUP BY period_end ), statement_long AS ( SELECT sort_order, line_item, period_end, amount, 'amount' AS value_type FROM base_lines UNION ALL SELECT 40, 'Total revenue', period_end, total_revenue, 'amount' FROM metrics UNION ALL SELECT 60, 'Gross profit', period_end, total_revenue - cogs, 'amount' FROM metrics UNION ALL SELECT 65, 'Gross margin %', period_end, CASE WHEN total_revenue = 0 THEN NULL ELSE (total_revenue - cogs) / total_revenue * 100 END, 'percent' FROM metrics UNION ALL SELECT 80, 'Total SG&A', period_end, sga, 'amount' FROM metrics UNION ALL SELECT 85, 'EBITDA', period_end, total_revenue - cogs - sga, 'amount' FROM metrics UNION ALL SELECT 100, 'EBIT', period_end, total_revenue - cogs - sga - da, 'amount' FROM metrics UNION ALL SELECT 130, 'Pre-tax income', period_end, total_revenue - cogs - sga - da - interest_net, 'amount' FROM metrics UNION ALL SELECT 150, 'Net income', period_end, total_revenue - cogs - sga - da - interest_net - tax, 'amount' FROM metrics ), final_pivot AS ( SELECT sort_order, line_item AS "P&L Line", value_type, SUM(CASE WHEN period_end = DATE '2024-09-30' THEN amount END) AS "Sep-2024", SUM(CASE WHEN period_end = DATE '2024-10-31' THEN amount END) AS "Oct-2024", SUM(CASE WHEN period_end = DATE '2024-11-30' THEN amount END) AS "Nov-2024", SUM(CASE WHEN period_end = DATE '2024-12-31' THEN amount END) AS "Dec-2024", SUM(CASE WHEN period_end = DATE '2025-01-31' THEN amount END) AS "Jan-2025", SUM(CASE WHEN period_end = DATE '2025-02-28' THEN amount END) AS "Feb-2025", SUM(CASE WHEN period_end = DATE '2025-03-31' THEN amount END) AS "Mar-2025", SUM(CASE WHEN period_end = DATE '2025-04-30' THEN amount END) AS "Apr-2025", SUM(CASE WHEN period_end = DATE '2025-05-31' THEN amount END) AS "May-2025", SUM(CASE WHEN period_end = DATE '2025-06-30' THEN amount END) AS "Jun-2025", SUM(CASE WHEN period_end = DATE '2025-07-31' THEN amount END) AS "Jul-2025", SUM(CASE WHEN period_end = DATE '2025-08-31' THEN amount END) AS "Aug-2025", SUM(CASE WHEN period_end = DATE '2025-09-30' THEN amount END) AS "Sep-2025", SUM(CASE WHEN period_end = DATE '2025-10-31' THEN amount END) AS "Oct-2025", SUM(CASE WHEN period_end = DATE '2025-11-30' THEN amount END) AS "Nov-2025", SUM(CASE WHEN period_end = DATE '2025-12-31' THEN amount END) AS "Dec-2025", SUM(CASE WHEN period_end = DATE '2026-01-31' THEN amount END) AS "Jan-2026", SUM(CASE WHEN period_end = DATE '2026-02-28' THEN amount END) AS "Feb-2026", SUM(CASE WHEN period_end = DATE '2026-03-31' THEN amount END) AS "Mar-2026", SUM(CASE WHEN period_end = DATE '2026-04-30' THEN amount END) AS "Apr-2026", SUM(CASE WHEN period_end = DATE '2026-05-31' THEN amount END) AS "May-2026", SUM(CASE WHEN period_end = DATE '2026-06-30' THEN amount END) AS "Jun-2026", SUM(CASE WHEN period_end = DATE '2026-07-31' THEN amount END) AS "Jul-2026", SUM(CASE WHEN period_end = DATE '2026-08-31' THEN amount END) AS "Aug-2026", CASE WHEN value_type = 'percent' THEN NULL ELSE SUM(CASE WHEN period_end BETWEEN DATE '2025-01-01' AND DATE '2025-12-31' THEN amount ELSE 0 END) END AS placeholder_fy2025, CASE WHEN value_type = 'percent' THEN NULL ELSE SUM(CASE WHEN period_end BETWEEN DATE '2026-01-01' AND DATE '2026-08-31' THEN amount ELSE 0 END) END AS placeholder_ytd2026, CASE WHEN value_type = 'percent' THEN NULL ELSE SUM(CASE WHEN period_end BETWEEN DATE '2025-09-01' AND DATE '2026-08-31' THEN amount ELSE 0 END) END AS placeholder_ltm FROM statement_long GROUP BY sort_order, line_item, value_type ), rollup_margin AS ( SELECT MAX(CASE WHEN "P&L Line" = 'Gross profit' THEN placeholder_fy2025 END) / NULLIF(MAX(CASE WHEN "P&L Line" = 'Total revenue' THEN placeholder_fy2025 END), 0) * 100 AS fy2025_gm, MAX(CASE WHEN "P&L Line" = 'Gross profit' THEN placeholder_ytd2026 END) / NULLIF(MAX(CASE WHEN "P&L Line" = 'Total revenue' THEN placeholder_ytd2026 END), 0) * 100 AS ytd2026_gm, MAX(CASE WHEN "P&L Line" = 'Gross profit' THEN placeholder_ltm END) / NULLIF(MAX(CASE WHEN "P&L Line" = 'Total revenue' THEN placeholder_ltm END), 0) * 100 AS ltm_gm FROM final_pivot ) SELECT p."P&L Line", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Sep-2024", 1) ELSE ROUND(p."Sep-2024", 0) END AS "Sep-2024", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Oct-2024", 1) ELSE ROUND(p."Oct-2024", 0) END AS "Oct-2024", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Nov-2024", 1) ELSE ROUND(p."Nov-2024", 0) END AS "Nov-2024", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Dec-2024", 1) ELSE ROUND(p."Dec-2024", 0) END AS "Dec-2024", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Jan-2025", 1) ELSE ROUND(p."Jan-2025", 0) END AS "Jan-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Feb-2025", 1) ELSE ROUND(p."Feb-2025", 0) END AS "Feb-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Mar-2025", 1) ELSE ROUND(p."Mar-2025", 0) END AS "Mar-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Apr-2025", 1) ELSE ROUND(p."Apr-2025", 0) END AS "Apr-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."May-2025", 1) ELSE ROUND(p."May-2025", 0) END AS "May-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Jun-2025", 1) ELSE ROUND(p."Jun-2025", 0) END AS "Jun-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Jul-2025", 1) ELSE ROUND(p."Jul-2025", 0) END AS "Jul-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Aug-2025", 1) ELSE ROUND(p."Aug-2025", 0) END AS "Aug-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Sep-2025", 1) ELSE ROUND(p."Sep-2025", 0) END AS "Sep-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Oct-2025", 1) ELSE ROUND(p."Oct-2025", 0) END AS "Oct-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Nov-2025", 1) ELSE ROUND(p."Nov-2025", 0) END AS "Nov-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Dec-2025", 1) ELSE ROUND(p."Dec-2025", 0) END AS "Dec-2025", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Jan-2026", 1) ELSE ROUND(p."Jan-2026", 0) END AS "Jan-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Feb-2026", 1) ELSE ROUND(p."Feb-2026", 0) END AS "Feb-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Mar-2026", 1) ELSE ROUND(p."Mar-2026", 0) END AS "Mar-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Apr-2026", 1) ELSE ROUND(p."Apr-2026", 0) END AS "Apr-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(p."May-2026", 1) ELSE ROUND(p."May-2026", 0) END AS "May-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Jun-2026", 1) ELSE ROUND(p."Jun-2026", 0) END AS "Jun-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Jul-2026", 1) ELSE ROUND(p."Jul-2026", 0) END AS "Jul-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(p."Aug-2026", 1) ELSE ROUND(p."Aug-2026", 0) END AS "Aug-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(r.fy2025_gm, 1) ELSE ROUND(p.placeholder_fy2025, 0) END AS "FY2025", CASE WHEN p.value_type = 'percent' THEN ROUND(r.ytd2026_gm, 1) ELSE ROUND(p.placeholder_ytd2026, 0) END AS "YTD Aug-2026", CASE WHEN p.value_type = 'percent' THEN ROUND(r.ltm_gm, 1) ELSE ROUND(p.placeholder_ltm, 0) END AS "LTM Aug-2026" FROM final_pivot p CROSS JOIN rollup_margin r WHERE COALESCE( p."Sep-2024", p."Oct-2024", p."Nov-2024", p."Dec-2024", p."Jan-2025", p."Feb-2025", p."Mar-2025", p."Apr-2025", p."May-2025", p."Jun-2025", p."Jul-2025", p."Aug-2025", p."Sep-2025", p."Oct-2025", p."Nov-2025", p."Dec-2025", p."Jan-2026", p."Feb-2026", p."Mar-2026", p."Apr-2026", p."May-2026", p."Jun-2026", p."Jul-2026", p."Aug-2026", p.placeholder_fy2025, p.placeholder_ytd2026, p.placeholder_ltm ) IS NOT NULL ORDER BY p.sort_order, p."P&L Line"
Run this on your books
Free to try — no sign-up, no card. The workflow runs in your browser; your data never leaves your machine.
Make it your own →