
AI for Decision Makers | LAM Research
July 18, 2026

Clinical Associate Professor of Computer Science
Willamette University
jjrembold@willamette.edu
Astrophysicist, now happily in the data.
Trained as an astrophysicist. Ph.D. dissertation on near-Earth meteoroids, measured through lunar impact observations. Part of the Magdalena Ridge 2.4m telescope team before moving fully into computer and data science.
Introductory programming, database management and storage, and Advanced Data Engineering. Works at the junction of the natural sciences and computing.
Ph.D. Astrophysics, New Mexico Tech. B.S. Physics and Math, Linfield College.

Associate Professor
Willamette University
lpcordova@willamette.edu
From building software to building software engineers.
Software engineer and team leader turned professor, developing the engineers I’d want on my team and studying what happens when AI becomes part of how we build, learn, and work.
Teaching students to write great code, tame messy data, and solve hard problems.
Ph.D. Software Engineering, M.S. Software Development & Management, B.S. Computer Science
Hewlett-Packard, Elemental Technologies, SAIF Corporation
By the end of this segment, you will be able to:
Two numbers. One company. Somebody is about to present the wrong one.
You took Michael’s job at the Scranton branch.
You had three tasks:
Every one of those starts with a number you trust. This morning is about what happens when you cannot.
Michael needs one number for the board deck: what did Scranton sell?
The sheet Michael’s team actually maintains. 155 rows, updated by hand, lives on somebody’s desktop.
sales_order_lines, the same file you opened in Excel yesterday. Built from orders that shipped and were invoiced.
Total: $43,020.24
Total: a different number.
Both are “the data.” Both are defended by someone with a job title. Which one goes in the board deck?
Five real rows from regional_manager_tracker.csv:
| Date | Client | Rep | Qty | Total $ | Notes |
|---|---|---|---|---|---|
| 01/05/22 | Whitmore Nonprofit Services | 83 | 19 | 249.36 | check w/ Dwight |
| 09/02/22 | Ridgeline Nonprofit Services | 5 | 23 | 365.24 | net-30 |
| 07/07/22 | Cascade Nonprofit Inc | 5 | ~11 |
107.03 | net-30 |
| 06/28/22 | Redwood Financial Goup | 104 | ~8 |
136.40 | net-30 |
| 02/10/22 | Conerstone Retail Associates | 161 | 15 | 230.01 |
Nothing here is malicious. Every one of these is a person doing their best on a Tuesday.
Open regional_manager_tracker.csv.
Take 60 seconds. What is wrong with that sheet? Call them out.
Here is what is actually in there:
~11 and a dozen in a column that should be a number. 23 of 155 rows, 14.8%.Goup, Conerstone, Summi. Client names that will never match your CRM.01/05/22. Two-digit year. January 5th or May 1st?Rep is 83. An ID, with no name attached.Six pitfalls. You have met all of them.
Yesterday, Prof. Kitada Smalley gave you tidy data: one variable per column, one observation per row, one value per cell. She also showed you the messy versions.
That sheet is the messy version, in the wild, feeding a board deck.

