I've started adding descriptions to objects in my semantic models more than I used to because AI has made it far less time-consuming. The payoff was rarely worth it to do manually before because Power BI isn't great at surfacing descriptions, anyway. Now that the cost of creating them has gotten cheap, I still had to solve the problem of making them visible to end users.
Enter DMVs (Dynamic Management Views), that thing you learned about that one time for a Microsoft certification. DMVs are functions you can run against a semantic model to return information about the model -- in this case measure and column information. I love metadata, probably more than is reasonable, because it has the same shape everywhere. Solve a problem using metadata once and your solution will work everywhere else, too.
In this case, the DAX query I created unions measure and column data from INFO.VIEW.MEASURES() and INFO.VIEW.COLUMNS(), filtered down to whatever is visible (not hidden) and has a description. I also added a Search String column (Category, Field Name, and Description concatenated) so a text slicer can filter across all three at once, and a SortIndex column to force a sensible order, measures before columns, alphabetical within each.
One nuance of the query: Category captures the Display Folder if one's set, else the Table. That works for me because I use Display Folders to organize measures into logical groups and treat Table as a fallback for whatever I haven't filed yet. If you organize differently, or nest folders, adjust that one IF statement to mean whatever "Category" should mean in your model. Everything downstream, the union, the search, the sort, just works off whatever Category ends up being.
It also carries more technical information for developers, the actual DAX definitions, although I didn't add that to the report page because it would only frighten most people.
Because it uses DMVs/metadata, it's totally portable and only surfaces columns and measures that have descriptions, so you can add this table and page to your template report, and it will always be up to date as of the last refresh. You could just bake this table into your Power BI template report, so it's always there. Drop it on a page with a slicer on Business Glossary Search String and sort by SortIndex.
dmv-business-glossary.dax (.dax, but really a plain text file)


