OPEN TO DATA, BI & ANALYTICS ROLES ACROSS CANADA

When the numbers don’t agree, I’m the one they call.

For 4+ years, Finance, Sales and Operations brought me the report that didn’t tie out. I find the cause, fix it at the source, and build the SQL, pipelines and Power BI reporting that keep it fixed.

Pick the role you’re hiring for below. Every requirement it usually lists is tied to where I’ve done it: a paid role, or a public project you can open and check.

Open to remote and relocation across Canada · Legally eligible to work in Canada · Available immediately

Ask Your Data · example query

> how many migration artifacts passed parallel-run validation?

107 artifacts have a GO verdict.

SELECT COUNT(*) FROM migration_parallel_run_results
WHERE verdict = 'GO'

> delete all denied claims

I can't do that — this is a read-only interface.

Recorded example from the tested query contract. Try your own question in the Ask Your Data demo.

4+
years in finance, sales & supply-chain analytics
19
public projects, code included
14
live demos you can open now
12,848
Automated tests behind the published numbers

ROLE FIT

Hiring for one of these? Here’s the evidence, line by line.

Choose the role you’re filling. Each requirement is tied to paid work or a public project you can inspect. The portfolio-evidence score uses those artifacts, delivery breadth and validation quality only; certifications are not part of it, and nothing is ticked that I haven’t done.

DATA ANALYST 9.6 / 10

Answers the business can defend in the meeting.

I was the only analyst at a perishable-goods distributor, so I answered whatever Sales, Finance or the warehouse needed that week. The public projects work the same way: each one ends in a finding, not just a chart.

OPEN THESE FIRST

  1. Retail Analytics PlatformRevenue tied out across four pages; margin didn’t. Here’s why.
  2. Pricing & Costing Analytics18.2% of list price never arrives, and six actions to get it back.
  3. Utility FP&A in Excel and Power BIA utility’s $100.9M miss against plan, split into weather, price and usage.
EMAIL ME ABOUT THIS ROLE
Data Analyst: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
SQL: joins, window functions, CTEsT-SQL every day as the sole analyst at Two Rivers. In public, the HR and GL projects run their committed SQL exactly as written.Paid role
Dashboards and KPI reportingOwned Power BI end to end at Two Rivers: sales, inventory and finance reporting that three departments used without waiting on an analyst.Paid role
Python for analysis and automationAt Shivam Investments, replaced recurring manual analysis with Python and SQL feeding Power BI: about 40% less effort (internal estimate).Paid role
Finding the story in the dataOn a retail platform, one page’s margin was off because $333,573 of cost sat on 3,056 order lines that never shipped. Traced, fixed, and now a test.Public project
Data quality you can trustAutomated reconciliation controls at Two Rivers: about 45% fewer recurring discrepancies and 30% fewer reporting errors (internal estimates).Paid role
Statistics and experimentsA powered geo holdout measures what six attribution models can’t; survival analysis with honest censoring in the HR case.Public project
Advanced ExcelA utility FP&A model in Excel on public filings: Power Query, a Power Pivot data model with DAX, LINEST regression, dynamic arrays, named LAMBDA functions and what-if data tables, with every figure tied to an independent model to the cent.Public project
Tied outPaid roles4Public projects3

BI / POWER BI DEVELOPER 9.5 / 10

Reports people act on, with one definition behind every number.

I’ve owned Power BI end to end, from the star schema and DAX measure library to row-level security and the published report. In public, the reports live in Git as code, and tests check that every visual binds to a real field.

OPEN THESE FIRST

  1. Supply Chain Control TowerAn eight-page Power BI control tower over a tested pipeline.
  2. GL / P&L ReconciliationA month-end close in Power BI and Tableau.
  3. Health System Decision SupportPower BI with statistical process control.
EMAIL ME ABOUT THIS ROLE
BI / Power BI Developer: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
Star-schema modelling and DAXDesigned the star schemas and DAX measure library behind Sales, Finance and Supply Chain reporting at Two Rivers.Paid role
Row-level securityRLS/RBAC and column masking in production, so cost, margin and people data reached only the people entitled to it.Paid role
Reports stakeholders rely onRep and territory scorecards, AP/AR aging and OTIF reporting, plus a sales-ops layer that ended arguments about whose extract was right.Paid role
Refresh and model performanceIncremental refresh on production semantic models, with DAX measures reviewed like code instead of left to pile up.Paid role
SSRS and paginated reportsKept the SSIS/SSRS estate running at Two Rivers while priority pipelines moved to Microsoft Fabric.Paid role
Reports under version controlPower BI projects kept in Git as PBIP/TMDL, with tests that every visual’s fields exist in the model, plus a Tableau workbook generated from script.Public project
One number across toolsA utility model published in Excel and in Power BI, with a test holding the report’s tables to the workbook’s own cells to the cent.Public project
Tied outPaid roles5Public projects2

ANALYTICS ENGINEER 9.2 / 10

One definition per metric: versioned, tested, written down.

Analytics engineering is making one definition the only definition. In production, I got Sales, Finance and Supply Chain to agree on their KPIs and built them into the semantic model. In public, dbt contracts, unit tests and MetricFlow sit beside a contracted B.C. finance pipeline that normalizes 90 drifting source files.

OPEN THESE FIRST

  1. Supply Chain Analytics — dbtContracts, unit tests, SCD2 and change impact.
  2. Retail Analytics Platform62 governed metric definitions behind 16 pages.
  3. Supply Chain Control TowerBad data stopped at the boundary, and proven in CI.
EMAIL ME ABOUT THIS ROLE
Analytics Engineer: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
dbt modelling and testsStaging-to-marts dbt with an enforced contract on the executive mart, unit tests, incremental facts and SCD2 snapshots.Public project
Dimensional modellingStar schemas, conformed dimensions and slowly changing dimensions in the Two Rivers enterprise data mart.Paid role
A semantic or metric layerOwned the production Power BI semantic layer. In public, MetricFlow metrics reconcile to the marts they summarise.Paid role
Definitions agreed with the businessWorked with Sales, Finance and Supply Chain until P&L, OTIF, inventory turns and days on hand each had exactly one definition.Paid role
Data tests in CISchema contracts, quarantined bad rows and a quality gate, each proven by injecting the exact failure it exists to catch.Public project
A cloud warehouseThe same dbt project built on Databricks (serverless SQL warehouse, Unity Catalog, Delta): 180 of 180 nodes green, and all 41 mart totals equal the DuckDB build.Public project
Tests on messy real dataA dbt project on the Province’s filings: 31 data tests, a written list of the Province’s known defects, and a gold layer rebuilt identically in CI.Public project
Git and CI for analytics codeAll 19 public projects run automated validation in GitHub Actions; this repository's root workflow directly rebuilds Portfolio Intelligence.Public project
Tied outPaid roles3Public projects5

DATA ENGINEER 9.3 / 10

Pipelines that fail loudly at the boundary, not quietly in a dashboard.

I’ve built Bronze→Silver→Gold pipelines in Microsoft Fabric, Azure Data Factory and Synapse with SQL and PySpark, and kept a legacy SSIS/SSRS estate running while migrating off it. The public pipelines add contracts, quarantine and quality gates, each tested by breaking the data on purpose.

OPEN THESE FIRST

  1. Supply Chain Control TowerA medallion pipeline benchmarked at 10M rows.
  2. Legacy-to-Fabric MigrationA row-for-row GO/NO-GO cutover gate.
  3. B.C. finance data pipeline90 official files under written contracts, and the Province’s own defects caught.
EMAIL ME ABOUT THIS ROLE
Data Engineer: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
Cloud ELT on Azure and FabricBronze→Silver→Gold pipelines in Microsoft Fabric, Azure Data Factory and Synapse at Two Rivers, written in SQL and PySpark.Paid role
Source-system integrationERP, Square POS, workforce and REST API feeds into the warehouse, including the Synerion time-and-attendance API.Paid role
Data quality and alertingAutomated schema, completeness, uniqueness and referential-integrity tests, with anomaly thresholds, exception logging and pipeline alerts.Paid role
Migration with validationRefactored priority pipelines into Fabric notebooks, validating cutover with row counts, checksums and control totals so no report broke. In public: a GO/NO-GO gate across 107 artifacts.Paid role
Working at scaleA medallion pipeline benchmarked at 10 million rows in Delta Lake, and a dbt project run on a Databricks SQL warehouse.Public project
CI/CD, contracts and orchestrationGitHub Actions on every repository, Docker images built in CI, an Airflow DAG, and a 90-file public-finance pipeline that fails on unexpected headers or item labels.Public project
Tied outPaid roles4Public projects2

