This summary is produced by the author, and not by AI.
Naming conventions for your semantic model should be a high priority for any developer. It’s incredibly important not just to ensure your model is organized and professional for developers and users, but also when using AI agents to query or manage it. Without clear naming conventions, people and agents waste time and are more likely to make mistakes.
In this article, we provide some guidelines and best practices for setting some naming conventions in your semantic model.
Naming conventions differ by team, department, region, and organization. What’s most important is that you know your users and your business, and you choose naming conventions that most align with what they use and expect. Avoid assumptions and talk to your users!
The most important aspect to consider of how you name columns and measures in your model is whether you use the same terminology as people in your business. How do people refer to sales: Turnover? Revenue? Sales? Gross Sales? Or something else? This is especially important in large organizations with multiple regions and departments, particularly those that have resulted from merging multiple legal entities in the past. Often, teams and regions develop their own semantics and even their own master data or calculations for key metrics. Obviously, this isn’t ideal… but the reality is that it’s just extremely common. A semantic model should provide an authoritative source of truth when it comes to terminology; strive as much as possible to use the most common and representative names for calculations, columns, and tables that best describe the semantic business entity that they represent. This will vary model-by-model and organization-by-organization; never generalize or assume, especially if you’re an external consultant, a new employee, or using an agent to name these objects.
If your organization has challenges with business semantics and calculation logic, then you should try to discuss this point with key stakeholders as you define your model design. Try to reach consensus on this terminology, and definitely reach consensus on master data and calculations. If users view this as pedantic, remind them that having this consensus helps to mitigate wasted time on data discrepancies and helps the organization make better use of AI.
Also, you should consider setting this up in a Fabric ontology item, where you can set up a richer collection of semantics and the relationships between them for your business data.
In addition, you want to follow some general guidelines with naming conventions:
In short, good naming conventions are representative of the business reality and consistent; consistency is the key. Whatever conventions you use, apply them throughout your model, and ideally across all models in your organization. Again, is this an exciting topic? No. Is it going to cost you a lot of time and pain if you neglect it, though? For sure.
Irrespective of whatever naming conventions you use, it’ll still be normal and expected that people refer to columns and calculations using other terminology. This is inevitable, especially in writing, where abbreviations and acronyms are more common.
To deal with this, you have to set synonyms in your semantic model by using Prepare your data for AI. Consider only listing real synonyms that people in your organization use, or that are colloquially used in your region. You can also consider multilingual synonyms (translations of the field) depending on the users and the language they use with AI and agents.
Synonyms only work with AI and agents; if you want to expose synonyms for users, you have to use descriptions. We write about descriptions in another, follow-up article.
Again, it might be valuable to consider setting up these semantics in a Fabric ontology item.
Synonyms are primarily beneficial when you interrogate your data using natural language with AI and agents, but they’re also a way to keep your model more organized.
Naming conventions help organize your model, making it easier to use. In Power BI, there are multiple other ways to “organize” your semantic model, including:
It’s worthwhile to ensure that you regularly organize your model as you develop it, and that you decide on conventions for these elements as well.
Sometimes you can have a table, measure, or column that serves multiple purposes. For instance, you can have a measure Targets that serves different measures depending on the selection of a disconnected table:
Targets :=
SWITCH ( SELECTEDVALUE ( 'Targets'[MeasureName] ),
"1YP", [Sales 1YP],
"2YP", [Sales 2YP],
"Budget", [Budget],
"FCST", [Forecast],
BLANK()
)
This is a very common pattern, and its purpose is to provide flexibility in reports for users to choose which metric should be shown in visuals. If a user selects “1YP” it shows the Sales 1YP measure. If they select “Budget”, then it shows Budget. It is also the basis of many visualization “tricks” in reports, such as using DAX measures as categories, so you can show one bar per measure in a bar chart, waterfall, or column chart.
However, it’s problematic when it comes to naming conventions, particularly if this measure should be used by an agent to query the model or make changes. Consider the following:
Targets YTD :=
CALCULATE(
[Targets],
DATESYTD ( 'Date'[Date] )
)
This pattern is advantageous because you have fewer measures in the model. Instead of four YTD measures, you have just one for Targets. If a user asks for the Budget YTD from Copilot or a data agent, it might opt for the Targets YTD without applying the filter, though, which would result in Blank(). You could also use a calculation group, but it has the same problem.
In this situation, it’s most likely that Copilot or an agent won’t find the measure, and will calculate the Budget YTD in-line of a DAX query, which could be problematic. The issue here, however, isn’t the naming conventions or the model design, per se. Rather, it’s the lack of instructions about what Targets means and how to use it. This can be fixed with a simple instruction, which could benefit both human users and AI agents:
Lets you select which target to apply. To use this measure, you need to filter 'Targets'[MeasureName] to a single value in a slicer or filter expression to return the measure. If you filter to "1YP", you get the value of Sales 1YP. If you filter to "2YP", then you'll get Sales 2YP, and so on.
A description like this fixes the problem. We’ll discuss descriptions further in our next article. However, debatably, if you intend on this model being consumed primarily by an agent, then this report-centric design might not be ideal over just having more measures… but that’s a different discussion altogether.
Naming conventions, descriptions, and model organization are all part of your model design. Ensure that when you design your model, you carefully plan that design around how people will consume it. If you’re introducing new avenues of consumption, you may want to revisit your model’s design to ensure that it works best.
Improving your naming conventions used to take a lot of manual, tedious effort. However, it’s something you can offload to AI with relatively low risk… the exception is that if you already have downstream reports connected to the model, then you have to rebind those visuals to use the newly renamed fields. You can do this either by having the agent directly work with TMDL metadata, or by using an MCP server.
This can even be an automated process that you run as part of your continuous integration (CI), so that whenever you commit model metadata to a remote Git repository, a coding agent will audit and fix any naming convention issues. The video below shows a Claude Code Desktop agent invoking the standardize-naming-conventions skill from Kurt's power-bi-agentic-development repo to change the names of a badly named semantic model so they follow a consistent naming convention with sensible folder grouping.
Naming conventions are very important for both users and AI/agents. The highest effort is ensuring alignment on the business, but if you have that, you can easily ensure these conventions are followed using modern coding agents.
Take your semantic models further with Tabular Editor.
Give Tabular Editor a spin