Two paths out of the same three systems. They do not agree, and the disagreement is the deliverable that lands on your desk.
When the same question has two owners, it has two answers.
The tracker says $43,020.24. The system says something else. Neither is labeled “official.”
Single Source of Truth (SSOT) means: for any given number, exactly one system is authoritative, and everyone knows which.
You almost certainly do not have this. That is normal. Knowing where you do not have it is the actual skill.
To combine two systems you need a shared key. In practice, the key is missing or mangled.
In the Dunder Mifflin CRM export, of 1,923 rows:
Acct ID at all.So 5% of your customers silently vanish from any report built on that match. No error. No warning. The total is just quietly too low.
The same fact, written five ways, is five facts as far as a computer is concerned.
| What it should be | What it actually is |
|---|---|
| A number | $141.58 (text, with a dollar sign) |
| A date | 10/13/2022 here, 01/05/22 there, ISO somewhere else |
| A quantity | ~11, a dozen |
| A phone number | (682) 486-2143, 2953356785, 209.577.2260 |
| A status | FULFILLED vs Fulfilled |
Every one of these is a real value in the Dunder Mifflin exports. Sorting that AMT column puts $99 after $1,000.
Nobody sets out to double-count. It happens on export.
If you sum revenue off the raw ERP export, you have just billed 93 orders twice. Your number is too high, and it is too high in a way that looks completely reasonable.
Data lineage is the map of a number’s entire journey, from the system it was born in to the cell you are looking at.
Ask of any number on any dashboard:
If nobody can answer in under a day, you do not have lineage. You have folklore.
The tracker lives on one laptop. One person knows the cleanup steps. Those steps live in their head.
Bus factor of one. If they take a vacation, the report is late. If they leave, the report is gone, and so is any hope of explaining last quarter’s numbers.
Manual steps are not just slow. They are undocumented by construction.
A regional revenue number on your dashboard looks 30% too high. What does asking for data lineage actually get you?
A. A backup of the old spreadsheet versions so you can recover the previous number.
B. The map of that number's journey from its origin system to the report.
C. The folder structure on the shared drive where the team's files live.
D. A list of which fields are numbers and which are text.
B. Lineage is the journey, not the storage. It is what lets you walk backward from the wrong number to the step that broke it, which in this case is probably those 93 duplicated ERP rows. A, C, and D are all real things. None of them tell you where a number came from.
You will probably not fix most of this yourself. You will ask the team that can.
The tracker is not broken because of bad code. It is broken because no one owns it, no one knows when it last updated, and no one checks it against anything.
That is governance, and governance is a management problem before it is an engineering one. You do not need to write the pipeline. You need to know what to ask the person who did.
For any number your decision depends on:
Each question is a pitfall turned into a habit.
| Question | The pitfall it catches |
|---|---|
| Who owns this? | No single source of truth, bus factor |
| When did it last refresh? | Silent staleness |
| What is it reconciled against? | No lineage, duplicates |
Three questions, asked out loud in a meeting, will save you more bad decisions than any dashboard.
Your team wants a new dashboard. What should you do first?
A. Inventory every data source you currently have access to and map what is in them.
B. Ask IT which tables are already modeled so you can reuse existing work.
C. Write down the decision the dashboard is supposed to change.
D. Pick the visualization tool the company already licenses.
C. Start with the business question, specifically the decision that hangs on it. Starting from the data you happen to have is how you end up with a beautiful dashboard full of vanity metrics that nobody acts on. A and B are the second question. D is barely a question at all.
You now have language for a thing you already knew was broken.
| Symptom you have lived | What to call it |
|---|---|
| “Our numbers do not match theirs” | No single source of truth |
| “Half the accounts fell out of the report” | Key drift |
| “It sorted wrong” / “the dates are backwards” | Format chaos |
| “Revenue looks too high” | Duplicates |
| “Where did this number come from?” | No lineage |
| “Only Dave knows how to run it” | Bus factor |
The left column gets you sympathy. The right column gets you a fix.
Next you put this to work. You will take one report you actually own and run it through the same questions, in writing, with the group.
The pitfalls are generic. Yours are specific.
The thing that breaks, and what it is actually made of.