BUSINESS ANALYST 9.3 / 10

From an unclear ask to a change people actually adopt.

I’ve spent my career between the people asking the question and the systems answering it: agreeing definitions, mapping the process, testing the change and getting it used. The public work includes the documents a BA actually produces, from charter and RACI to UAT plan and business case.

OPEN THESE FIRST

  1. Legacy-to-Fabric MigrationCharter, RACI, traceability and a live asset decision board.
  2. Inventory Analytics13 traced requirements, 12 UAT scenarios and a pilot plan.
  3. All eleven delivery documentsBusiness cases, process maps, UAT plans and decision memos.
EMAIL ME ABOUT THIS ROLE
Business Analyst: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
Requirements and stakeholdersWorked with Sales, Finance and Supply Chain at Two Rivers until each KPI had one definition, documented with acceptance criteria.Paid role
Root-cause analysisTraced recurring GL/P&L and inventory discrepancies back to their feeds instead of patching reports: about 45% fewer (internal estimate).Paid role
Process mappingA replenishment and exception-management case ↗: current and future state, handoffs, controls and measurable outcomes.Public project
UAT and acceptanceA clinical-data UAT plan ↗ with roles, scenarios, defect handling and exit criteria; 12 UAT scenarios in Inventory Analytics.Public project
Business cases and optionsA ten-year asset capital case ↗ with three options, a health-system decision packet ↗, and finance models that turn operating, capital, debt and reserve assumptions into explicit Base, Upside and Downside decisions.Public project
Options with their costA municipal plan shows a council what closing the renewal gap costs in tax for each mix of borrowing and pace, before anyone chooses.Public project
Change and adoptionWidened self-service Power BI across Sales, Finance and Supply Chain, with row-level security and masking keeping pace.Paid role
Tied outPaid roles3Public projects4

FINANCIAL ANALYST 9.2 / 10

Every report treated like a close: it ties to source, or it doesn’t ship.

My first analytics job was a financial analyst’s: month-end GL/P&L reconciliations and AP/AR reporting. At Two Rivers I automated those reconciliation controls, and my public finance work turns the same habit into tested engines.

OPEN THESE FIRST

  1. Finance Decision Models in Excel and Power BIUtility plan-vs-actual and distributor working capital.
  2. GL / P&L Reconciliation60 account-periods: 8 certify, 9 go to review, 43 blocked.
  3. Pricing & Costing AnalyticsPocket price, margin leakage and $0.00 unexplained.
EMAIL ME ABOUT THIS ROLE
Financial Analyst: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
GL/P&L reconciliation and closeMonthly GL/P&L reconciliations at Shivam Investments; automated the same controls later at Two Rivers.Paid role
AP/AR and working capitalAP and AR aging, DPO/DSO, invoice-match exceptions and credit exposure: a working view of cash, not a month-old snapshot.Paid role
Variance and margin analysisGoverned P&L and margin KPIs for monthly variance reviews. In public, a pocket-price waterfall shows 18.2% of list price never arriving.Paid role
Controls and audit trailA close-certification engine tests all 5,400 journal entries, enforces segregation of duties and blocks 43 of 60 account-periods rather than inventing sign-offs.Public project
Reporting automationPython and SQL feeding Power BI replaced recurring manual analysis at Shivam: about 40% less effort (internal estimate).Paid role
Excel, Power BI and TableauExcel and Power BI at Shivam, Power BI finance reporting at Two Rivers, and a Tableau close scorecard generated from script and checked against Python.Paid role
Public-sector budgetingA five-year plan for any of 161 B.C. municipalities: tax increases, borrowing under the legal limit and reserves. For Fernie, closing the renewal gap by 2029 needs 3.7% a year.Public project
Budgets, forecasts and scenariosExcel finance models: a utility plan with an exact variance bridge and a four-year backtest, and a distributor model with price-volume-mix and working capital.Public project
Tied outPaid roles5Public projects3

SUPPLY CHAIN & OPERATIONS ANALYST 9.5 / 10

The stock, the shelf and the ledger telling the same story.

I was the only analyst across a perishable-goods supply chain, integrating ERP, POS, WMS, workforce and API data for OTIF, FEFO, lot traceability, vendor scorecards and warehouse accuracy. The public work adds forecasting, inventory policy, disruption planning and the preserved Kestrel Bay distributor model.

OPEN THESE FIRST

  1. Inventory Analytics1,170 prioritized actions across a 420-SKU network.
  2. Supply Chain Control TowerShort-shipping, not lateness, is the bigger OTIF driver.
  3. Supply Chain Analytics — dbtOne versioned revenue definition for Finance and Ops.
EMAIL ME ABOUT THIS ROLE
Supply Chain & Operations Analyst: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
OTIF and service levelsBroke OTIF down by lane, carrier and failure reason at Two Rivers, separating late trucks from over-promised delivery dates.Paid role
Inventory, expiry and traceabilityFEFO, expiry-risk and lot-traceability reporting, built so a recall question takes minutes instead of a day of spreadsheets.Paid role
Supplier performanceVendor scorecards on fill rate, lead-time variance, price adherence and quality claims, translated into landed-cost impact.Paid role
Warehouse and WMS accuracyCycle-count accuracy, bin utilisation and pick/pack throughput, reconciled against what was actually on the shelf.Paid role
Demand forecastingSKU-level demand forecasting deployed as Python web apps at Two Rivers. In public, seven methods compete in rolling-origin backtests.Paid role
Inventory policy and working capitalSeven service targets priced on an annual cost frontier, with surplus transfers screened before any new purchase, in Inventory Analytics.Public project
Tied outPaid roles5Public projects1

DATA SCIENTIST 9.0 / 10

Models that beat the boring baseline, or they don’t ship.

A master’s in applied machine intelligence and one rule: a model ships only if it beats a simple baseline on data it has never seen. Several of mine lost, and the write-ups say so.

OPEN THESE FIRST

  1. Canada Wildfire RiskReal public data, scored out of time: ROC-AUC 0.881.
  2. Transaction MonitoringAll 60 planted cases found, with fewer alerts.
  3. Ask Your DataText-to-SQL that refuses rather than guesses.
EMAIL ME ABOUT THIS ROLE
Data Scientist: what the role usually asks for, and where I’ve done it
The role asks forWhere I’ve done itSource
Supervised learning and evaluationTwo XGBoost models, a classifier and a Poisson count, averaged and calibrated; trained to 2016, scored once on 2020–2024: ROC-AUC 0.881 out of time.Public project
ForecastingSKU demand forecasting in production at Two Rivers. In public, a gradient-boosted forecaster lost to a moving average (19.6% vs 18.5% WAPE), so the moving average shipped.Paid role
Anomaly detectionFive explainable rules plus an anomaly model find all 60 planted cases; a flat $10,000 rule finds 38.Public project
Experiments and causal inferenceA powered geo holdout, and a recommender whose value is decided by a pre-registered experiment, not by offline recall.Public project
LLM applicationsGrounded text-to-SQL: 46 right, 0 wrong and 12 refused on a 58-question contract, behind a read-only guard.Public project
Statistics and ML foundationsMPS in Analytics (Applied Machine Intelligence), Northeastern, GPA 3.76: machine learning, deep learning, NLP, time series and statistical inference.Master’s
Tied outPaid roles1Public projects4Master’s1

PROJECTS

Nineteen projects, each ending in a finding you can check

Filter by the work your team does. Fourteen run live in the browser. The data is seeded and synthetic, except the wildfire forecast and the utility model, which run on public records; dollar figures are modelled, not savings an employer banked. Each project publishes its validation evidence.

