Problem
In the December 2023 Microsoft Power BI Desktop release, more than 50 new INFO DAX functions were added. They all start with “INFO.” and return the same result as corresponding data management views (DMVs) that were available before only using a SQL-like syntax. With these new DAX functions, you can use the recently added DAX query to get metadata about your semantic model. However, there is a limitation: all the INFO functions cannot be used in calculated tables and calculated columns.
Thankfully, in the Power BI October 2024 update, four of these functions are also available as INFO.VIEW DAX functions as below:

Not only can these four INFO.VIEW DAX functions still be run in DAX query view (and IntelliSense is provided by default), but they can also be used in calculated tables of the semantic model, and show the name or value of a column only previously displaying an ID. The huge benefit of being added to calculated tables is that you can make your model “self-document” itself to automatically stay current with all your latest changes.
Solution
In this tip, we will demonstrate the basic functionality of the four INFO.VIEW DAX functions: INFO.VIEW.COLUMNS(), INFO.VIEW.TABLES(), INFO.VIEW.RELATIONSHIPS(), and INFO.VIEW.MEASURES(). We will describe the syntax and the various usages with a sample dataset. Along the way, we will provide examples of how to use these INFO.VIEW DAX functions to auto document semantic model.
We will use the Microsoft Power BI sample Corporate Spend as the dataset. You can download the Power BI workbook here: INFO.VIEWSample.zip.
The Basics of INFO.VIEW DAX Functions
The four INFO.VIEW DAX functions will return lists of information about your current model, including the column, tables, measures, and relationships. The information is especially helpful for other team members to understand the semantic model and build or modify reports based on the model.
INFO.VIEW.COLUMNS()
INFO.VIEW.COLUMNS() DAX function shows information about all the columns in the current model, including ID, name, data category, data type, etc.
Syntax
INFO.VIEW.COLUMNS()
This expression has no parameters.
Return Values
Field | Type |
---|---|
ID | Integer |
Name | String |
Table | String |
DataType | String |
DataCategory | String |
Description | String |
IsHidden | Boolean |
IsUnique | Boolean |
IsKey | Boolean |
IsNullable | Boolean |
Alignment | String |
SummarizeBy | String |
ColumnStorage | String |
Type | String |
SourceColumn | String |
Expression | String |
FormatString | String |
IsAvailableInMDX | Boolean |
SortByColumn | String |
GroupingBehavior | String |
SourceProviderType | String |
DisplayFolder | String |
AlternateOf | String |
LineageTag | String |
Source: https://dax.guide/info-view-columns/
You can use DAX Query View to run the DAX.
EVALUATE
INFO.VIEW.COLUMNS()

Part of the result will be shown like this:

INFO.VIEW.TABLES()
INFO.VIEW.TABLES() DAX function returns a list of all the tables in the current model, including ID, name, data category, storage mode, etc. You can quickly identify tables marked as a date table by the Data Category of Time.
Syntax
INFO.VIEW.TABLES()
This expression has no parameters.
Return Values
Field | Type |
---|---|
ID | Integer |
Name | String |
Model | String |
DataCategory | String |
Description | String |
IsHidden | Boolean |
StorageMode | String |
TableStorage | String |
Expression | String |
ShowAsVariationOnly | Boolean |
IsPrivate | Boolean |
CalculationGroupPrecedence | Integer |
LineageTag | String |
Source: https://dax.guide/info-view-tables/
You can use DAX Query View to run the DAX command.
EVALUATE
INFO.VIEW.TABLES()

Part of the result will be shown like this:

INFO.VIEW.RELATIONSHIPS()
INFO.VIEW. RELATIONSHIPS() DAX function returns a list of all relationships in the current model, including ID, name, data type, state, and a [Relationship] column describing direction and cardinality.
Syntax
INFO.VIEW.RELATIONSHIPS()
This expression has no parameters.
Return Values
Field | Type |
---|---|
ID | Integer |
Name | String |
Relationship | String |
Model | String |
IsActive | Boolean |
CrossFilteringBehavior | String |
RelyOnReferentialIntegrity | Boolean |
FromTable | String |
FromColumn | String |
FromCardinality | String |
ToTable | String |
ToColumn | String |
ToCardinality | String |
State | String |
SecurityFilteringBehavior | String |
Source: https://dax.guide/info-view-relationships/
You can use DAX Query View to run the DAX command.
EVALUATE
INFO.VIEW.RELATIONSHIPS()

Part of the result is shown as below:

INFO.VIEW.MEASURES()
INFO.VIEW.MEASURES() DAX function returns a list of all measures in the current model, including ID, name, expression, if it’s in a valid or error state, etc.
Syntax
INFO.VIEW.MEASURES()
This expression has no parameters.
Return Values
Field | Type |
---|---|
ID | Integer |
Name | String |
Table | String |
Description | String |
DataType | String |
Expression | String |
FormatString | String |
IsHidden | Boolean |
State | String |
KPIID | Integer |
IsSimpleMeasure | Boolean |
DisplayFolder | String |
DetailRowsDefinition | String |
DataCategory | String |
FormatStringDefinition | String |
LineageTag | String |
Source: https://dax.guide/info-view-measures/
You can use DAX Query View to run the DAX command.
EVALUATE
INFO.VIEW.MEASURES()

Part of the result will be shown like this:

Use INFO.VIEW DAX Functions to Auto Document Semantic Model
As we stated before, the four INFO.VIEW DAX functions (INFO.VIEW.COLUMNS, INFO.VIEW.TABLES, INFO.VIEW.RELATIONSHIPS, and INFO.VIEW.MEASURES) removed the limitation that existed in the INFO functions and can be used in measures, calculated columns, and calculated tables.
They are ideal for documentation purposes. For instance, we can use these four INFO.VIEW DAX functions in calculated tables to clearly demonstrate the metadata (the column and table name), the relationship between tables (one-to-one or one-to-many), and how data flows between the tables. We can also show the measure info like the expression (formula) and whether they are valid or hidden. All this information will make the model easier to understand so developers and analysts can build better reports and gain better insights.
Below is a step-by-step demonstration of using the four INFO.VIEW DAX functions in calculated tables for auto document the semantic model:
Step 1: Create Calculated Tables
You can create calculated tables by using the New table feature in Report View, Table View, or Model View of Power BI Desktop.
It’s a bit easier to do in Table View within Power BI Desktop. Let’s navigate to the Table tools in the Table View section, then select New table.

Enter the following DAX code in the formula bar to create the calculated table Doc_Tables:
Doc_Tables = INFO.VIEW.TABLES()
Then click the “commit” symbol (the checkmark icon in the formula bar). The table will be created

The screenshot below is part of the result table Doc_Tables.

Below are the DAX code for creating the other three documentation tables: Doc_Columns, Doc_Measures, and Doc_Relationships.
Doc_Columns = INFO.VIEW.COLUMNS()
Doc_Measures = INFO.VIEW.MEASURES()
Doc_Relationships = INFO.VIEW.RELATIONSHIPS()
Step 2: Establish a Relationship Between Doc_Tables and Doc_Columns
On the Modeling View tab, select Manage relationships > New relationship.
In the Create relationship dialog box, in the From table drop-down list, select table Doc_Columns. Then select the column Table as this will be the column to use in the relationship.
In the To table drop-down list, select the other table Doc_Tables. Then select the column Name.
Select Many to one (*:1) in the Cardinality dropdown list; select Single in the Cross-filter direction dropdown list.
Check Make this relationship active.
Click Save.

The other two documentation tables Doc_Measures and Doc_Relationships are standalone tables. We don’t need to create relationships for them.
Step 3: Document Model for Visual and Report
Here we have created the documentation model in the Power BI workbook:

We can now build documentation reports using some beautiful visuals based on this model.
Next Steps
For more information on INFO.VIEW DAX functions and DAX query view, refer to the links below: