# Blog — bianca.codes

> contained chaos, creatively crafted.

- [Build a Five-Minute Audit of What Survived the Copilot Cull](https://bianca.codes/blog/build-an-audit-of-what-survived-the-copilot-cull.md): On 15 April 2026 the Copilot button vanished from Excel with no in-app notice. This is the dated six-row audit of which surfaces still answer you, which refuse, and which never could.
- [Copilot agents and Power Automate flows are starting to have the same job description](https://bianca.codes/blog/copilot-agents-and-flows-same-job-description.md): Agents and flows look like two product categories. They are one automation with a dial on it, and the only real question is how much judgment you hand over, and when.
- [A month of building flows: what Power Automate is actually for, and what it quietly isn't](https://bianca.codes/blog/what-power-automate-is-actually-for.md): Four weeks of approvals, retries, triggers and licensing traps. Every flow that worked did the same thing: it moved a decision, it never made one. The boundary, and how to test for it.
- [Pin a Power Automate flow to your Teams sidebar so it's never three clicks away](https://bianca.codes/blog/pin-power-automate-flow-teams-sidebar.md): You already know which flow you run every day. Three minutes of setup and it lives in your Teams sidebar instead of behind three clicks in a browser tab.
- [The advanced Excel skill that finally got me noticed, and the one nobody ever noticed at all](https://bianca.codes/blog/the-excel-skill-that-got-me-noticed-and-the-one-that-didnt.md): Two skills, the same effort to learn, wildly different payoff. Automation deletes its own evidence, which is why 'just tell them' never works, and what to do instead.
- [Power Automate from Scratch, Part 4: Premium connectors and licensing traps, where 'free' quietly stops being free](https://bianca.codes/blog/power-automate-from-scratch-part-4-premium-connectors-and-licensing-traps-where-free-quietly-stops-being-free.md): A flow that worked fine for ninety days is not a flow that is free. The tier belongs to the connector, the licence follows the owner, and the platform fails slowly on purpose.
- [Nobody reads your Copilot-generated deck any harder than they read your old one](https://bianca.codes/blog/copilot-generated-deck-hot-take.md): Making slides was tedious. Tedium was never the reason nobody read them. Generating the deck faster just means the nothing arrives sooner, in a better font.
- [Build a flow that flags premium connectors before they land on someone else's invoice](https://bianca.codes/blog/flag-premium-connectors-power-automate.md): The connectors already sitting in your flows might be one edit away from a Power Automate license bill nobody budgeted for.
- [A structured table reference isn't a range, it's a promise your formula makes about tomorrow's data](https://bianca.codes/blog/structured-table-reference-promise.md): Table1[Sales] looks like a notation change from A1:A847. It isn't. It's a different kind of reference, one that keeps its promise after next month's rows show up.
- [Who actually owns the flow you built two years ago that nobody's touched since](https://bianca.codes/blog/who-owns-the-flow-you-built-two-years-ago.md): The flow collected invoices, filed them, and ran a department for two years under one person's account. Then the account went away. A retrospective on ownership, or the lack of it.
- [Add a Compose action before anything complex: the cheapest debugging habit in Power Automate](https://bianca.codes/blog/add-a-compose-action-before-anything-complex.md): Your flow failed on step nine and the error is about a property that doesn't exist. A Compose action tells you what the value actually was, in about thirty seconds.
- [Being 'good at Word' isn't a skill anyone puts on a job description, until the day it's the only thing that saves a deadline](https://bianca.codes/blog/being-good-at-word-isnt-a-job-description-skill.md): Nobody interviews for it, nobody lists it, and then an 80-page tender falls apart on the Wednesday. The skill isn't invisible because people missed it, it's invisible because it has no name.
- [Power Automate from Scratch, Part 3: Error handling and retry policies, failing loudly vs failing silently for three weeks](https://bianca.codes/blog/power-automate-from-scratch-part-3-error-handling-and-retry-policies-failing-loudly-vs-failing-silently-for-three-weeks.md): A flow that fails loudly is doing its job. The mechanism behind Configure run after, what a retry policy actually retries, and why bolting on error handling can make a real failure invisible.
- [Your PowerPoint template isn't a template if everyone still manually fixes the fonts](https://bianca.codes/blog/powerpoint-template-isnt-a-template.md): A deck people copy and correct isn't a template, it's a starting position everyone quietly diverges from. Here's what a real one does instead.
- [Build a PowerPoint deck with Slide Master layouts that survive a full rebrand in ten minutes](https://bianca.codes/blog/powerpoint-slide-master-rebrand.md): Put the brand in three places - theme colours, theme fonts, and the logo on the master - and a full rebrand becomes three edits instead of fifty.
- [Copilot in Outlook: turning a forty-email thread into the three lines that matter](https://bianca.codes/blog/copilot-in-outlook-thread-summary.md): A forty-email thread compresses to four lines once you know what Copilot's thread summary actually does, and doesn't do.
- [The PowerPoint features I use in every deck, and the ones I've never once needed](https://bianca.codes/blog/powerpoint-features-i-use-in-every-deck.md): Twenty decks, five features doing the real work, and four with a permanent ribbon seat I never once needed. An honest audit, not a hidden-features round-up.
- [The 'when an item is modified' trigger has a setting that stops it firing twice](https://bianca.codes/blog/stop-the-modified-trigger-firing-twice.md): One setting on the trigger stops a flow from running twice every time someone edits a SharePoint item.
- [The pressure to look competent with Copilot when you're still figuring it out live](https://bianca.codes/blog/the-pressure-to-look-competent-with-copilot.md): Six people watching your cursor, a tool you've barely opened, and a room that assumes you've already mastered it. The pressure to look fluent with Copilot is manufactured - here's what to do instead.
- [Power Automate from Scratch, Part 2: Approvals and escalation, building flows people actually respond to](https://bianca.codes/blog/power-automate-from-scratch-part-2-approvals-and-escalation-building-flows-people-actually-respond-to.md): The mechanics behind a Power Automate approval that actually reminds and escalates: why the reminder branch has to start before the approval, and how Configure run after decides what happens next.
- [Most 'Copilot doesn't work' complaints are a prompting problem wearing a product complaint's clothes](https://bianca.codes/blog/copilot-doesnt-work-is-usually-a-prompting-problem.md): A four-word prompt and a disappointed face is not a product review. Where vague requests actually break, and how to tell a real Copilot failure from a thin question.
- [Build an approval flow with a reminder and a 48-hour escalation](https://bianca.codes/blog/build-an-approval-flow-with-a-reminder-and-a-48-hour-escalation.md): An approval that chases itself: one reminder at 24 hours, then a handover to a backup approver at 48. Built on standard connectors and two settings almost nobody switches on.
- [Styles aren't formatting, they're the document talking to itself](https://bianca.codes/blog/styles-arent-formatting-theyre-the-document-talking-to-itself.md): You already know how to make a line bold and blue, which is exactly why the sixty-page document that needs a table of contents by five o'clock is a problem.
- [Copilot didn't arrive as a feature, it arrived as an expectation](https://bianca.codes/blog/copilot-arrived-as-an-expectation.md): Copilot didn't spread through the office the normal way, it arrived pre-loaded with an expectation that you already knew how to use it.
- [Clone a flow instead of rebuilding it: Save As is the shortcut everyone skips](https://bianca.codes/blog/clone-a-flow-instead-of-rebuilding-it.md): Save As duplicates a flow, trigger, actions and conditions in one move, turning a rebuild into a two-minute edit.
- [The keyboard shortcut that made people think I was better at my job than I actually was](https://bianca.codes/blog/the-keyboard-shortcut-that-made-people-think-i-was-better-at-my-job.md): One keyboard shortcut convinced people I was better at my job than I was. That's a real career lever, and a trap: fluency with a tool gets mistaken for judgment about what it actually shows.
- [Power Automate from Scratch, Part 1: Triggers and connectors, the mental model nobody explains](https://bianca.codes/blog/power-automate-from-scratch-part-1-triggers-and-connectors-the-mental-model-nobody-explains.md): The connector, not the trigger, is what actually decides whether a Power Automate flow costs anything, and it's rarely explained before someone gets a surprise bill.
- [Your Power Automate flow is a single point of failure, and you've never tested what happens when it isn't there](https://bianca.codes/blog/your-power-automate-flow-is-a-single-point-of-failure.md): No owner, no failure alert, no manual fallback: your reliable flow is one departure or one silent failure away from becoming everyone else's problem.
- [Build a self-filtering Excel dashboard with FILTER, SORT, and structured table references, no PivotTable required](https://bianca.codes/blog/build-a-self-filtering-excel-dashboard-no-pivottable-required.md): No refresh button, no PivotTable, just a dropdown and a formula that already knows your table changed.
- [Triggers aren't events, they're a question your flow keeps asking](https://bianca.codes/blog/triggers-arent-events-theyre-a-question-your-flow-keeps-asking.md): Most Power Automate flows get debugged wrong because triggers aren't events, they're either a standing question your flow keeps asking, or a subscription waiting to be told.
- [What your manager knows vs what your manager can observe](https://bianca.codes/blog/what-your-manager-knows-vs-what-your-manager-can-observe.md): Two default-on Microsoft features shipped in June to help someone else watch how you work, not help you get more of it done. The difference between them matters.
- [Turn any Power Automate flow into a button you can run from your phone](https://bianca.codes/blog/turn-any-power-automate-flow-into-a-button-you-can-run-from-your-phone.md): Add a manual trigger to any flow, then run it from the Power Automate mobile app or a one-tap home screen widget - no event required.
- [Asking for the promotion when you've already been doing the job](https://bianca.codes/blog/asking-for-the-promotion-when-youve-already-been-doing-the-job.md): You've been operating a level up for a year, waiting to be noticed. Promotions run on evidence assembled before the case is made, not effort noticed during it.
- [Power Query from Scratch, Part 5: Parameters, functions and a model that refreshes itself](https://bianca.codes/blog/power-query-from-scratch-part-5-parameters-functions-and-a-model-that-refreshes-itself.md): A hardcoded folder path and a copy-pasted business rule are the same problem, and parameters plus functions are how you stop editing M code every month.
- [If your documentation lives in Word, it's already out of date](https://bianca.codes/blog/if-your-documentation-lives-in-word-its-already-out-of-date.md): Your process changed three times since someone saved Process_FINAL.docx. The doc looks exactly as authoritative as the day it was right.
- [Build a star schema from a single flat file](https://bianca.codes/blog/build-a-star-schema-from-a-single-flat-file.md): One wide CSV, thousands of repeated names. By the end you have a fact table, two dimension tables, and a model Power BI actually wants.
- [VAR: the DAX keyword that makes your measures readable](https://bianca.codes/blog/var-the-dax-keyword-that-makes-your-measures-readable.md): A DAX measure that repeats the same subtotal three times isn't thorough, it's a maintenance problem VAR was built to fix.
- [A week of actually using Copilot: what a beginner discovers (and what trips them up)](https://bianca.codes/blog/a-week-of-actually-using-copilot.md): Seven days actually driving Copilot across Excel, Word and PowerPoint - the wins, the confidently wrong deck, and the habit that mattered more than any prompt.
- [Format painter: copy a Power BI visual's formatting in one click](https://bianca.codes/blog/format-painter-copy-a-power-bi-visuals-formatting-in-one-click.md): Power BI's format painter copies fonts, colours and borders across visuals in one click, except for one axis setting that quietly breaks chart comparisons.
- [Saying no without sounding like you can't do it](https://bianca.codes/blog/saying-no-without-sounding-like-you-cant-do-it.md): The ask is legitimate, the person is reasonable, and the honest answer is no - here's how to say it without it sounding like you can't cope.
- [Power Query from Scratch, Part 4: Custom columns and your first look at M](https://bianca.codes/blog/power-query-from-scratch-part-4-custom-columns-and-your-first-look-at-m.md): Three parts of buttons, then a request that needs an 'and' the Conditional Column dialog doesn't have - time to type your first line of M.
- [Most Power BI dashboards are just decorated spreadsheets](https://bianca.codes/blog/most-power-bi-dashboards-are-just-decorated-spreadsheets.md): Three slicers and a card don't turn a spreadsheet into a data model, and the columns you didn't build are exactly where it falls apart.
- [Build a mail-merge report in Word straight from an Excel table](https://bianca.codes/blog/build-a-mail-merge-report-in-word-straight-from-an-excel-table.md): One clean Excel table and a Word template are all it takes for forty personalised reports, once the wizard is driven properly.
- [Copilot in Excel: the moment it clicks for a beginner](https://bianca.codes/blog/copilot-in-excel-the-moment-it-clicks-for-a-beginner.md): The first time a plain-English request turns into a real, inspectable Excel formula, the tool stops feeling abstract - and the habit that keeps it honest.
- [The dashboard I built that nobody opened](https://bianca.codes/blog/the-dashboard-i-built-that-nobody-opened.md): Three months of polish, a great demo, and a usage metrics report that told a very different story once the meeting was over.
- [One Copilot prompt that summarises a 20-tab workbook](https://bianca.codes/blog/one-copilot-prompt-that-summarises-a-20-tab-workbook.md): The one Copilot prompt that turns twenty unlabelled tabs into a sheet-by-sheet summary, outliers included, in under a minute.
- [The scope creep that arrives dressed as a quick favour](https://bianca.codes/blog/the-scope-creep-that-arrives-dressed-as-a-quick-favour.md): Every 'while you're in there, could you just...' is small enough to say yes to and invisible enough to never get credit for.
- [Power Query from Scratch, Part 3: The transforms that actually matter](https://bianca.codes/blog/power-query-from-scratch-part-3-the-transforms-that-actually-matter.md): Unpivot, split column and group by all look foolproof, right up until the source file adds a column or a name gets typed slightly differently than expected.
- [Nobody reads your 40-slide deck - and that's on you](https://bianca.codes/blog/40-slide-deck-hot-take.md): A deck that needs 40 slides to make one point didn't run out of room. It ran out of edits.
- [Build a dynamic dashboard with XLOOKUP and one drop-down](https://bianca.codes/blog/build-dynamic-dashboard-xlookup-dropdown.md): One drop-down cell, four XLOOKUP formulas, and every number on the dashboard updates itself - no PivotTable, no slicer, no VBA in sight.
- [The Power Automate trigger that ends manual file shuffling](https://bianca.codes/blog/the-power-automate-trigger-that-ends-manual-file-shuffling.md): One Outlook trigger, configured once, means invoices and attachments file themselves before you've even opened the email.
- [Learn Python, or learn to drive Copilot? A beginner's honest fork in the road](https://bianca.codes/blog/learn-python-or-learn-to-drive-copilot-a-beginners-honest-fork-in-the-road.md): Two tabs open, four spare hours a week, and everyone insisting the other tab is a waste of your time - here's the no-hype version of the beginner's fork.
- [Align any set of objects in PowerPoint in two clicks](https://bianca.codes/blog/align-objects-powerpoint-two-clicks.md): One win: stop nudging boxes with the arrow keys. Select, Align, done - PowerPoint's Arrange menu lines up and evenly spaces any set of objects in two clicks.
- [Explaining technical work to people who don't care how it works](https://bianca.codes/blog/explaining-technical-work-to-people-who-dont-care-how-it-works.md): You explained the fix perfectly and the room still glazed over. The problem was never your explanation.
- [Power Query from Scratch, Part 2: Importing and combining without the copy-paste](https://bianca.codes/blog/power-query-from-scratch-part-2-importing-and-combining-without-the-copy-paste.md): Files, folders, and multiple sheets go in three different ways, and the append-versus-merge decision is where most people guess wrong.
- [Stop reading Copilot hot takes and just open the thing](https://bianca.codes/blog/copilot-hot-take.md): Most Copilot opinions come from people who've never clicked into it. Open the thing for an afternoon and form one that's actually yours.
- [Build a self-updating summary slide in PowerPoint linked to Excel](https://bianca.codes/blog/self-updating-powerpoint-summary-slide.md): Paste Link turns three Excel cells into a PowerPoint object that updates itself, once you stop letting the linked range look like a spreadsheet.
- [LAMBDA: the day Excel let you write your own functions](https://bianca.codes/blog/lambda-the-day-excel-let-you-write-your-own-functions.md): Copy-pasting the same formula across a workbook used to be the only way to reuse logic - until LAMBDA let you name it and call it like any other Excel function.
- [When did the spreadsheet quietly become a database - and why that's a problem](https://bianca.codes/blog/when-did-the-spreadsheet-quietly-become-a-database-and-why-thats-a-problem.md): Nobody decided to build a database out of that 80-tab workbook - it ended up doing a database's job without any of a database's guarantees.
- [The F4 trick that locks cell references in one keystroke](https://bianca.codes/blog/f4-absolute-references-click-bait.md): Stop typing dollar signs by hand - one keystroke cycles through every Excel cell reference mode instantly.
- [When your work is invisible because it 'just works'](https://bianca.codes/blog/when-your-work-is-invisible-because-it-just-works.md): The automation that saves your team four hours a week - and the manager who has no idea it exists. Why reliable work disappears, and two things that actually fix it.
- [Power Query from Scratch, Part 1: The mental model nobody teaches you](https://bianca.codes/blog/power-query-from-scratch-part-1-the-mental-model-nobody-teaches-you.md): Most people learn Power Query by clicking through wizards. Nobody explains what it's actually doing - and that gap is why queries break in confusing ways.
- [Your nested IF statements are technical debt](https://bianca.codes/blog/nested-if-statements-are-technical-debt.md): A formula with six nested IFs works fine, right up until the rule changes and you're reverse-engineering a 300-character one-liner you wrote six months ago.
- [Build a Monthly Report Card in a Single Python in Excel Cell](https://bianca.codes/blog/build-monthly-report-card-python-in-excel.md): Python in Excel can't write a file, but it can turn a transaction table into a chart that lives in the workbook and never goes stale - in one =PY() cell.
- [Python in Excel: When a Cell Stops Being a Number and Becomes a DataFrame](https://bianca.codes/blog/python-in-excel-cell-becomes-a-dataframe.md): For forty years an Excel cell could hold one of four things, and Python in Excel quietly added a fifth: a whole pandas DataFrame, living inside a single cell.
- [The Hardest Part of Working With Messy Data Isn't the Cleaning - It's Knowing When to Stop](https://bianca.codes/blog/knowing-when-to-stop-cleaning-data.md): The mechanics of cleaning data are the straightforward part. The hard part has no function and no checklist: deciding which imperfections actually matter, and stopping there.
- [3-Minute Win: Add a 'Last Refreshed' Timestamp to Any Power BI Report in 2 Minutes](https://bianca.codes/blog/last-refreshed-timestamp-power-bi.md): The stakeholder emails asking whether the numbers are current stop the day you put the actual refresh time on the report - and a measure with NOW() is not how you do it.
- [The Promotion Conversation Nobody Prepared You For](https://bianca.codes/blog/the-promotion-conversation-nobody-prepared-you-for.md): "You're on our radar" is not a plan - promotion is an allocation decision, not a reward for good work, and you have to run the conversation accordingly.
- [Star Schema Done Right, Part 4: Migrating a Flat Table to a Star Schema in Power BI](https://bianca.codes/blog/star-schema-done-right-part-4-migrating-a-flat-table-to-a-star-schema.md): Power Query carves one flat sales table into a fact and three dimensions, you build the relationships, and you prove the numbers didn't move - a restructure you can't validate is just hope.
- [If You've Copied the Same Power Query Steps Across Three Queries, You've Made a Mistake](https://bianca.codes/blog/power-query-duplicate-steps-mistake.md): Copying a query and tweaking the copy feels efficient. It isn't - three copies of the same logic is three places to update and three ways for it to drift.
- [Build a Reusable Power Query Function That Cleans Any Text Column to Title Case](https://bianca.codes/blog/reusable-power-query-function-title-case.md): The same trim-and-title-case steps are copy-pasted across three of your queries - write them once as a function instead, and fix the rule in one place.
- [Power Query Custom Functions: Write Once, Call From Any Query in Your Workbook](https://bianca.codes/blog/power-query-custom-functions.md): You've built the same cleanup steps in four different queries. A custom function is how you write them once and call them from all four.
- [What Data Analysts and Software Engineers Can Learn From Each Other (That Neither Group Admits)](https://bianca.codes/blog/what-data-analysts-and-software-engineers-can-learn-from-each-other.md): The tools analysts and engineers use merged years ago, but their habits never did - and each side is still losing to a problem the other already solved.
- [3-Minute Win: Create a Power Query Parameter to Switch Between Dev and Prod Data Sources](https://bianca.codes/blog/power-query-parameter-switch-dev-prod.md): A query parameter holds your data source path, so switching from a test CSV to the production SharePoint file is one dropdown, not a find-and-replace through your M code.
- [When Mentoring Junior Colleagues Starts to Feel Like Extra Work](https://bianca.codes/blog/when-mentoring-junior-colleagues-feels-like-extra-work.md): You became the person everyone sends the quick question to, and somewhere in there the helping started eating the work that's actually on your review.
- [Star Schema Done Right, Part 3: Slowly Changing Dimensions - The Bit Nobody Explains](https://bianca.codes/blog/star-schema-done-right-part-3-slowly-changing-dimensions.md): A customer moves and changes tier, and some reports should show where they are now while others must show where they were at the sale - the gap is a modelling decision most tutorials skip.
- [Pivot Tables Are Still Great - But GROUPBY Is What You Should Be Using for New Work](https://bianca.codes/blog/pivot-tables-still-great-use-groupby-for-new-work.md): Pivot tables aren't obsolete, but reaching for one by reflex on every new analysis is a quiet tax GROUPBY does not charge.
- [Build a Self-Updating Sales Summary Using GROUPBY - From Raw Transaction Data](https://bianca.codes/blog/build-self-updating-sales-summary-groupby.md): A raw transaction table becomes a monthly sales summary by category with one GROUPBY formula - no PivotTable, no Refresh, and it updates the moment you add a row.
- [GROUPBY: Excel's Answer to Pandas groupby - Without a Pivot Table in Sight](https://bianca.codes/blog/groupby-excel-answer-to-pandas-groupby.md): A pivot table is a tool you operate. GROUPBY is the same group-and-aggregate logic as a single spilled formula - the summary recalculates itself, with no fields to drag and nothing to refresh.
- [The Part of Data Modelling Everyone Skips (That Breaks Everything Later)](https://bianca.codes/blog/the-part-of-data-modelling-everyone-skips.md): Your measure is right, your data reconciles, and your year-to-date is still wrong - because the model never had a real date table, only a date column pretending to be one.
- [3-Minute Win: Replace Your Most-Used Pivot Table With a Single GROUPBY Formula](https://bianca.codes/blog/replace-pivot-table-with-groupby.md): A pivot table is a snapshot that needs refreshing. GROUPBY is a formula that recalculates itself. Swapping one for the other takes about 90 seconds and removes a recurring chore.
- [How to Get the Feedback You're Actually Not Getting](https://bianca.codes/blog/how-to-get-the-feedback-youre-not-getting.md): Most feedback at work is too vague, and "keep doing what you're doing" tells you nothing. Useful feedback has to be extracted - with good questions, timing, and people who are actually honest.
- [Star Schema Done Right, Part 2: Dimension Tables and Why Cardinality Matters](https://bianca.codes/blog/star-schema-part-2-dimension-tables-cardinality.md): A dimension table isn't just a lookup. Why fact-to-dimension relationships have to be many-to-one, why bidirectional filtering always causes problems, and how to build dimensions your DAX can trust.
- [Stop Treating SharePoint as a Database - It Will Eventually Bite You](https://bianca.codes/blog/stop-treating-sharepoint-as-a-database.md): SharePoint Lists are brilliant for what they're designed for and actively dangerous past that scope - and the limits bite when your solution has been accumulating data that matters.
- [Build a SharePoint List-Connected Power BI Report (And Handle the 5,000-Row Problem)](https://bianca.codes/blog/sharepoint-list-power-bi-report-5000-row-problem.md): Connect Power BI to a SharePoint List the way that doesn't fall over at 5,001 rows - OData filtering at the source, an indexed filter column, and a refresh schedule that doesn't need a gateway.
- [REDUCE: How to Build Running Calculations Across Any Dimension in Excel](https://bianca.codes/blog/reduce-running-calculations-across-any-dimension-excel.md): REDUCE is the most powerful of the functional array functions and the most overlooked. The lambda which means you can accumulate strings, and replace calculations that used to need VBA.
- [Why Most Data Career Advice Is Written for People Who Don't Need It](https://bianca.codes/blog/why-most-data-career-advice-is-for-people-who-dont-need-it.md): Learn SQL, build a portfolio, contribute to open source. The canonical data career advice is optimised for getting your first job, and useless immediately after.
- [3-Minute Win: Use REDUCE to Concatenate a Column of Values Into One Cell](https://bianca.codes/blog/reduce-concatenate-column-into-one-cell.md): Joining a column of names or tags into one comma-separated string used to need TEXTJOIN or a helper column. REDUCE does it in one formula, and lets you transform each item before it gets concatenated.
- [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.
- [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.
- [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.