A hosted demo can take up to a minute to wake up. Every card also has a full-size screenshot and its source code, so you can inspect the work straight away.

FILTER
SHOWING 19 / 19 PROJECTS

GROWTH ANALYTICS · REVENUE RECONCILIATION · AUTOMATION

79 tests ✓

GrowthOps OS

Ad platforms claimed $3.72M in revenue; the business collected $3.06M. Two bridges explain every dollar between them. A monitor traced a nine-point drop in lead quality to one new Meta campaign, a deliverability check caught deadline emails going out from an unwarmed domain, and the payment workflow flagged nine buyers who paid but never got access.

Approach and evidence

A fictional coaching business six months after a CRM migration, generated over fifteen months with problems planted in it: a broad-audience campaign that buys volume rather than quality, a landing-page release that strips UTMs, short links with broken tags, a switch to an unwarmed email domain just before the enrollment deadline, duplicate contacts and lost deal links, and an access-provider outage on launch day. The reconciliation walks from what Meta, Google and LinkedIn report to the net cash the warehouse credits to paid media, and from CRM bookings to cash, with every step computed separately and nothing left over. Meta reports 7.3× return on ad spend; on collected cash it is 3.3×. Change detection splits each movement across campaigns and landing pages, and a test checks that it finds every planted problem with the right cause. Paid media is measured down to cost per booked call, email on human opens rather than privacy-proxy opens, and the CRM is mapped onto HubSpot’s lifecycle, deal-stage and owner properties with import files and an audit (no HubSpot account is connected). A written daily update is generated from the same numbers. Payments run through an idempotent webhook workflow with retries and a dead-letter queue, and a background worker retries failures, sends alerts and posts the daily update. Ask-your-data works like Ask Your Data, with no language model or API key: local retrieval either returns a governed number or a cited definition, or it refuses. On an 83-question test set it gives no wrong answers. It ships as a production-configured stack: API keys, replay-safe signed webhooks, readiness and metrics endpoints, verified backups, and non-root containers.

$0
LEFT UNEXPLAINED
6 / 6
PLANTED PROBLEMS FOUND
7.3× → 3.3×
META ROAS, CLAIMED → CASH

79 tests protect cash conservation in all five attribution models, both revenue bridges, detection of each planted incident with its root cause, the email and short-link checks, the HubSpot import files and adapters, webhook idempotency and replay protection, retries and dead letters, production configuration, and the ask-your-data question contract; CI also checks dbt against Python and fails if the Power BI or Excel files go stale.

  • Python
  • SQL
  • dbt
  • FastAPI
  • Streamlit
  • Power BI
READ THE CASE STUDY ▶ OPEN LIVE APP OPEN REPO

DATA PLATFORM · FABRIC PATTERNS, RUN ON DATABRICKS

Supply Chain Control Tower

The network’s real problem is where the stock sits, not how much there is. Bad data is stopped before it reaches a report.

Approach and evidence

The pipeline has three defences. Schema contracts stop format changes before Bronze. Bad rows go to quarantine and can be replayed. A quality gate guards Gold. CI proves each one by injecting the exact failure it exists to catch. The analysis on top starts with an approved vendor list across eleven countries: 25 SKUs have no second source, and one origin carries 29.7% of COGS. OTIF splits into its two failures, and short-shipping, not lateness, is the bigger one. In the stock position, the shortfall grew 15.2% while total stock barely moved, because inventory kept flowing to the lanes that need it least. On the inbound side, 11,604 purchase-order lines score each supplier on delivery, quality, cost and responsiveness against published targets. 18 of 24 suppliers sit in a different band than their contract calls them. The contract tier is never an input to the score, so that gap is measured, not restated. Last, the textbook ABC service ladder, at the same spend, loses 1.72 points of unit fill, because it protects revenue, and a fill rate on units is not revenue.

  • PySpark
  • Databricks
  • Delta Lake
  • Power BI
  • GIS / GeoJSON
  • Streamlit
  • 836 tests ✓

The PySpark notebooks ran as a Databricks job (serverless, Unity Catalog), twice: 18 of 18 quality checks passed, the MERGE rerun changed nothing, and all 36 gold totals match the local pipeline to the cent, after the run caught a rounding mismatch worth $13.85 on $110.4M.

10M-row Delta benchmark · 3 defence tiers, each proven by an injected failure · 8-page Power BI control tower · 12% of the replenishment gap needs no purchase order · $1,517,878 modelled working-capital release at identical service

Live disruption studio: country and node scenarios, five response playbooks and an owner-routed action queue — 13 P0 actions in the Mexico scenario — over 34 mapped network points (WGS 84). Synthetic coordinates and straight-line distances are labelled.

▶ TRY DECISION STUDIO VIEW PROCESS CASE VIEW GIS ANALYSIS OPEN REPO

CAPSTONE · TEXT-TO-SQL · VOICE

Ask Your Data

Ask 71 tables a question, typed or spoken, and see the SQL and the checks behind every answer.

Approach and evidence

One rule: no number without a query. The live demo needs no API key. A deterministic compiler matches your words to the warehouse’s columns, values and joins. On its 58-question test it gives 46 correct answers, 0 incorrect and 12 refusals. Add a key and a language model writes the SQL instead, behind the same access policy, SQL checker, read-only guard and row limits. A trust page brings the checks together: six versioned test suites, fifteen attack prompts across nine threat types, a sample four-role access matrix and five runtime budgets checked against the code. The test of the live model is deliberately left open, because it has not been run with a paid key. A business case covers stakeholders, options, requirements, UAT and rollout, and says where the demo stops and production approval would start.

71
TABLES YOU CAN ASK
15
RED-TEAM CASES
1,128
CI TESTS
  • Python
  • DuckDB
  • ONNX
  • Claude API
  • Streamlit
  • Responsible AI
  • 1128 tests ✓

46 right, 0 wrong and 12 refused on its 58-question contract · two engines behind one read-only guard · inspectable SQL, returned rows, binding trace and physical plan · zero answers from memory.

Checks: six test suites · 15 attack prompts · nine threat types · four-role access policy · five runtime budgets · the live-model test stays open until it is rerun after any provider or prompt change.

Decision-ready BA case: stakeholders and decision rights · current/future state · options · 14 requirements · ten UAT scenarios · staged rollout, rollback and outcome measures.

▶ TRY IT LIVE VIEW ASSURANCE & BUSINESS CASE OPEN REPO

FINANCE-GRADE · CLOSE CERTIFICATION

710 tests ✓

GL / P&L Reconciliation

At month-end, 8 of 60 account-periods certify themselves, 9 go to a named reviewer and 43 are blocked. No approval is invented to make the close look finished.

Approach and evidence

The engine finds four kinds of mismatch between the ERP and the subledger, and traces every dollar back to source. It tests all 5,400 journal entries against controls, each measured on the entries where it should not fire. A certification step, GL-REC-01, then checks all 60 account-periods against a versioned 0.5% tolerance, open exceptions, how each was resolved and a 10-day deadline. It routes each one to a preparer and a reviewer by risk, and keeps those two roles apart. It hashes its evidence, and deliberately invalidates one earlier decision to prove that a stale approval gets caught. The result: 8 auto-certified, 9 prepared for review and 43 blocked. No human approval is faked.

60
ACCOUNT-PERIOD DECISIONS
43
CLOSE BLOCKERS
100%
SOD ROUTING PASS

All 5,400 journal entries tested against controls measured where they should not fire · segregation of duties on every route · the same engine re-run, unmodified, on a FOCUS-format cloud bill.

Five source hashes · register fingerprint · controlled source-change probe moves exactly one account-period from certified to blocked without mutating committed evidence.

The same reconciliation engine, unmodified, also reconciles a FOCUS-format cloud bill; 33% of exceptions were absorbed rather than fixed upstream.

  • T-SQL
  • SQLite
  • Power BI
  • Tableau
  • Control governance
OPEN CLOSE PACKET OPEN REPO

PRICING & MARGIN · DECISION SUPPORT

3182 tests ✓

Pricing & Costing Analytics

The list price is not the price. 18.2% of it never arrives, and this says which points to go and get.

Approach and evidence

Margin here is measured on pocket price: what is left after every discount, rebate, payment term, freight allowance and return. A margin quoted on list price lets a deal look healthy while it loses money. The output is a recommendation, not an elasticity: six ordered actions across 240 products, worth $2.65M of annual gross margin. Each says why it was chosen and how strong its evidence is.

A review log says who decides what. All 240 proposals are logged, and each material one goes to a named approver. 161 still wait on a human decision, and the release checks read 6 passed, 2 in review, 0 blocked. It then follows 2,075 approved past changes through fixed three-month before-and-after windows. 1,132 stay on a queue for explanation instead of being counted as a benefit. The monitor is labelled observational, and the public app cannot approve or publish a customer price.

What I would ask about first: the dataset is built so the analysis can be caught being wrong. Elasticity, cost pass-through and segment price sensitivity are planted on purpose, then recovered by the real code. The estimated category elasticities keep the planted order, at a rank correlation of 0.95. Every pass-through estimate comes out pulled toward zero, which is what a regression on noisy data should do. It took four attempts: when price moves only with time, it cannot be separated from the trend, and no elasticity can be recovered.

Underneath, the ERP data arrives the way ERP data does: SAP-shaped billing lines with missing standard costs, duplicate lines, unit-of-measure mismatches and orphan customers, all planted on purpose. All twelve quality rules find something. The reconciliation walks the extract down to the staged total, names every exclusion and leaves $0.00 unexplained. Six marts are computed a second time in DuckDB and held to the pandas versions at 1e-8. That is how a price-band median was caught five percent apart under the same column name.

18.2%
OF LIST PRICE NEVER ARRIVES
$2.65M
MODELLED ANNUAL MARGIN
240
PROPOSALS ROUTED TO REVIEW
  • Python
  • DuckDB
  • Power BI
  • Streamlit

Seeded elasticity ordering recovered at rank correlation 0.95 · $0.00 unexplained in the ERP reconciliation · 240 proposals routed to named review authority · 2,075 historical changes monitored · 18 app pages · 19-page generated Power BI report, 352 visuals rendering with 0 broken

▶ TRY IT LIVE VIEW DECISION PACKET OPEN REPO

EXCEL · POWER BI · FP&A · UTILITY · DISTRIBUTION

1190 tests ✓

Finance Decision Models in Excel and Power BI

Portland General Electric’s plan against actuals, in Excel and Power BI, on public filings. Beside it, the Kestrel Bay distributor model for channel economics and working capital.

Approach and evidence

The utility model uses EIA sales, twelve years of FERC Form 1 statements and NOAA weather. It splits a $100.9M plan miss into weather, price and usage, using Power Query, Power Pivot with DAX, and LINEST. A four-year backtest shows where the forecast stops being reliable. The same numbers publish in a seven-page Power BI report. A gradient-boosted load forecast is held to the same backtest: it helps where weather drives the load, and only a little. Kestrel Bay stays pinned to its tested release. It adds a distributor P&L, price-volume-mix, inventory ageing and channel economics.

−$100.9M
H1 2026 AGAINST PLAN
R² 0.84
LINEST WEATHER MODEL
31 / 31
IN-WORKBOOK CHECKS PASS

The utility model and the Power BI report share one tested reference model, and Kestrel Bay is pinned by hash to its tagged release. The repository collects 1,190 automated tests. The B.C. model has moved to its own project.

  • Excel
  • Power Query
  • Power Pivot / DAX
  • Power BI
  • LINEST
  • FERC · EIA · NOAA
DOWNLOAD THE WORKBOOK (.XLSX) DOWNLOAD KESTREL BAY (.XLSX) OPEN THE 13-PAGE BOARD PACK SEE THE POWER BI REPORT OPEN REPO

PUBLIC SECTOR · DATA PIPELINE · DBT · EXCEL

181 tests ✓

B.C. Local-Government Finance

B.C. renews its infrastructure at about the rate it wears out, on average. But the 68 municipalities that invest less than their assets wear out are $570M a year short.

Approach and evidence

Every B.C. municipality from 2019 to 2024, from the Province’s own filings. A pipeline downloads 90 files and holds each to a written contract, because the files change shape from year to year. Anything it has not seen before stops the run. A dbt project turns them into indicators, with 31 data tests. The Province’s annual replacement-need field is not usable as published: Vancouver reports 41% of its replacement value a year. So the model re-derives the need, and only where the reported value passes a screen. The pipeline also catches the Province’s own defects: a 2022 population file where 77 of 161 rows belong to other places, and municipalities with no statements. The Excel model covers any of 161 municipalities: peer benchmarks, renewal, a five-year plan, tax rates and borrowing room. For Fernie, closing the renewal gap by 2029 needs tax increases of 3.7% a year.

$570M
YEARLY RENEWAL SHORTFALL
+31%
MEDIAN HOUSE TAX, 2019–2024
90
OFFICIAL FILES UNDER CONTRACT

Gold tables recomputed from silver in pandas and held to dbt’s SQL · the gold layer rebuilt byte for byte in CI · the workbook held to an independent recomputation · a monthly job checks the Province’s files for changes.

  • Python
  • dbt / DuckDB
  • Excel
  • Power Query
  • Province of B.C. data
DOWNLOAD THE WORKBOOK (.XLSX) OPEN THE 10-PAGE BOARD PACK OPEN REPO

CO-FLAGSHIP · LIVE INVENTORY DECISION STUDIO

Inventory Analytics · Operations Decision Studio

Before it recommends buying more, it checks whether spare stock elsewhere in the network already covers the gap, and what each service target would cost a year.

Approach and evidence

A 420-SKU, seven-site fulfillment network, generated the same way on every run, feeds six workspaces. Seven forecasting methods compete for each SKU in rolling backtests, and the results roll up to nine ABC-XYZ policy groups. A policy lab then tests limited shocks to demand, supplier lead time and service level, holding current stock fixed. It reprices safety stock, whole-case orders and lead-time exposure, and compares seven service targets on one yearly cost curve. Before suggesting a purchase, the app looks for transfers from surplus that pay for themselves. Supplier receipts, cycle counts, ageing and working capital end in one action list with six verbs. Fourteen tests hold the Python results to the DuckDB SQL marts, and uploaded workbooks stay in the visitor’s own session. The demo link is a static copy that opens at once; the full app, with uploads, takes about a minute to wake.

$10.94M
INVENTORY AT COST
$2.93M
CASH OPPORTUNITY
1,170
PRIORITIZED ACTIONS
  • Python / Flask
  • Plotly
  • DuckDB / SQL
  • Docker
  • 349 tests ✓

Policy Lab: bounded demand and lead-time shocks · network service target · safety-stock, order and lead-window exposure repricing · seven-point annual service-cost frontier · explicit planner-approval boundary.

39 tested report endpoints · six responsive workspaces · seven-method forecast bake-off · nine ABC-XYZ policy groups · Python/SQL parity · session-isolated uploads · 349 tests.

Reviewable BA case: stakeholder decisions · current/future-state workflow · 13 traced requirements · 12 UAT scenarios · pilot and adoption plan · nine-minute interview walkthrough.

▶ TRY IT LIVE OPEN THE FULL APP (UPLOADS, ~1 MIN TO WAKE) VIEW BA & INTERVIEW GUIDE OPEN REPO

FORECASTING · GIS · PUBLIC DATA

111 tests ✓

Canada Wildfire Risk

Rank Canada’s 753 fire cells every morning, and the riskiest tenth holds 57.5% of the fires that start, on seasons the model never saw.

Approach and evidence