| SQL Keyword | Description | Excel Equivalent |
|---|---|---|
SELECT |
Chooses the columns to show | Hiding columns or choosing table fields |
FROM |
Tell the database what table to look in | Selecting a tab name |
WHERE |
Filters the rows based on specific conditions | Clicking the drop-down filter on a column header |
JOIN |
Merging tables together using a matching ID | Running a VLOOKUP or XLOOKUP |
GROUP BY |
Collecting and collapsing similar values to summarize | Creating a pivot table |
ORDER BY |
Ordering the rows by a particular column | Sorting a table by a column |
AS |
Rename a column or table | Renaming a column |
Suppose we then have the following query. What might its equivalent actions be in Excel?
branches table
sq_ft of all branch buildings across each state and rename to avg_ft
FROM → JOIN → WHERE → GROUP BY → SELECT → ORDER BYemployees.csv and branches.csv into their own tabs in Excel| branch_name | salary |
|---|---|
| Corporate HQ | 168000 |
| Rochester | 63146 |
| Albany | 50186 |
| Buffalo | 65147 |
| Utica | 63639 |
| Yonkers | 61574 |
| department | dept_avg_sal |
|---|---|
| Sales | 58957.4565 |
| Warehouse | 48910.5 |
| Accounting | 61051.1282 |
| Corporate | 251250.0 |
| Human Resources | 61463.5540 |
| Management | 85333.3333 |
By the end of this segment, you will be able to:
We have been using a paper company all workshop. For this next part, the data is yours-ish.
Download the updated files for this segment from Canvas → Modules → mini-pipeline.zip
Inside you get two folders. We start in weekly-service.
| Folder | What’s in it |
|---|---|
weekly-service |
Three site files. This is the folder you point Excel at. |
late-arrival |
One more file. Do not touch it yet. |
Spreadsheets run a lot of the business. They will keep running it for now.
Not because they are the best tool. Because operations do not wait for a perfect warehouse, unlimited compute, aligned teams, or politics to settle.
Until those constraints go away, Excel is where the work happens. Power Query is how you make that work repeatable.
It has been sitting in the Data ribbon this whole time.
Power Query is a tool built into Excel that records the steps you take to clean and combine data, then replays them on demand.
That is the whole idea. It is not a better way to clean a file once.
It is a way to clean a file the same way every time.
Excel: the Data ribbon → Get Data.
No install, no license, no ticket to IT. If you have Excel, you have it.
Excel’s Power Query
Yes! And it’s called Power Query

Same three letters, with a mouse attached.
Your cleaned table is almost never the finish line. It is the input to something else.

