Forum Discussion

ashishkr10006's avatar
ashishkr10006
New Member
7 days ago
Solved

Semantic Model Views and User Count

Hi Team,

I am looking for a way to track the usage of a Semantic Model in Power BI.

In our organization, many users access the Semantic Model through Analyze in Excel instead of consuming Power BI reports or dashboards. My requirement is to determine:

  • The total number of users connected to the Semantic Model.
  • The list of active users who are using the Semantic Model.
  • The total number of views/queries executed against the Semantic Model, including connections made through Analyze in Excel.

I have already checked the Usage Metrics Report, but it appears to capture usage related to Power BI reports and dashboards only, and does not provide visibility into users accessing the Semantic Model through Analyze in Excel.

Has anyone implemented a solution to track this type of usage? Any guidance on how to identify the total views and users consuming a Semantic Model directly would be greatly appreciated.

Thanks in advance!
Ashish

Ashish_Mathur​ @Amit Chandak

  • Hi Ashish,

    The Usage Metrics report is built from report render events only, so Analyze in Excel traffic will never show there because AIX connects straight to the model XMLA endpoint and does not open a report page.

    Two reliable ways to get what you want:

    1. Fabric Workspace Monitoring (preview, requires an F capacity). Enable it on the workspace, select Semantic Model as the item type, and every DAX query that hits the model lands in an Eventhouse (KQL database). The SemanticModelLogs table gives you the user UPN, timestamp, application/source, duration, and the DAX text. This includes Analyze in Excel, SSMS, Tabular Editor, report queries, and any XMLA client. Point a Power BI report at that KQL DB and you have the user count, active users, and query volume you listed.

    2. Power BI admin activity log (works at Pro too). Either from the Purview portal or scripted with Get-PowerBIActivityEvent, filter on the AnalyzedByExternalApplication operation. Each entry has UserId, DatasetId, and workload, so you can group by user per model. The retention is 30 days from the API and 90 days from the UI, so if you need longer history, dump it nightly into a Lakehouse or SQL table.

    If the model is on PPU or a Premium/Fabric capacity, Workspace Monitoring is the much better experience because the data is granular and already structured for querying.

     

    If this helped, a thumbs up and marking it as the accepted solution would be appreciated.

     

    Best,
    Shai Karmani

     

    Let's connect in LinkedIn

7 Replies

  • The standard Usage Metrics report only tracks report and dashboard consumption, not direct semantic model access through XMLA, Analyze in Excel, or external tools, which is the gap you are hitting.

    Two paths work for what you are after.

    The quickest is the Microsoft 365 audit log. Enable auditing in Purview or the Microsoft 365 admin center, then search for the event name AnalyzedByExternalApplicationPowerBI. That event fires every time someone connects to a dataset through Analyze in Excel, Excel's Get Data, Tabular Editor, DAX Studio, or any XMLA client, and the payload includes the user UPN, dataset ID, workspace, and timestamp. The regular ViewReport event covers interactive report use.

    The scalable option is the admin REST API GetActivityEvents (or Get-PowerBIActivityEvent in the MicrosoftPowerBIMgmt PowerShell module). Pull it on a daily schedule and store the output. You get the same events as the audit log in a form that is easy to build a semantic model on top of.

    If you are on Fabric capacity and want ongoing visibility, Workspace Monitoring (now GA) captures every DAX query hitting the semantic model, including those from Analyze in Excel and XMLA clients. It writes to an Eventhouse so you can build your own usage report from it.

     

    If this helped, a thumbs up and marking it as the solution would be appreciated.

     

    Thanks,
    Shai Karmani

     

    Let's connect in LinkedIn

  • Hi Ashish,

    The Usage Metrics report is built from report render events only, so Analyze in Excel traffic will never show there because AIX connects straight to the model XMLA endpoint and does not open a report page.

    Two reliable ways to get what you want:

    1. Fabric Workspace Monitoring (preview, requires an F capacity). Enable it on the workspace, select Semantic Model as the item type, and every DAX query that hits the model lands in an Eventhouse (KQL database). The SemanticModelLogs table gives you the user UPN, timestamp, application/source, duration, and the DAX text. This includes Analyze in Excel, SSMS, Tabular Editor, report queries, and any XMLA client. Point a Power BI report at that KQL DB and you have the user count, active users, and query volume you listed.

    2. Power BI admin activity log (works at Pro too). Either from the Purview portal or scripted with Get-PowerBIActivityEvent, filter on the AnalyzedByExternalApplication operation. Each entry has UserId, DatasetId, and workload, so you can group by user per model. The retention is 30 days from the API and 90 days from the UI, so if you need longer history, dump it nightly into a Lakehouse or SQL table.

    If the model is on PPU or a Premium/Fabric capacity, Workspace Monitoring is the much better experience because the data is granular and already structured for querying.

     

    If this helped, a thumbs up and marking it as the accepted solution would be appreciated.

     

    Best,
    Shai Karmani

     

    Let's connect in LinkedIn

  • Hi ashishkr10006​,

    I second Shai_Karmani​'s suggestion of GetActivityEvents. One thing to note is the API only stores 28 days worth of data, so if you want to see history further back than that you need to create a process that will save the results from the API to a lakehouse or warehouse. 

    https://learn.microsoft.com/en-us/rest/api/power-bi/admin/get-activity-events


    I suggest to all fabric admins to set up a process like this that runs daily to save the previous days audit data somewhere safe so that they can start to build a full history of what people are doing in their Fabric environment. 

  • jubinsoni's avatar
    jubinsoni
    Icon for Continued Contributor rankContinued Contributor

    Hi ashishkr10006, the audit log route already covers who connected, so I will add the option that gives you query counts, which the audit events do not. Workspace monitoring is the closest fit. Turn it on for the workspace, which creates a monitoring Eventhouse, and the semantic model logs table records every query event with the user, the application name such as Excel, the duration and the CPU time. A simple KQL query that groups by ApplicationName and User for the last 30 days gives you total queries and active users, and filtering on the Excel application name isolates Analyze in Excel traffic. If you are not able to enable that, the Fabric Capacity Metrics app also shows interactive operations per semantic model, which is a good proxy for total views because every Analyze in Excel refresh or pivot interaction is an interactive query. For a quick one off look, SQL Server Profiler or DAX Studio Server Timings connected over XMLA can capture queries live, but that only works while you are tracing. For the final report, I would join the audit log export for the user list with the workspace monitoring table for volume, and publish it as a small usage model so you are not re-running queries each time.

    AI-assisted drafting: AI was used to help structure and phrase this response. I reviewed and validated the technical content before posting.

  • v-kathullac's avatar
    v-kathullac
    Icon for Community Support rankCommunity Support

    Hi ashishkr10006​ ,

    As we haven’t heard back from you, we wanted to kindly follow up to check if the solution provided for the issue worked? or Let us know if you need any further assistance?

    Regards,
    Chaithanya