It began as a first-prize 2024 hackathon project that predicted yearly area burned. It is now a daily seven-day forecast built on real public records: 164,707 fires from the National Fire Database, 3,198 CWFIS weather stations and 4.0 million cell-days. The Canadian Fire Weather Index System is implemented from Van Wagner’s equations and checked against CWFIS’s published codes before anything relies on it. Two XGBoost models, a classifier and a Poisson count model, are averaged and calibrated. They train on 2000–2016, tune on 2017–2019 and are scored once on 2020–2024, against two baselines: each cell’s normal rate for the month, and an FWI regression. Re-ranked each morning, the riskiest tenth of cells held 57.5% of the 27,147 fires reported. Graded against this season’s satellite hotspots, it still beats FWI alone, but by less: 0.743 to 0.724. Those figures come after a fix. A pandas index misalignment had put 97.7% of fires in another fire’s cell, so the model had been trained and scored on a scrambled record. It showed up on a map, with Nova Scotia’s fires in the Yukon, and the README keeps the before and after. GitHub Actions rebuilds the forecast twice a day from live CWFIS and Open-Meteo data. An eight-page Power BI dashboard is generated from code and reconciled to the same evidence files. The original random forest is rebuilt too: its R² falls from 0.351 on a random split to 0.201 out of time.

0.881
ROC-AUC OUT OF TIME
57.5%
FIRES IN THE DAY’S TOP 10%
97.7%
OF FIRES IN THE WRONG CELL, FOUND AND FIXED

111 tests replay real station seasons through the FWI code, keep every fire in its own cell, hold the model card to its metrics file and reconcile every dashboard table to its source. The live app reads the forecast GitHub Actions publishes twice a day. Not an official fire-danger product.

  • Python
  • XGBoost
  • FWI System
  • GIS
  • Power BI
  • GitHub Actions
THIS WEEK’S FORECAST VIEW MODEL RESULTS ▶ OPEN LIVE APP OPEN REPO
Nine more projects — web analytics, health, dbt, financial crime, marketing, recommendations, people analytics, clinical data and migration

WEB ANALYTICS · REPRODUCIBLE FIXTURE · METRIC GOVERNANCE

Portfolio Intelligence Platform

A transparent analytics engineering case study: tested dbt relations generate every displayed KPI from one committed 20-event synthetic fixture.

Approach, evidence and boundary

DuckDB and dbt type, deduplicate and sessionize the fixture, exclude one bot, one internal and one synthetic event, then publish session and conversion marts. A root GitHub Actions job rebuilds all 20 nodes, runs 15 assertions, regenerates the dashboard JSON and fails on drift. The dashboard shows real fixture outputs—five eligible users and six sessions—and leaves retention and Core Web Vitals unavailable because four days of synthetic events cannot support them. A consent-aware browser dispatcher and performance observers are implemented locally. GA4, PostHog and BigQuery remain explicitly unactivated reference integrations and are not claimed as project experience.

20
MODELED EVENTS
20
DBT NODES PASS
15
CI ASSERTIONS
  • dbt Core
  • DuckDB
  • GitHub Actions
  • Event contracts
  • Web Vitals API
  • 15 tests ✓

Root CI proves the exact chain: seed → four dbt models → 15 passing assertions → generated dashboard JSON → committed-output drift check.

Evidence limits are visible in the UI: synthetic source, tiny-sample warning, unavailable cohorts and RUM measures, and zero claims of production traffic.

▶ OPEN GITHUB PAGES CASE STUDY READ SOURCE & VALIDATION LIMITS OPEN REPOSITORY

DECISION SUPPORT · HEALTH SYSTEM

819 tests ✓

Health System Decision Support

On an average day, patients who no longer need acute care fill 56.9 hospital beds. Transitional care is worth funding with conditions, and the analysis names what is still missing before it can start.

Approach and evidence

The Canadian analysis combines hospital activity, a fixed-baseline control chart of alternate-level-of-care (ALC) days and two economic views. Counted as freed-up capacity, transitional care is dominant: better outcomes at lower cost. Counted as cash, it costs $192k per QALY. A written release policy turns this into a decision record: six versioned measures, four options, 36 facility × age-band monitoring cells, hashed sources and ten release checks, each marked pass, review or block. The current verdict is REVIEW REQUIRED. Eight checks pass. Baselines for ED boarding and postponed surgery are missing, and executive and backfill approvals are still open. A deliberately planted data-quality defect moves the decision to BLOCKED. The US companion models 30,000 claims across 11 payers. 68.6% of denials are preventable, and $4.84M of contract value is routed to the people who own each root cause. Patient collections, payer scorecards, the claim funnel and a control chart on authorizations show what a single denial-rate KPI misses.

39,567
DISCHARGES MODELLED
56.9
ALC BED EQUIVALENTS
8 / 2 / 0
PASS · REVIEW · BLOCK

819 CI checks protect the analytics and release evidence. The repository never fabricates human approval and labels its CIHI-inspired synthetic model as portfolio evidence, not an official specification or clinical recommendation.

  • Python
  • Power BI
  • SPC
  • Health economics
  • Decision assurance
  • Equity controls
VIEW DECISION PACKET OPEN REPO

ANALYTICS ENGINEERING · DBT ON DATABRICKS

157 dbt tests ✓

Supply Chain Analytics — dbt

Finance and Ops stop arguing about revenue, because there is one versioned definition. Every build names the downstream models a change touches.

Approach and evidence

Each build ends in a release decision. An enforced contract protects the executive KPI table. Five MetricFlow metrics are checked against the tables they summarise. A checksum baseline finds which models changed and which downstream models they affect. Every build writes a hashed release record and lineage events for each model. The project also has incremental loads, SCD2 history and an Airflow DAG that CI checks but does not schedule. It builds on DuckDB in CI, and it was also built on a Databricks SQL warehouse, where every mart total matched.

$0.00
REVENUE DELTA
41/41
TOTALS MATCH ON DATABRICKS
157
DBT TESTS

Built on DuckDB in CI every week, and on a Databricks serverless SQL warehouse on 24 Sep 2026: 180 of 180 nodes green. The Databricks port found a real type drift that the enforced contract stopped. Airflow is checked, not scheduled; Snowflake has never run.

  • dbt
  • Databricks
  • MetricFlow
  • Airflow
  • Data contracts
BROWSE THE DBT DOCS, BUILT ON DATABRICKS OPEN RELEASE MEMO OPEN OPERATOR RUNBOOK OPEN REPO

ANOMALY DETECTION · FINANCIAL CRIME

183 tests ✓

Transaction Monitoring

A flat $10,000 rule finds 38 of 60 planted cases. Five explainable rules plus an anomaly model find all 60, while alerting on a third fewer entities.

Approach and evidence

Five explainable rules and an unsupervised model watch 100,299 synthetic payments. A case layer, AML-INV-01, then opens 366 investigations, sets P0, P1 or P2 review deadlines and links 8,972 pieces of evidence between entities and counterparties. Six technical checks pass. Human decisions on the cases and the filing approval are still under review, and the release says so. Removing one case in a drill moves the release from REVIEW REQUIRED to BLOCKED, without changing any source file.

60/60
CASES FOUND
0.774
PR-AUC
10×
LOWER EXPECTED COST THAN THE $10K RULE

8,972 entity–counterparty evidence links behind 366 investigations with P0/P1/P2 review clocks · the score orders the queue; it never decides a case.

  • Python
  • SQLite
  • scikit-learn
  • Streamlit
  • Decision governance
OPEN DECISION PACKET ▶ OPEN LIVE APP OPEN REPO

MEASUREMENT · CAUSAL INFERENCE

128 tests ✓

Marketing Attribution & Incrementality

Last-touch gives “direct” a quarter of all conversions; its true share is 1.9%. Six attribution models chase a known answer and none finds it. A geo holdout does, so the budget plan is calibrated on that.

Approach and evidence

The test is falsifiable. Each synthetic user carries a fixed random draw, so every channel’s true extra contribution can be measured by re-running the simulation without it. Six attribution models are graded against that truth, and none recovers it. A properly powered geo holdout then measures cause and effect. The planning page starts from the business question and picks attribution, lift testing or experiment-calibrated MMM to answer it. It refuses to fit MMM to only twelve months of data. It lines up platform-reported, attributed and incremental conversions without forcing them to agree. Then it splits the same paid-media budget across diminishing-return curves, with explicit floors, caps and a 65% weight on the downside case. Only paid search is calibrated by an experiment; the other three channel changes are clearly marked as waiting on a test.

3.0%
MODELLED ORDER UPLIFT
1 / 4
EXPERIMENT-CALIBRATED
$37.2K
BUDGET HELD CONSTANT

128 tests protect the geo readout, the rule that picks attribution, a lift test or MMM for each question, the three-way reconciliation of platform, attributed and incremental conversions, concave response curves, budget neutrality and per-channel floors and caps.

  • Python
  • SQL
  • Causal inference
  • Decision governance
  • Streamlit
OPEN DECISION MEMO ▶ OPEN LIVE APP OPEN REPO

PRODUCT ANALYTICS · RECOMMENDER SYSTEMS

814 tests ✓

Customer Recommendation Engine

The two-stage ranker lost to plain collaborative filtering, 81.2% to 84.9% recall@10, so the simple model ships. A randomized pilot, not offline recall, decides what it is worth.

Approach and evidence

Collaborative filtering stays in place at 84.9% recall@10, because the more complex two-stage ranker lost at 81.2%. The evaluation goes past that one number. Seven objectives cover relevance, reach, novelty, diversity, calibration and eligibility. Results are broken down by purchase history, region, RFM segment, popularity and product family. 791 served recommendations are audited against the catalog, purchase history, the explanation shown and the dollar-opportunity rules. The FastAPI service records p50, p95 and p99 latency against a stated target. When it cannot personalise, it falls back to a labelled regional-popularity list that leaves out items the customer already owns and claims no dollar opportunity. An unknown customer gets an error, not a guess. A pre-registered customer-level experiment, with checks for sample-ratio mismatch, trust and latency, has to pass before any claim of commercial lift.

84.9%
RECALL@10 SHIPPED
67.6%
WEAKEST WARM SLICE
100%
ELIGIBILITY PASS

814 tests · seven objectives, not one · five slice dimensions, the weakest warm slice at 67.6% · 791 served items audited · a fallback that invents no dollar opportunity.

  • scikit-learn
  • FastAPI
  • Experimentation
  • Streamlit
OPEN RELEASE MEMO ▶ OPEN LIVE APP OPEN REPO

PEOPLE ANALYTICS · RESPONSIBLE AI

822 tests ✓

HR Attrition Analytics

A flight-risk model at ROC-AUC 0.738 with zero protected attributes. The live app never shows one person’s score, only group proposals with an owner and a rollback trigger.

Approach and evidence

The live app separates who decides, the evidence, the decision and the follow-up across five pages. Six group-level proposals each name an owner, an approval path, a success measure and a rollback trigger. The release is deliberately marked REVIEW REQUIRED: six controls pass, two wait for named human review and none is blocked. Individual scores never enter the app. Small groups are suppressed, protected attributes are used only for auditing, and unclear disparities stay visible. Each control maps to GOVERN, MAP, MEASURE or MANAGE in the NIST AI RMF 1.0. Underneath is the SQL-first analysis: 2,800 synthetic people in eight labour markets, survival analysis that handles people who have not left yet, pay analysis adjusted for level and market, and a permutation test for manager effects.

0.738
ROC-AUC, NO PROTECTED ATTRIBUTES
2,800
PEOPLE ACROSS 8 COUNTRIES
822
CI TESTS

Small cohorts suppressed · a four-fifths rule and Fisher’s exact test gate the build · survival analysis with honest censoring · each control mapped to NIST AI RMF 1.0.

  • T-SQL
  • Streamlit
  • Responsible AI
▶ OPEN THE LIVE APP OPEN RELEASE PACKET RESPONSIBLE-USE MODEL OPEN REPO

CLINICAL DATA · CDISC · FHIR

281 tests ✓

Clinical Evidence Console + FHIR Warehouse

49 defects planted in a trial database, 49 found, 0 missed. The reconciliation that proved it also exposed four protocol deviations the checks had let through.

Approach and evidence

A live Streamlit console connects trial operations to a 10,000-patient FHIR R4 warehouse on SQL Server 2022, generated the same way on every run. A release layer, CDM-REL-01, versions three cohorts, reconciles who is in each and the evidence counts, runs seven checks and hashes 12 required sources. It proves that a one-subject mismatch blocks the data cut. The current verdict is deliberately REVIEW REQUIRED. Five checks pass. The row-level quarantine log is not kept publicly, and the 80 generated UAT cases are not presented as run. Zero human approvals are faked.

3
VERSIONED COHORTS
5 / 7
RELEASE GATES PASS
12
SOURCE HASHES

10,000-patient FHIR R4 warehouse on SQL Server 2022 · 120/120 cohort identities reconciled · 24 expected FHIR rejects across eight classes · a one-subject mismatch moves the data cut to BLOCKED.

CI starts SQL Server 2022, proves the DQ gate can fail, recovers the exact quarantine manifest, measures execution plans and rebuilds the data-cut packet from source evidence.

  • Python
  • HL7 FHIR R4
  • SQL Server / T-SQL
  • CDISC / SDTM
  • Release governance
  • Streamlit
▶ LAUNCH LIVE CONSOLE OPEN DATA-CUT PACKET VIEW UAT PLAN OPEN REPO

MIGRATION · VALIDATION · BA DELIVERY

440 tests ✓

Legacy-to-Fabric Migration

The move from SSIS/SSRS to Fabric waits on a row-for-row GO/NO-GO gate across 107 artifacts, and the tests break the data on purpose to prove the gate catches it.

Approach and evidence

Nobody signs off on a migration because the new pipeline looks nicer. So old and new run side by side, row for row, and a GO/NO-GO gate makes the call. The negative tests are the real deliverable: I break the data on purpose to prove the validator catches dropped rows, offsetting errors, and phantom keys.

107
ARTIFACTS VALIDATED
GO/NO-GO
CUTOVER GATE
440
CI TESTS

Negative tests break the data on purpose to prove the validator catches what a cutover can't afford to miss: dropped rows, offsetting errors and phantom keys.

The business-analysis pack around it: charter, stakeholders, RACI, workshops, traceable requirements, RAID, UAT and adoption, plus a live asset-management decision board with a ten-year capital plan on 96 synthetic assets.

  • SSIS
  • SSRS
  • PySpark
  • Microsoft Fabric
  • GIS / GeoJSON
▶ LAUNCH ASSET DECISION BOARD VIEW BA DELIVERY PACK VIEW ASSET CAPITAL BUSINESS CASE OPEN REPO
…and the profile that ties it together Where to start, what each project is actually proving, and the losses I keep on purpose. github.com/KushPatel29 ↗

EXPERIENCE

Two jobs, one habit: make the numbers tie out

Four-plus years of paid work in operational and financial reporting. This is where every “paid role” tick in Role fit comes from.

—  · 2 yrs 7 mos

Two Rivers Specialty Meats

Data Analyst — Operations, Logistics & Enterprise Reporting

PERMANENT FULL-TIME · NORTH VANCOUVER, BC · ON-SITE

SALES OPS · WMS · LOGISTICS · VENDOR · PRODUCT · AP/AR · GL/P&L · PLATFORM

I was the only analyst across a perishable-goods supply chain, so “my domain” meant whatever number the business needed to defend that week — from a rep's attainment to a lot recall to the month-end close.

  • Power BI
  • DAX
  • T-SQL
  • PySpark
  • Microsoft Fabric
  • ADF
  • Synapse
  • SSIS/SSRS
  • Python

Built governed Power BI reporting across sales, inventory and finance; owned Fabric / ADF / Synapse pipelines and reconciliation controls. Internal estimates: recurring discrepancies down ~45%, reporting errors down ~30%.

Responsibilities and examples

SALES OPS & REP PERFORMANCE

  • Built the sales operations reporting layer — pipeline to invoice — with governed quota, attainment and product-mix logic, so monthly variance reviews argued about causes instead of whose extract was right.
  • Built rep and territory scorecards normalised for account mix and territory potential: attainment, coverage, win rate and margin per rep, with definitions locked in the model so they couldn't be re-cut mid-quarter.

