User Defined Functions (UDFs) are, in my opinion, the biggest update to Power BI Desktop since PBIP.
That may sound dramatic, but if you care about DataOps, semantic model quality, and reusable development patterns, UDFs fundamentally change what is possible with DAX.
Reuse is one of the core principles of DataOps. For years we have been able to build reusable patterns in Power Query, PowerShell, Python, YAML, and infrastructure automation. But DAX was always missing a key capability: reusable logic that could live inside the semantic model itself.
Until now.
The Problem We’ve Had for Years
Testing semantic models has always been harder than it should be.
I’ve seen teams create entire ecosystems around testing:
- Separate DAX query libraries
- Python validation scripts
- YAML configuration for test orchestration
- PowerShell execution frameworks
- Custom CI/CD runners in Azure Pipelines and GitHub Actions
All of that just to validate whether a semantic model was behaving correctly.
The bigger problem was consistency.
Every team built testing differently. Every organization defined “quality” differently. Some teams had robust automation. Others had manual spot checks. Some validated measures. Others validated refreshes. Some validated nothing at all.
Testing maturity became subjective.
And because these tests lived outside the model, they constantly drifted from the thing they were actually validating.
Why UDFs Matter
UDFs finally give us a native way to build reusable testing patterns directly into the semantic model.
That changes everything.
Now we can:
- Standardize testing patterns
- Reuse assertions across models
- Keep tests versioned with the model
- Eliminate orchestration complexity
- Build portable testing libraries
- Make testing part of the semantic model itself
That is a massive leap forward for DataOps in Power BI.
When UDFs became available, my team immediately saw the opportunity.
We wanted a comprehensive testing framework that lived inside the model instead of around it.
That’s how PQL.Assert was born.
Introducing PQL.Assert
PQL.Assert is a reusable testing library for Power BI semantic models built using DAX User Defined Functions.
The goal was simple:
- Standardize semantic model testing
- Make assertions reusable
- Reduce pipeline complexity
- Encourage automated testing adoption
- Bring software engineering testing practices into BI
Instead of every team reinventing testing from scratch, PQL.Assert provides a common schema and reusable assertion framework directly within the model.
Since launching in February 2026, PQL.Assert has already surpassed 1,800 downloads, which tells me the Power BI community understands the value and has been waiting for something like this.
“But Why Would I Test?”
Because AI is accelerating semantic model development faster than ever.
Models are now being generated, modified, and optimized at a pace we simply have not seen before. Copilot experiences, Fabric workloads, agents, and automation are all increasing how quickly BI solutions are created.
But speed without validation is dangerous.
How do you know a generated measure is correct?
How do you know a schema change did not break downstream logic?
How do you prove a semantic model is trustworthy?
Testing.
Semantic Models Are the Foundation
Enterprise BI without testing practices cannot honestly claim that decisions are being made on a fully validated foundation.
Our reports rely on semantic models.
Our agents rely on semantic models.
Our Fabric implementations rely on semantic models.
Even AI experiences like Rayfin ultimately depend on trustworthy semantic models underneath the surface.
Everything stacks on top of that foundation.
Without testing and automated validation, organizations are effectively building analytical systems on assumptions instead of guarantees.
That becomes even more risky as AI-generated content increases.
Testing is no longer optional, it’s necessary.
Learn More
If you want to get started with semantic model testing using PQL.Assert, check out the setup documentation and examples below.