# bianca.codes > contained chaos, creatively crafted. ## Posts - [What Actually Changes When You Go From Analyst to Senior Analyst](https://bianca.codes/blog/what-actually-changes-analyst-to-senior-analyst.md): The title changes, the salary changes, and the list of skills that matter changes completely. Worse, the things that made you good as an analyst quietly start working against you at the senior level. - [Star Schema Done Right, Part 1: What a Fact Table Actually Is (And Isn't)](https://bianca.codes/blog/star-schema-done-right-part-1-what-a-fact-table-actually-is-and-isnt.md): Most introductions to star schema start with the diagram. The star, the centre, the spokes. This one starts with the question: what problem does a fact table solve that a flat table doesn't? Part 1 builds the intuition before the vocabulary, so the rest of the series makes immediate sense. - [Excel Is Quietly Becoming a Programming Language and Most Users Haven't Noticed](https://bianca.codes/blog/excel-is-quietly-becoming-a-programming-language-and-most-users-havent-noticed.md): LAMBDA, MAP, REDUCE, SCAN, BYROW. These are functional programming primitives. Excel is shipping them one by one, and most users are still writing nested IFs. The spreadsheet you learned in 2015 has been quietly replaced by something much more powerful. - [Build a Dynamic Data Validation List That Updates Itself When Your Source Table Grows](https://bianca.codes/blog/build-a-dynamic-data-validation-list-that-updates-itself-when-your-source-table-grows.md): You'll build a dropdown list that reads from a structured table and includes every new row automatically. No named range maintenance, no 'why isn't my new entry showing up' moments. Structured table plus a spill reference, and your validation list never needs touching again. - [MAP: Apply Any Transformation to Every Element in an Array - Without a Loop](https://bianca.codes/blog/map-apply-any-transformation-to-every-element-in-an-array-without-a-loop.md): MAP takes your LAMBDA and runs it on every element in an array. No helper columns, no dragging formulas, no VBA loops. It's the Excel equivalent of a functional programming pattern, and once you've used it, going back to column-by-column formulas feels like a step backwards. - [What I Wish Someone Had Told Me About Working With Data in a Small Team](https://bianca.codes/blog/what-i-wish-someone-had-told-me-about-working-with-data-in-a-small-team.md): In a small team, you're the analyst, the engineer, the dashboard designer, and the person who explains what a p-value is at the all-hands. - [3-Minute Win: Use Power Query's 'Keep Rows Where' Filter Without Writing a Line of M](https://bianca.codes/blog/3-minute-win-use-power-querys-keep-rows-where-filter-without-writing-a-line-of-m.md): The Keep Rows filter in the Power Query UI handles 80% of row filtering tasks without you ever opening the Advanced Editor. Most people skip past it and go straight to writing M. Five clicks and you're done, and the M it generates is clean enough to modify later. - [The Skill Nobody Told You Was Half the Job: Asking Good Questions](https://bianca.codes/blog/the-skill-nobody-told-you-was-half-the-job-asking-good-questions.md): The analysts who get traction aren't the fastest at pulling data, they're the best at unpacking what was actually being asked. The skill is asking good questions, and nobody trains for it. - [Python for Excel Users, Part 3: Merging Datasets and Replacing Your VLOOKUPs](https://bianca.codes/blog/python-for-excel-users-part-3-merging-datasets-and-replacing-your-vlookups.md): VLOOKUP and XLOOKUP, but for files that don't fit in memory, joins on multiple keys, and many-to-many matches that VLOOKUP simply can't do. - [Build a Power Automate Desktop Flow That Exports a Report and Emails It Daily at 7am](https://bianca.codes/blog/build-a-power-automate-desktop-flow-that-exports-a-report-and-emails-it-daily-at-7am.md): Step-by-step from a blank flow, including how to handle the parts that break the first time. - [Power Automate Desktop: The Automation Layer That Connects the Apps That Don't Have APIs](https://bianca.codes/blog/power-automate-desktop-magic-monday.md): Cloud flows are great when your data lives in SharePoint or Teams. But some processes still live in legacy apps, PDFs, or the export button of a system that predates APIs. - [Not Everything Should Be Automated — Here's How to Tell the Difference](https://bianca.codes/blog/not-everything-should-be-automated-heres-how-to-tell-the-difference.md): Automation bias is real: if you can automate something, it feels like you should. But some processes contain judgement calls that automation silently gets wrong, edge cases that require human revie… - [3-Minute Win: Set a Power Automate Flow to Only Run on Weekdays](https://bianca.codes/blog/3-minute-win-set-a-power-automate-flow-to-only-run-on-weekdays.md): Your flow runs daily — but you only need it Monday through Friday. One condition block and a formatDateTime expression, and your automation skips Saturday and Sunday without you touching it. Three … - [How to Say No to a Data Request Without Burning the Relationship](https://bianca.codes/blog/how-to-say-no-to-a-data-request-without-burning-the-relationship.md): You can't build every dashboard that gets requested. But 'no' lands differently depending on how you say it — and most data people either say yes to everything and resent it, or say no in ways that… - [Python for Excel Users, Part 2: Grouping, Aggregating, and Replacing Your SUMIFS](https://bianca.codes/blog/python-for-excel-users-part-2-grouping-aggregating-and-replacing-your-sumifs.md): SUMIFS and COUNTIFS are great — until your data has 500,000 rows and Excel is grinding. Part 2 shows how to do everything your SUMIFS does, but with pandas groupby — faster, more flexible, and on d… - [Your Power BI Report's Performance Problem Is Probably Your Data Model, Not Your DAX](https://bianca.codes/blog/your-power-bi-reports-performance-problem-is-probably-your-data-model-not-your-dax.md): Slow reports get blamed on complex measures. Complex measures get rewritten. And the report is still slow — because the actual problem is a flat table with 47 columns, many-to-many relationships, a… - [Build a Dynamic Summary Table Using BYROW and LAMBDA — No Pivot Table Required](https://bianca.codes/blog/build-a-dynamic-summary-table-using-byrow-and-lambda-no-pivot-table-required.md): You'll build a summary that calculates a custom metric for every row in your dataset without a pivot table, without helper columns, and without copying formulas down. BYROW plus a LAMBDA gives you … - [BYROW and BYCOL: Apply Any Formula to Every Row or Column, Automatically](https://bianca.codes/blog/byrow-and-bycol-apply-any-formula-to-every-row-or-column-automatically.md): BYROW hands your function an entire row at a time. BYCOL does the same by column. Together they replace an entire category of 'drag this formula down and keep it updated' work — and when you combin… - [The Excel Functions Your Spreadsheet Has Been Missing for Ten Years](https://bianca.codes/blog/the-excel-functions-your-spreadsheet-has-been-missing-for-ten-years.md): XLOOKUP, LET, LAMBDA, BYROW, SCAN, MAP — Microsoft shipped more genuinely useful functions in the last three years than in the previous decade. If you learned Excel before 2022 and haven't revisite… - [3-Minute Win: Use BYROW to Apply a Formula to Every Row Without Dragging It Down](https://bianca.codes/blog/3-minute-win-use-byrow-to-apply-a-formula-to-every-row-without-dragging-it-down.md): BYROW hands your function an entire row at a time — which means 'apply this logic to every row in this range' is one formula in one cell. No dragging, no CTRL+SHIFT+ENTER, no missing the last row w… - [Getting Credit for Work That 'Looks Easy'](https://bianca.codes/blog/getting-credit-for-work-that-looks-easy.md): The more competent you get, the less people see the effort behind what you deliver. A clean dashboard looks effortless. A fast turnaround looks like it was always fast. - [Python for Excel Users, Part 1: Reading and Filtering Your First Real Dataset](https://bianca.codes/blog/python-for-excel-users-part-1-reading-and-filtering-your-first-real-dataset.md): This isn't 'what is a variable' Python. This is: you have a CSV that's too big for Excel, you need it filtered by date and category, and you need the result saved as a clean file. Part 1 covers exa… - [Stop Using Helper Columns for Running Totals — There's a Better Way](https://bianca.codes/blog/stop-using-helper-columns-for-running-totals-theres-a-better-way.md): Helper columns aren't wrong. But when a running total requires three of them and breaks every time someone inserts a row, you've created fragility in exchange for familiarity. The Excel array funct… - [Build a Rolling 12-Month Balance Tracker That Updates Without Touching a Formula](https://bianca.codes/blog/build-a-rolling-12-month-balance-tracker-that-updates-without-touching-a-formula.md): You'll build a balance tracker using SCAN and a structured table that extends itself as new rows come in. No helper columns, no fragile cell references, no 'just re-paste the formula down.' Add a r… - [SCAN: The Excel Function That Keeps a Running Total of Anything](https://bianca.codes/blog/scan-the-excel-function-that-keeps-a-running-total-of-anything.md): Running totals used to mean helper columns or array gymnastics. SCAN changes that — it applies a function cumulatively across an array and hands you back every intermediate result. Once you see it … - [The Difference Between a Dashboard and a Decision Tool (And Why It Matters)](https://bianca.codes/blog/the-difference-between-a-dashboard-and-a-decision-tool-and-why-it-matters.md): Most dashboards answer the question 'what happened?' Very few answer 'what should we do?' The gap isn't data — it's intent. A dashboard built for the former often actively gets in the way of the la… - [3-Minute Win: Use SCAN to Add a Running Total Column Without Any Helper Columns](https://bianca.codes/blog/3-minute-win-use-scan-to-add-a-running-total-column-without-any-helper-columns.md): SCAN hands you every intermediate result as it accumulates — which means a running total is one formula that spills down the column. No helper rows, no dragging, no breaking when someone inserts a … - [Why Your Stakeholders Keep Asking for the Wrong Chart](https://bianca.codes/blog/why-your-stakeholders-keep-asking-for-the-wrong-chart.md): They ask for a pie chart when they need a bar chart. They ask for a table when they need a trend line. This isn't ignorance — it's that they're translating a question into a visual type without kno… - [DAX Context Demystified, Part 4: Iterator Functions and When Row Context Returns](https://bianca.codes/blog/dax-context-demystified-part-4-iterator-functions-and-when-row-context-returns.md): SUMX, AVERAGEX, MAXX — these functions bring row context back into a measure, which sounds helpful until they don't behave the way you expect inside a CALCULATE. Part 4 closes the series with the p… - [Excel Formulas Are Getting Too Complex - And LAMBDA Is Why That's Actually Fine Now](https://bianca.codes/blog/excel-formulas-are-getting-too-complex-and-lambda-is-why-thats-actually-fine-now.md): The counter-argument to 'if your formula needs a scrollbar to read, it's wrong.' With LAMBDA, complexity lives in one named place and gets called cleanly everywhere else. The formula in your cell c… - [Build a Reusable OVERDUE LAMBDA and Use It in Three Different Tables](https://bianca.codes/blog/build-a-lambda.md): You'll build a named LAMBDA called OVERDUE that takes a date and a threshold and returns a clean status label. Then you'll call it in three different tables in the same workbook. By the end, you'll… - [LAMBDA: How to Write the Excel Functions Microsoft Didn't](https://bianca.codes/blog/lambda-how-to-write-excel-functions-that-you-can-actually-give-a-name-to.md): Before LAMBDA, every Excel function that existed was one Microsoft decided to write. After LAMBDA, you can write them yourself — naming the logic, hiding the complexity, and calling your custom fun… - [Build a Word template that holds its formatting](https://bianca.codes/blog/build-a-word-template-that-holds-its-formatting.md): Your Word templates shouldn't fight you on formatting. - [3-Minute Win: Name Your LAMBDA Function and Call It From Any Cell in the Workbook](https://bianca.codes/blog/3-minute-win-name-your-lambda-function-and-call-it-from-any-cell-in-the-workbook.md): One function definition in the Name Manager, and every cell in the workbook can call it like a built-in. LAMBDA + named functions means you stop copy-pasting logic and start writing like someone wh… - [When Your Manager Doesn't Understand What You Built](https://bianca.codes/blog/when-your-manager-doesnt-understand-what-you-built.md): You delivered a clean model, a solid dashboard, a real solution — and got a blank look in the room. The work was right. But explaining technical work to someone who doesn't share your frame of refe… - [DAX Context Demystified, Part 3: Time Intelligence and Why Your YTD Is Probably Wrong](https://bianca.codes/blog/dax-context-demystified-part-3-time-intelligence-and-why-your-ytd-is-probably-wrong.md): Time intelligence functions look simple - TOTALYTD, SAMEPERIODLASTYEAR — until they aren't. The reason they break isn't the function. It's that context transition interacts with your date table… - [Power Query Is Not the Right Tool for Every Data Problem](https://bianca.codes/blog/power-query-is-not-the-right-tool-for-every-data-problem.md): Power Query is a brilliant transformation tool. Most of the M code in production is doing things that belong in DAX, SQL, or Python - and the models are slow and the code is unmaintainable. - [Build a 'Latest Record Per Category' Query in Power Query - No Helper Columns](https://bianca.codes/blog/build-a-latest-record-per-category-query-in-power-query-no-helper-columns.md): You'll build a reusable Power Query that finds the most recent entry per group - the kind of query that normally tempts people into messy MAXIFS workarounds in Excel. We're doing it properly, wit… - [Table.Group in Power Query: The Aggregation That Hands You Back a Table](https://bianca.codes/blog/tablegroup-in-power-query-the-aggregation-that-hands-you-back-a-table.md): Table.Group in Power Query returns a table of tables, unlocking complex multi-level analysis you can't get anywhere else. - [The Flow Ran Perfectly for Two Months. Then It Didn't.](https://bianca.codes/blog/the-real-reason-your-automations-break-every-time-someone-else-touches-your-files.md): You built the flow. It ran perfectly for two months. Then a colleague renamed a SharePoint column, or moved a file, or changed a dropdown value - and everything stopped. This isn't bad luck. It's… - [Stop Manually Checking Whether That Report Got Updated](https://bianca.codes/blog/the-power-automate-trigger-that-replaces-your-monday-morning-manual-check.md): Five minutes to set up a SharePoint file-change trigger with a Teams notification. You'll never manually check whether that report got updated again. - [Avoid Bragging: Talk About Your Work Effectively](https://bianca.codes/blog/how-to-talk-about-your-work-without-feeling-like-youre-bragging.md): Stop cringing. There's a way to talk about your accomplishments in Excel and Power BI that sounds competent, not arrogant. It's all about framing. - [DAX Context Demystified, Part 2: CALCULATE and Context Transition](https://bianca.codes/blog/dax-context-demystified-part-2-calculate-and-context-transition.md): CALCULATE is the most powerful function in DAX - and the most misunderstood. Once you see how it deliberately replaces the filter context rather than adding to it, every confusing measure result … - [Your Power BI Report Has Too Many Visuals and Not Enough Story](https://bianca.codes/blog/your-power-bi-report-has-too-many-visuals-and-not-enough-story.md): More charts don't mean more insight. Every visual you add is a question your stakeholder has to answer before they understand the point - and most reports ask them to answer fifteen questions bef… - [Build a One-Page Executive Dashboard in Power BI That Stakeholders Actually Open](https://bianca.codes/blog/build-a-one-page-executive-dashboard-in-power-bi-that-stakeholders-actually-open.md): You'll build a clean single-page report: KPI cards, a trend line, and one slicer. The kind that gets opened voluntarily, not just emailed as a screenshot. Starting from a blank canvas, ending with … - [LET: How to Write Excel Formulas That You Can Actually Read Tomorrow](https://bianca.codes/blog/let-how-to-write-excel-formulas-that-you-can-actually-read-tomorrow.md): Complex formulas aren't the problem. Unreadable ones are. Before LET, you had to repeat the same range reference six times or accept that your formula was a black box. LET gives you named variables in - [Why 'Just Learn SQL' Is the Wrong Advice for Most Excel Users](https://bianca.codes/blog/why-just-learn-sql-is-the-wrong-advice-for-most-excel-users.md): The advice is everywhere: if you're serious about data, you need SQL. But for most analysts already working in Excel and Power BI, the gap isn't SQL knowledge - it's data modelling instinct. Here… - [3-Minute Win: Name Your Intermediate Formula Steps With LET](https://bianca.codes/blog/3-minute-win-name-your-intermediate-formula-steps-with-let.md): One tweak to your most-used formula and it suddenly reads like plain English. LET() lets you name the messy middle parts — so next month's you won't need to reverse-engineer what current you was … - [Nobody Knows What You Actually Do (And That's Partly Your Fault)](https://bianca.codes/blog/nobody-knows-what-you-actually-do-and-thats-partly-your-fault.md): You deliver good work consistently, your manager knows you're reliable — and yet somehow you're invisible at promotion time. The problem isn't your output. It's that you've never made your work l… - [DAX Context Demystified, Part 1: Row Context vs Filter Context](https://bianca.codes/blog/dax-context-demystified-part-1-row-context-vs-filter-context.md): DAX's context confusion cost me hours. Turns out, it's just two simple ideas. - [VLOOKUP Isn't Broken - You're Just Refusing to Move On](https://bianca.codes/blog/vlookup-isnt-broken-youre-just-refusing-to-move-on.md): It works, so why change it? Because every workaround you've added to compensate for VLOOKUP's limits is technical debt in your spreadsheet - and it compounds. The cost isn't visible until somethi… - [Build a Drop-In XLOOKUP Upgrade for Every VLOOKUP in Your Workbook](https://bianca.codes/blog/build-a-drop-in-xlookup-upgrade-for-every-vlookup-in-your-workbook.md): Stop replacing VLOOKUPs. Your workbook deserves XLOOKUP without touching the formula. - [Dynamic arrays: FILTER, SORT, UNIQUE - what changed](https://bianca.codes/blog/dynamic-arrays-filter-sort-unique-what-changed.md): I spent years writing 400-character Ctrl+Shift+Enter arrays just to filter a table, but the calculation engine finally changed the rules and killed that misery for good. - [The state of email merge in 2026](https://bianca.codes/blog/the-state-of-email-merge-in-2026.md): It is 2026, and we are still stringing together premium Power Automate connectors just to avoid the Word mail merge wizard. ## Pages - [About](https://bianca.codes/about.md) - [CV](https://bianca.codes/cv.md) - [Blog index](https://bianca.codes/blog/)