CUSTOMER, PRODUCT & VENDOR

  • Delivered customer analytics for a churn-sensitive book of trade accounts — cohort retention, order-frequency decay, RFM segmentation and margin by customer — which surfaced quiet attrition long before the rep noticed.
  • Ran SKU and assortment analysis on velocity, contribution margin and cannibalisation, which fed real decisions about which products kept their slot.
  • Built vendor scorecards on fill rate, lead-time variance, price adherence and quality claims, and translated them into landed-cost impact so procurement negotiated with numbers instead of impressions.

WMS, INVENTORY & LOGISTICS

  • Built WMS reporting for warehouse operations — cycle-count accuracy, bin utilisation and pick/pack throughput — reconciling what the system claimed against what was actually on the shelf.
  • Developed FEFO and expiry-risk analytics plus lot traceability for perishable inventory, designed so a recall question could be answered in minutes rather than a day of spreadsheets.
  • Decomposed OTIF by lane, carrier and failure reason alongside freight cost per case and dock-to-stock timing, separating late trucks from over-promised delivery dates.

FINANCE — GL/P&L, AP & AR

  • Sat with Sales, Finance and Supply Chain until we agreed on single definitions for P&L/GL and operations KPIs — OTIF, inventory turns, days on hand — then built the Power BI star schemas and DAX that made those definitions the only ones available.
  • Built AP and AR reporting on aging, DPO/DSO, invoice-match exceptions and credit exposure, which gave Finance a working view of cash instead of a month-old snapshot.
  • Moved staffing decisions off gut feel with labour cost per case, overtime exposure and schedule-vs-actual variance — fed by a Synerion time-and-attendance API integration into the analytics warehouse, with punch-to-payroll reconciled so billed hours matched worked hours.
  • Automated the reconciliation controls we used to run by hand: recurring discrepancies down ~45%, reporting errors down ~30%.

DATA ENGINEERING & GOVERNANCE

  • Built Bronze→Silver→Gold pipelines in Fabric / ADF / Synapse with SQL and PySpark while keeping the legacy SSIS/SSRS estate alive — the migration repo is that experience, minus the 6am pages.
  • Owned the semantic layer: star-schema models, incremental refresh, and DAX measures reviewed like code rather than accumulated like sediment.
  • Implemented RLS/RBAC and column masking so cost, margin and people data only reached the people entitled to it, and documented it well enough to survive an audit.

—  · 1 yr 8 mos

Shivam Investments

Financial Analyst — Data & Reporting

PERMANENT FULL-TIME

GL/P&L · AP/AR · RECONCILIATION · AUTOMATION

Where the reconciliation habit started: close cycles tight enough that a manual mistake showed up as a real number in front of real people.

  • SQL
  • Python
  • Power BI
  • Excel

Reconciled GL/P&L and AP/AR reporting, then automated recurring analysis with Python, SQL and Power BI. Internal estimate: reporting effort down ~40%.

Responsibilities and examples

CLOSE & CONTROLS

  • Reconciled GL/P&L across sources every month and chased variances to source — the discipline the reconciliation repo later turned into a tested engine.
  • Worked AP and AR aging and exception reporting, tightening the follow-up loop on the accounts that were actually at risk.

AUTOMATION

  • Replaced recurring manual analysis with Python + SQL feeding Power BI, cutting the effort around ~40% and freeing the month for questions worth asking.
  • Standardised the recurring reporting pack so each cycle started from the previous one's logic instead of a fresh workbook.

A note on the percentages above: the ~45%, ~30% and ~40% improvements are internal estimates drawn from company reporting at the time. Unlike the figures in the projects section, they aren't reproducible from a public repo, and I'd treat them as directional rather than audited.

HOW I WORK

My favourite results are the ones where I lost.

Anyone can show you the model that won. I'd rather show you the one I killed and the boring baseline that beat it, because choosing what not to ship is most of this job.

84.9% > 81.2%

The ranker lost

Two-stage retrieval with a gradient-boosted ranker, beaten by plain collaborative filtering on a warm-customer basket holdout; the ranker uses customer-disjoint label training. The fixed benchmark is checked in CI.

18.5% < 19.6%

The forecaster lost

A gradient-boosted multi-step forecaster lost to a moving average on WAPE. The moving average ships; the challenger's defeat is written into the README rather than quietly deleted.

p ≈ 0.23

The alarm I could not clear

A fairness screen fired on the attrition model. Fisher's exact came back at p ≈ 0.23, which is not evidence the disparity is noise — a non-significant result on a small group means the sample cannot settle the question, not that there is nothing there. So the ratio and its uncertainty stay published and the group stays on a monitor list, rather than the alarm being written off.

HOW A NUMBER GETS ONTO A DASHBOARD

STEP 01

Agree the grain

Before a single measure, the business and I settle what one row means. Most reporting disputes are definition disputes wearing a costume.

STEP 02

Contract the source

Schema contracts at the boundary, so upstream drift fails loudly at ingestion instead of silently in a Gold table.

STEP 03

Model it once

Star schema, one semantic layer, measures reviewed like code — so there's exactly one place a KPI can be wrong, and one place to fix it.

STEP 04

Test the claim

Every headline number gets a test: control totals, ceilings, negative cases. If a claim stops being true, CI goes red.

STEP 05

Ship it auditable

The number arrives with its lineage, its SQL and its access rules attached, so anyone can check my work without asking me.

Beat the baseline or don't ship

Every model is measured against the dumbest thing that could work. If the moving average wins, the moving average ships.

Governance before dashboards

RLS, masking and k-anonymity go in before the first visual, because retrofitting access control is how sensitive data leaks into a screenshot.

Prove the failure path

It isn't enough that the happy path works. I break the data on purpose in CI and prove the guard catches it.

Every repo has a short section on what I deliberately didn't build: no vector database where a SQL join was the right answer, no deep learning on 38 SKUs, no cloud architecture I couldn't defend in a budget meeting. Restraint is harder to demo than complexity, so I write it down.

SKILLS

What I’ve used for real, and where

No self-rated stars. Each group separates what I used in a paid role from what I’ve only used in public projects or coursework, where you can open it and judge for yourself.

BI & reporting

In paid roles

  • Power BI
  • DAX
  • Power Query / M
  • Star-schema design
  • Semantic models
  • Incremental refresh
  • Row-level security
  • SSRS & paginated reports
  • Excel

In public projects

  • Tableau
  • Power Pivot & CUBEVALUE
  • Excel dynamic arrays & LAMBDA
  • What-if data tables
  • Object-level security
  • PBIP / TMDL in Git
  • Streamlit
  • Plotly

SQL & data modelling

In paid roles

  • SQL
  • T-SQL
  • Window functions & CTEs
  • Kimball dimensional modelling
  • Conformed dimensions
  • SCD Type 1/2
  • SQL Server

In public projects

  • dbt Core
  • MetricFlow
  • Databricks SQL warehouse
  • DuckDB
  • SQLite
  • Snowflake (profile only)

Data engineering

In paid roles

  • Microsoft Fabric
  • Azure Data Factory
  • Azure Synapse Analytics
  • PySpark
  • Medallion (Bronze→Silver→Gold)
  • SSIS
  • REST API integration
  • ERP / WMS / POS extraction
  • Cutover validation

In public projects

  • Delta Lake
  • Airflow (DAG validated, not scheduled)
  • Docker
  • GitHub Actions CI
  • FastAPI

Python, statistics & ML

In paid roles

  • Python
  • pandas
  • Demand forecasting
  • Reporting automation

In public projects & coursework

  • scikit-learn
  • XGBoost
  • Rolling-origin backtests
  • Anomaly detection
  • Survival analysis
  • Causal inference & geo tests
  • Recommender systems
  • LLM text-to-SQL
  • MLflow

Data quality & governance

In paid roles

  • Reconciliation & control totals
  • Automated data-quality tests
  • Anomaly thresholds & alerting
  • RBAC & column masking
  • KPI definition governance

In public projects

  • Schema contracts
  • Quarantine & replay
  • Metric catalogues
  • Injected-failure tests
  • k-anonymity
  • Fairness testing

Business analysis & delivery

In paid roles

  • Stakeholder alignment
  • Requirements & acceptance criteria
  • Metric definitions
  • Self-service rollout