Every one of those inherits whatever you hand it. A model trained on a column that was text last week and numbers this week is confidently wrong, and it will not tell you.
This is why we are spending forty-five minutes on a spreadsheet feature.
The pipeline is not the point. The point is that the shape of your data stops changing without warning.
Same columns, same types, same cleaning, every week. That is what makes everything downstream trustworthy.
Fair question. Let’s take it seriously.
Paste a messy file into a chat assistant and ask it to clean up the amounts and fix the names, and it will do a genuinely good job.
Generative AI is excellent at figuring out what transformation you need. Use it for that.
A language model does not execute your instructions. It predicts the next token, sampling from a probability distribution over the possibilities.
Practically, that means the same file and the same prompt can give you a different answer on a different run.
Run the same cleanup twice and you might get:
Engineer one time and Engineer Name the next.03/04/2026 read as March 4th once and April 3rd the next.None of those are bugs. That is the technology working as designed.
Same input, possibly different output.
No record of what it did.
Same input, same output. Every time.
Every step written down, in order.
Use AI to work out the transformation. Use a recorded pipeline to run it.
Your weekly revenue number feeds a forecast the VP sees. Why is a recorded Power Query pipeline the better tool than pasting the file into an AI assistant each Monday?
A. AI cannot read CSV files.
B. It is deterministic: the same input produces the same output, and the steps are recorded.
C. Power Query is faster than AI.
D. Company policy forbids AI for all data work.
B. AI is genuinely good at working out what to do. It is a poor fit for the part that has to happen identically every week and be auditable afterward. A is false, C is not reliably true, and D is not the reason.
None of this says keep AI out of your work. It says pick the right job for it.
This particular job, the same cleanup every Monday feeding a number someone acts on, wants a boring, repeatable process.
Next time we are together, when we can get at your actual AI toolchain, we can look at where it genuinely fits in your workflows.
Now the actual scenario. This one might be yours.
You own field service for a region. Every Monday, three service sites send you their weekly tool log: every PM, every unscheduled down, every parts replacement on the installed base.
Same columns, same shape, three separate files. You open each one, fix the same things every time, and paste it all into a master sheet before the ops review.
It takes twenty minutes. Every week. Forever. And next Monday there will be three more.
| File | Rows |
|---|---|
service_hillsboro_2026-03-02.xlsx |
74 |
service_chandler_2026-03-02.xlsx |
61 |
service_austin_2026-03-02.xlsx |
68 |
203 rows across the three. Etch, deposition, and clean tools, one week.
| Column | Example |
|---|---|
Service Date |
2026-03-04 |
Site |
Hillsboro |
Tool ID |
Kiyo-4412 |
Process Step |
Conductor Etch |
Event Type |
Unscheduled Down |
Downtime Hours |
14.2 hrs |
Engineer |
Dana Whitfield |
Parts Cost |
USD 12,480.00 |
Every file has exactly the same problems. That is realistic: the same system exports the same way every week.
USD 12,480.00
14.2 hrs
The USD and the hrs make Excel treat both as words. SUM returns 0.
Dana Whitfield
marcus chen
PRIYA RAMAN
Stray spaces and random casing. Three spellings of one engineer.
Strip the words off the numbers, tidy the names, and the data is good. That is the whole cleanup.
Do not load three files. Point Excel at the folder.
Get Data → From File → From Folder
Power Query reads every file in that folder and stacks them into one table. Three sites today. Four next week. You do not have to care.
Because these are workbooks, it will ask which object to pull out of each one. Pick the table called ServiceLog, not Sheet1. Then OK.
I am going to do Parts 1 and 2 off your worksheet: combine the folder, then strip the words off Parts Cost.
Watch the Applied Steps pane on the right. That is the whole idea.
Then you do those same two parts yourself and keep going through Part 6.
Every click I made became a line in Applied Steps.
Ten minutes. Your turn.
Start at Part 1 and redo what you just watched. Keep going to Part 6. Click-by-click detail is on the page in front of you.

Blue is what you just watched me do. Grey is new.
When you are done: 203 rows, Parts Cost totals $1,707,171.19, Downtime totals 1,331.6 hours.
That is fine. Three things go wrong, and all three have the same fix.
Content full of the word Binary? You clicked Load instead of Combine & Transform Data. Delete the query and start again.Column1, Column2, and the header words showing up as data? In the Combine dialog you picked Sheet1 instead of ServiceLog. Delete the query and start again.This is the part worth remembering.
Villach just sent theirs. They… were late.
The downtime number in your deck is now wrong. You have twenty minutes.
What do you have to change in your pipeline?
That is the entire procedure. Now you do it.
Two minutes. Do not rebuild anything.
service_villach_2026-03-02.xlsx out of late-arrival and into the weekly-service folder.Data → Refresh All.203 rows
$1,707,171.19
1,331.6 downtime hours
260 rows
$2,189,681.59
1,710.5 downtime hours
Villach’s 57 rows came in with every step you built already applied. You never opened their file.
You did not edit a formula. You did not redo the cleaning. You did not remember what you did last week.
You added a file and clicked Refresh.
Next Monday, when three more files land, it is the same two moves. That is a pipeline.
Vocabulary, limits, and what to do Monday.
In the first segment we said lineage is the map of a number’s journey, and that without it you have folklore.
Applied Steps is that map, written down as you work, for free.
Anyone can open your query and read exactly what happened to that number, in order.
You appended: stacking files with the same columns to make the table taller.
The other one is merge: matching two different tables on a shared key to make the table wider. That is Excel’s VLOOKUP, and SQL’s JOIN.
Say the right word and your data team knows what you need in about four seconds.
Hand it to IT when any one of these is true:
Not because a file got big. Not because of a memo. Because of consequence.
Pick the most annoying recurring file you deal with.
If it works, you just bought back that twenty minutes for the rest of the year.
