Convert an ADF mapping data flow into dlt and dbt and prove parity
Order or customer reporting still comes from an Azure Data Factory mapping data flow whose logic lives only on the ADF canvas, with no tests or review.
- Transformation
- Any domain
Platform
112 RecipesRecipes that can execute against local DuckDB.
The sandbox is seeded on DuckDB.
Order or customer reporting still comes from an Azure Data Factory mapping data flow whose logic lives only on the ADF canvas, with no tests or review.
A business rule in an incremental model was corrected, and only a known date range of published history should be restated.
A dbt model is correct but a full refresh is too slow or too expensive to run routinely, and gets slower as history grows.
A model has grown into one long query with logic packed inline, and nobody dares change it because dashboards and reports depend on its output.
A report or table is still produced by a hand-run SQL script or a database view outside dbt, with no tests, lineage or review.
A managed connector's bill changed shape, or it broke and the vendor fix has been pending for weeks, and the team wants the load in code it owns.
A table or report is still produced by running a notebook by hand, pulling warehouse data into dataframes, with no tests, lineage or review.
Models or views call a scalar function created directly in the warehouse, so dbt cannot see the dependency and changes to it are not reviewed or tested.
A Type 2 dimension is kept by a hand-written MERGE procedure or trigger that nobody wants to maintain.
A Spark notebook lands raw files into bronze, and the team wants that load as tested pipeline code without keeping a cluster for it.
A required change to a published relation's grain, column meaning or shape cannot keep the old interface.
A load into a fact or reporting table still runs from a mapping built in a visual ETL tool, and its lookups, filters, routing and insert-update-delete rules are visible only on the tool's canvas.
An API source has to load into bronze incrementally instead of reloading everything on every run.
A transaction-monitoring model is fed hand-built features nobody can reproduce, so two runs on the same data disagree.
Credit risk reads delinquency off a servicer status field that each system refreshes on its own day, so bucket counts and roll rates differ from report to report.
A batch export of database change events is available and the current state of its tables has to be rebuilt without reading the source database again.
A backdated correction must change today's reading of the past, yet a report issued earlier has to stay reproducible as it was published.
Transaction feeds overlap, and source deliveries may be counted as separate business events.
Sales ops, demand planning and channel finance each report a different sell-in, sell-out and channel stock figure, because distributors report in different units, codes and cutoffs.
Revenue accounting closes the month by working gross to net in spreadsheets, nobody can audit them, and the trade accrual never ties to what customers claim.
Trade marketing reports promotion results with whatever comparison each analyst chose, and nobody can say what "without the promotion" meant for a given event.
Planners cannot see which lots are close to expiry, how much of each is still usable, or how much will go unallocated, so stock is written off that a customer could have taken.
A customer who opted out in one system still gets messages from another, because each source says something different and whichever job ran last wins.
The payback conversation uses a customer value from a spreadsheet nobody can reproduce, and it counts order revenue only, with no refunds and no cost of serving the orders.
Marketing, finance and product each quote a different churn rate because each defines an active and a lost customer differently.
Marketing segment lists come from a spreadsheet or BI export nobody can reproduce, and the same customer lands in different segments depending on who pulled the list.
An operational database's tables have to land in bronze, and reloading every table in full on each run is too slow or too heavy on the source.
Customer, asset or vendor attributes change, but past events need a defensible historical classification.
Component demand for an approved quantity of finished goods is worked out by hand or in a spreadsheet, and nobody can show which BOM revision, unit conversion or scrap rate produced a figure.
Historical fees or surcharges change when a current rate is applied to past events.
Revenue or productivity must be reported by employee, asset or team, but responsibility for each event is unclear.
A partner or vendor drops files into a folder on a schedule, and bronze has to pick up each delivery without a rerun loading it twice.
Finance needs the aged payables for a past month or quarter end, but the payables system only shows what is owed today.
Finance needs the aged receivables report and DSO for a past month or quarter end, but the receivables system only shows what is open today.
Budget-versus-actual is a monthly copy-paste from the general ledger into the budget spreadsheet, and the variances change depending on who built them.
Accounts payable paid the same supplier invoice twice and only found out when the supplier returned the money.
Every month someone rebuilds the fixed-asset register and depreciation schedule in a spreadsheet to prove that opening value plus additions less depreciation and disposals equals closing value.
Month-end close stalls because control accounts do not agree with their subledgers and the difference is worked out by hand in a spreadsheet.
Finance subtracts one period's gross margin from another and writes the explanation by hand, and the story changes with whoever builds it.
Revenue is spread across months by hand in a spreadsheet and never agrees with the deferred revenue balance or with what was invoiced.
The weekly cash view is a spreadsheet rebuilt by hand each week, and nobody can say which receipt, payment or assumption moved a week's balance.
The close pack is rebuilt by hand every period and last quarter's trial balance cannot be reproduced as it was when the period closed.
The cloud bill grew and nobody can say which team or product drove the increase.
A SaaS renewal is due and nobody can say how many of the paid seats are actually used.
A spreadsheet that reports and models depend on is edited by hand, and a moved, renamed or retyped column keeps breaking them quietly.
The revenue cycle team matches payer remittances to billed claims by hand, and nobody can say, payer by payer, how much of what was billed was paid, adjusted, denied or is still open.
The quality team rebuilds a readmission rate from a spreadsheet each quarter, and nobody can say who was left out of the rate or why.
Occupancy, ADR and RevPAR differ between reports because each one counts stays, comps, out-of-order rooms and cancellations its own way.
The same customer exists in several systems under different ids, so customer counts and per-customer revenue are inflated.
The same customer is written differently across CRM, billing and support, so joins on name or address miss.
A new dbt model must be brought up to date incrementally on each run, and nobody can show that a rerun or a re-delivery of records already applied leaves it unchanged.
Reserving analysts rebuild loss triangles by hand in spreadsheets, and a late payment or reserve change pushes back into cells that were already reported.
A raw material lot is recalled and nobody can say which finished lots and which customer shipments contain it, or how much of it each holds.
Finance cannot say what closing inventory is worth or how much cost of goods sold a month carries because receipts, issues, returns and adjustments are costed by hand.
Clinical operations rebuilds enrollment and site performance in a spreadsheet each month, and nobody can say who was left out of the enrolled count or why a site looks slow.
A fleet dashboard labels observed vehicle occupancy as utilisation without an authoritative available-time denominator.
A TMS dashboard reports on-time performance by lane, but nobody can inspect how it is calculated or reproduce its figure.
Plant OEE comes from a hand-built spreadsheet and nobody can say whether stops, slow running or scrap cost a line its points.
Yield and work in progress come from a spreadsheet that counts a reworked unit as a second unit produced and cannot keep first-pass yield apart from final yield.
Production-order variances are worked out in a spreadsheet nobody can audit, and nobody can say which standard version each variance was measured against.
Nobody can say how much of the company's material is sitting at a subcontractor, because transfers, returns, scrap reports and finished receipts live in different places and are never netted.
Marketing says a channel pays back quickly and Finance says it never does, and nobody can show the sum from the spend and contribution records.
Marketing and Sales each have a spreadsheet crediting their channel with the same revenue, and together they claim more than was booked.
Campaign owners ask whether a campaign is on pace and the answer changes with which budget version and which cost number someone used.
The same person is emailed, texted and pushed by several tools in one week, and nobody can say whether the next planned contact is allowed.
Sales and finance cannot see total revenue or pipeline for a whole corporate family because subsidiaries sit as separate accounts.
The same product carries different SKUs and category trees in the ERP, the web shop and the point of sale, so sales by category disagree between reports.
A new percentage, rate or average needs a defensible eligible population and missing-value policy.
Revenue or average order value means different things in different marts and dashboards, and nobody can say which number is right.
Waiting, idle, available or busy time must be measured by site or zone and hour from operational event histories.
The warehouse system, the ERP and the last stock count report different quantities for the same item and nobody can say which is right or why.
Customers report late deliveries, and Sales, Supply Chain and the carriers each quote a different on-time-in-full figure because each applies its own promise date, tolerance and partial-shipment rule.
Procurement, Finance and the business units each quote a different spend total, and nobody can say how much was bought outside a contract.
Gross sales minus original item cost overstates order margin because refunds and returns arrive after the order.
Leadership asks whether attrition is rising and where, and nobody can answer from one consistent set of figures.
HR, finance and the board deck each report a different headcount for the same month-end, and nobody can say why.
A pay-equity review is due and worker-level compensation cannot be shared widely.
Payroll expense in the general ledger does not match the payroll register at close, and the gap is worked out by hand.
A model scores well in training but worse in production because training rows used facts, corrections or labels a real prediction could not have seen.
Procurement and finance are asked what is still owed to suppliers on open orders at a month-end, and each answer comes from a different spreadsheet.
Procurement reports savings from negotiated agreements and Finance cannot trace them to the prices actually paid.
Procurement cannot say how much supplier rebate has been earned under each purchasing agreement this period, or how much of it suppliers have already credited.
Accounts payable is asked to release payment and cannot say how much of an invoice is covered by the goods actually received.
Product analytics numbers cannot be reproduced outside the vendor's screen, and nobody can say why two conversion figures differ.
Grants accountants cannot say per award how much is authorized, obligated, spent and drawn, and each report gives a different answer.
A supplier owns stock until it sells, that stock shares a store and SKU with stock we bought outright, and the stock report adds the two together.
Finance cannot say what each marketplace order settled for or what is still owed, because fees, refunds, chargebacks and reserves are netted into payouts.
Stores count each till at shift close and Finance cannot tell which shortages are real and which come from how the POS records voids, refunds, change and float moves.
Customer service promises stock that is already reserved, or sells the same units twice because reservations that expired or shipped still count against availability.
Planners cannot tell which items are about to run out because sell-through and stock-outs live in spreadsheets, and each one counts a day with no stock differently.
RevOps and Finance each quote booked, billed and collected, and the three numbers never agree because every team ties them together with its own spreadsheet.
The CRM overwrites opportunity stage, amount and close date, so past pipeline cannot be reproduced as it stood at an earlier point.
Reps, managers and finance disagree on attainment because each team credits bookings with its own spreadsheet logic.
Finance, RevOps and the board each quote a different net revenue retention because each turns subscriptions into monthly recurring revenue its own way.
Finance cannot say what each rep is owed because tier rates, caps, holds, payments and cancellations are applied by hand in a spreadsheet.
Leaders submit a sales forecast every week, but nobody can say how close each submission came to what booked, or whether the misses run over or under.
Leads, accounts, contacts and opportunities sit in separate CRM tables and the conversion links are patchy, so nobody can show which lead became which customer or deal.
Sales and Finance disagree about the price a customer was promised, and someone reconciles quotes to orders and invoices by hand.
The ticketing vendor's dashboard reports SLA met or breached, but nobody can check how its numbers are calculated.
Two reports put the same day in different weeks, months, quarters or fiscal periods because each mart builds its own date logic.
Finance adds amounts held in several currencies as if they were one, or restates old transactions at today's rate, and the total changes every time someone reruns it.
A fleet dashboard reports revenue per shift but cannot establish whether a shift covers its applicable costs.
A load stopped and nothing failed; downstream models rebuilt on old data and the reports still looked current.
Monthly subscriber usage differs by who ran it, because nobody can say which call-detail batches had landed or whether each arrived complete.
Usage charges differ by who calculated them, because graduated and volume pricing, shared allowances and credits are applied differently from one run to the next.
Revenue assurance compares metered usage with billed usage in a spreadsheet each month, and nobody can say which differences are real and which are timing, estimates or a meter swap.
An existing dbt change builds successfully but reviewers still need evidence that its business answers remain valid.
The warehouse bill keeps growing and nobody can say which models or jobs are behind it.
A Synapse dedicated SQL pool or a set of SSIS packages is due to move to Fabric, and nobody can say what is in it, what each piece would take or what stops it.
Part of a dbt project is moving to another warehouse, and a macro its models call only compiles, or only returns correct values, on the old one.
A table or model has been rebuilt on another platform or database while the original is still running, and the owner needs evidence the two hold the same data before cutting over.
A dbt project has to run on a different warehouse or lakehouse, and the dashboards and reports that read it cannot show a different number afterwards.