In public projects

  • Process mapping
  • Requirements traceability
  • UAT planning
  • Business cases & options
  • RACI & RAID
  • Change & adoption plans
  • GIS data QA
  • SharePoint & Power Automate design

Where a tool only partly ran, the chip says so: the Airflow DAG is imported and checked in CI but never scheduled, and the Snowflake profile has never touched a live account.

EDUCATION & CREDENTIALS

Education and credentials

MASTER'S DEGREE

GPA3.76

MPS, Analytics — Applied Machine Intelligence

Northeastern University · Vancouver, BC

—

The degree is where the AI/ML half of this portfolio comes from — and where I learned to distrust a model that hasn't been tested against a boring baseline. My capstone is what Ask Your Data above grew out of — the governed SQL layer between the question and the answer came later, on my own time.

  • Machine Learning
  • Deep Learning
  • NLP / LLMs
  • Time-Series Forecasting
  • Statistical Inference
  • Data Mining
  • Cloud Data Platforms

BACHELOR'S

B.Eng., Computer Science

Gujarat Technological University

—

Engineering fundamentals — which is why the analytics work ends up in a repo with tests instead of a workbook on a shared drive.

AWARD

First prize — wildfire-prediction hackathon

Team 1904 Coders, 2024: a Power BI dashboard over Canada’s national fire records, three models compared on area burned, and a weather-sensor prototype on Python, Django and PostgreSQL. It is now the live Canada Wildfire Risk forecast — and the winning model has been re-scored out of time, where its R² falls from 0.351 to 0.201.

Microsoft DP-600

Certification in progress

Lakehouse and semantic-model work in Fabric, which is the platform most of my recent pipelines and control-tower reporting run on.

Google Data Analytics Professional Certificate ↗

GOOGLE · OCT 2023 · XZRHJQKA8B3M

The full eight-course track plus the capstone case study — the end-to-end habit of ask, prepare, process, analyse, share, act.

SQL for Data Science ↗

UC DAVIS · JAN 2025 · 02MQDX1MTDNZ

Window functions, CTEs and query profiling — the SQL that the HR and GL repos are actually written in.

Python for Data Science, AI & Development

IBM · NOV 2023

Python, pandas and data preparation — the layer every pipeline and model in this portfolio sits on.

Databricks Fundamentals

DATABRICKS · ACCREDITATION

Lakehouse architecture and the Databricks platform — the same medallion pattern the control-tower and migration repos implement in Fabric.

Data Visualization & Storytelling Basics

NORTHEASTERN · APR 2023

Power BI and the part that matters more than the chart type: making a number land with the person who has to act on it.

Introduction to Analytics

NORTHEASTERN · DEC 2022

The foundation course from the first term of the master's.

DELIVERY DOCUMENTS

The documents around the code

For business-analyst, lead and stakeholder-facing roles: the charters, process maps, UAT plans, business cases and decision memos behind the projects above. Each one opens on GitHub.

Scope: these are portfolio scenarios on synthetic data. They show how I frame, document and test a delivery. They don’t claim a client engagement, municipal employment, an approved capital plan or production Microsoft 365 administration.

REPORTING DOMAINS

Reporting across finance, sales and operations

Twelve domains, and the same discipline under all of them: one definition per metric, written down, tested, and labelled with its basis — so the meeting argues about the business instead of about whose number is right. Each tile is a question I've actually been handed, and the model I built so nobody had to ask twice. Each tile links to a related implementation; its case study states the scope.

Explore 12 reporting domains
01

Sales Operations & Rep Performance

“Why did we miss the number — and who's actually performing?”

Pipeline-to-invoice reporting with governed quota, attainment and mix logic, so the variance conversation starts from an agreed baseline instead of three competing extracts — and rep scorecards normalised for territory potential and account mix, with the definitions locked so nobody can re-cut them mid-quarter.

02

Customer Analytics

“Which customers are quietly leaving?”

Cohort retention, RFM segmentation, order-frequency decay and margin-by-customer — with retention and churn reported as rates rather than counts, revenue-weighted alongside logo, and net revenue retention decomposed into new, expansion, contraction and churned. Plus the recommender that proves a simple model can beat a clever one.

03

Product & Assortment

“Which SKUs earn their shelf space?”

SKU-level velocity, annual consumption value, ABC-XYZ policy, ageing, excess and dead-stock analysis—separating products that earn working capital from products that merely occupy it.

04

Vendor Performance

“Which suppliers are costing us more than they invoice?”

Vendor scorecards on fill rate, lead-time variance, price adherence and quality claims — landed-cost impact quantified rather than argued.

05

Supply Chain Planning

“How much should we be holding, and where?”

Seven forecast methods compete in rolling-origin backtests before the selected signal drives safety stock, reorder points and EOQ. Inventory position includes inbound and allocated demand, and network surplus is screened before another purchase is recommended.

06

Warehouse & Logistics

“Does the system match the shelf — and did it arrive on time?”

Cycle-count record and value accuracy, an adjustment-to-shrinkage bridge, economically screened transfers and supplier delivery/fill/quality evidence—plus governed FEFO and lot-traceability patterns from production work.

07

AP & AR

“What do we owe, and what will we actually collect?”

Aging, DPO/DSO, invoice-match exceptions and credit exposure — receivable turnover on an average balance, an aging book that reconciles to the receivable it ages, and payables overdue as a share of total. On the AR side, an NRV model that prices open receivables at what they'll realistically bank.

08

GL / P&L Reconciliation

“Why doesn't the subledger tie to the GL?”

Automated ERP-vs-subledger controls classify discrepancies and trace every dollar to source. A governed certification layer then assigns each account-period a risk tier, accountable review route and explicit certify, review or block state, with evidence fingerprints and re-verification.

09

Data Engineering & BI Platform

“Can we trust the pipeline this all sits on?”

Bronze→Silver→Gold pipelines in Fabric/ADF/Synapse and dbt, star-schema models, semantic layers, RLS/OLS, and CI that breaks the build when the data drifts.

10

AI & Machine Learning

“Is there a model here, or just a metric?”

Forecasting, churn and flight-risk classification, recommenders, survival analysis and grounded LLM/text-to-SQL work — held to honest holdouts, fairness gates and a baseline it has to beat before it ships.

11

HR & People Analytics

“What is labour actually costing us, and who is about to leave?”

Time-and-attendance integration and punch-to-payroll reconciliation, labour cost per unit produced, overtime exposure and schedule-vs-actual variance — plus headcount, turnover and flight-risk modelling held to a fairness gate before anyone sees a name.

12

Marketing & Growth Analytics

“Which channel actually earned that sale?”

Funnel and cohort reporting, LTV against acquisition cost, and multi-touch attribution graded against a known answer rather than argued about — with a geo holdout and a power calculation for the questions attribution genuinely cannot settle.

QUICK ANSWERS

What recruiters usually ask first

Can you work in Canada?
Yes. I’m legally eligible to work in Canada.
Where are you based? Will you relocate?
Vancouver, BC. I’m open to remote roles and to relocating anywhere in Canada.
When can you start?
Immediately.
Which roles are you looking for?
Data analyst, BI / Power BI developer, analytics engineer, data engineer, business analyst, financial analyst, supply chain analyst and applied data science roles. Role fit ties each one to evidence.
Is the project data real?
It’s synthetic and generated from fixed seeds, so every result can be rebuilt and re-tested. The exception is the wildfire forecast, which runs on public Canadian fire and weather records. Results from my paid roles come from employer systems, so they’re described rather than published.
Can I see the code?
Yes. All 19 projects are public on GitHub ↗, each publishes reproducible validation evidence, and 14 also run as live demos.
Portrait of Kush Patel

Hiring for a data, BI or analytics role? Let’s talk.

Send me the job description, or the report your team argues about, and I’ll walk you through how I’d find the cause, fix it at the source and keep it fixed.

Open to remote and relocation across Canada · Legally eligible to work in Canada · Available immediately

MPS ANALYTICS (APPLIED ML), NORTHEASTERN — GPA 3.76 FIRST PRIZE, 2024 WILDFIRE HACKATHON MICROSOFT DP-600 — IN PROGRESS