"After the table is loaded or refreshed, the results for calculated tables and calculated columns are locked in and cannot be changed until the table is refreshed. The results are precomputed and aren’t dynamically determined. Most often, calculated tables are relatively easy to understand, precisely because you can inspect the DAX statement and predict the results. The same statement always returns the same result for the same parameters until the table is refreshed." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Another issue is that it’s extremely difficult in DAX to reliably and definitively refer to a value from an earlier (or later) row. These relative or absolute shifts from the current evaluation position are possible but surprisingly hard to do. After all, you’re looking at a visual on your screen that shows data in a certain order, so it makes sense that you think that it should be easy to refer to an earlier (or later) row. However, if you try to do so, you’ll soon discover DAX doesn’t work that way. This is because DAX statements are evaluated in the model, which does not sort the data in the same way as the data is sorted in your visual. For all you know, that row that was at the top of your visual, is somewhere in the middle of the data when the DAX is evaluated, so the whole idea of referring to an earlier or later row is meaningless." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Calculated columns are most often used to perform row-by-row calculations within a table - for example, to obtain the difference between two columns for each row. Calculated columns are static, meaning they’re calculated when the table is first loaded or refreshed, and their results cannot be changed until the table is refreshed again." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Calculation groups can help reduce the number of redundant measures using the same filter expression. Calculation groups provide a way to change the type of calculation without adding another measure to the model. In this way, you can avoid adding more measures and duplicating logic in multiple measures." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"[....] context transition happens in calculated columns, where a row context is present, and whenever you’re using a function that iterates over multiple values, such as SUMX. This last group of functions are conveniently called iterators." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Data may indeed be the new oil. But just like crude oil, data needs refining. It must be transformed into information. This is why we clean, combine, model, and visualize data. The output of all this work - whether you do it on your own, get some help, or use a (semi-)automatic process - includes reports and dashboards that provide insights into various aspects of the organization’s dealings, which decision-makers can then consume to make critical business decisions." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"DAX does not have any data connectors or ways to reach out to anything outside of Power BI to collect data. Therefore, all data must be connected to the semantic model first. After this has been done, you can use calculated tables to enrich your semantic model and apply calculations. Calculated tables let you add new tables based on data you loaded into the model. Instead of querying and loading values into your new table’s columns from a data source, you create a DAX formula to define the table’s values." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Measures Unlike calculated columns and calculated tables, measures aren’t precalculated or static. Their output is dynamically calculated as needed and is determined not only by their definition but also by the filter context in which they’re executed. The same definition can have a different meaning based on the filter context. Measures are evaluated within that filter context and often summarize multiple rows."(Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Row context can transform into filter context through a mechanism called context transition. Context transition takes any active row context and transforms it into a filter in the filter context. Multiple functions do this automatically." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Using CALCULATE can feel like riding a wild bull. You ride it, but you never feel fully in control." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Visual calculations are calculated in the context of the visual matrix. All model objects that are in the visual matrix can be used in a visual calculation. These can consist of columns from various tables, but also explicit measures saved in the model or implicit measures that are part of the visual." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Visual calculations are DAX calculations executed in the scope of a visual. They are by default executed on a row-by-row basis, much like a calculated column, but are calculated on the fly, like a measure. In contrast to both calculated columns and measures, visual calculations aren’t part of the semantic model in Power BI but instead are part of a visual, such as a chart. This means visual calculations don’t have to worry about filter context as much as measures need to do. In fact, the filter context is seen as external to the visual calculation on a visual. This doesn’t mean the visual calculation isn’t affected by or would ignore the filter context but rather that it’s applied on a different level. The filter context dictates what the measures and fields on the visual return, and the visual calculation takes those values as input for its evaluation. In other words, a visual calculation is only indirectly affected by filter context, not directly, the way a measure or field reference is." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"Visual calculations share behaviors with calculated columns and measures but also have important differences, particularly in how they can be used, where they are stored, and when they are computed. " (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"What makes DAX hard has little to do with the functions themselves. The problem is also not its syntax - although DAX is a functional language, which means it uses an “inside-out” syntax instead of the more commonly used “top-to-bottom” syntax that is most used in programming. This requires some rethinking, particularly if you are coming from a procedural programming background or if, for example, you have written macros in Excel. To read and understand a DAX statement, you must find the innermost piece, parse it, then go to the next layer, which takes the innermost piece as a parameter, and work your way outward [...]" (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
"While it might be tempting to think about row context as a special filter on your table, we recommend not doing that. The row context is not a type of filter; it simply indicates to DAX which row is currently responsible for providing the values to perform the calculation and where the result of the calculation should go. Whether a column in the table is used in a particular calculation is irrelevant; all columns of the table are part of the row context when a calculation is performed." (Jeroen ter Heerdt et al, "Microsoft Power BI Visual Calculations: Simplifying DAX", 2026)
