{"id":14062907,"url":"https://github.com/m-kovalsky/ReportAnalyzer","last_synced_at":"2025-07-29T14:31:57.518Z","repository":{"id":44563167,"uuid":"414912447","full_name":"m-kovalsky/ReportAnalyzer","owner":"m-kovalsky","description":"A tool for visualizing and analyzing a Power BI report's performance.","archived":false,"fork":false,"pushed_at":"2022-11-14T10:13:40.000Z","size":51,"stargazers_count":94,"open_issues_count":11,"forks_count":14,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-03T12:52:13.274Z","etag":null,"topics":["analysis-services","azure-analysis-services","externaltools","powerbi"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m-kovalsky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-10-08T08:48:55.000Z","updated_at":"2025-03-27T08:52:31.000Z","dependencies_parsed_at":"2022-08-12T11:20:26.731Z","dependency_job_id":null,"html_url":"https://github.com/m-kovalsky/ReportAnalyzer","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/m-kovalsky/ReportAnalyzer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-kovalsky%2FReportAnalyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-kovalsky%2FReportAnalyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-kovalsky%2FReportAnalyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-kovalsky%2FReportAnalyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m-kovalsky","download_url":"https://codeload.github.com/m-kovalsky/ReportAnalyzer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-kovalsky%2FReportAnalyzer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267703041,"owners_count":24130463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis-services","azure-analysis-services","externaltools","powerbi"],"created_at":"2024-08-13T07:02:52.790Z","updated_at":"2025-07-29T14:31:57.220Z","avatar_url":"https://github.com/m-kovalsky.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"# [Report Analyzer](https://github.com/m-kovalsky/ReportAnalyzer/releases/latest)\n\n## Report Analyzer Introduction with Reid Havens\n\n[![Report Analyzer Introduction video on Youtube](http://i3.ytimg.com/vi/WT_5nOPdbqk/hqdefault.jpg)](https://www.youtube.com/watch?v=WT_5nOPdbqk\u0026t=2s\u0026ab_channel=HavensConsulting)\n\n![image](https://user-images.githubusercontent.com/29556918/144126596-62021fc2-3f86-490a-b34f-dbc8e1e5368d.PNG)\n\n## Purpose\n\nThis tool is designed to help Power BI developers/admins match Visual IDs from [Log Analytics](https://docs.microsoft.com/power-bi/transform-model/log-analytics/desktop-log-analytics-overview) to specific visuals in their Power BI report. Additionally, Report Analyzer provides a visual interface for prioritizing performance troubleshooting.\n\n## Running the tool\n\nReport Analyzer is an [External Tool](https://docs.microsoft.com/power-bi/transform-model/desktop-external-tools) for [Power BI Desktop](https://powerbi.microsoft.com/desktop). \n\nIn order to take full advantage of the tool, make sure you run the [Performance Analyzer](https://docs.microsoft.com/power-bi/create-reports/desktop-performance-analyzer) across all tabs in your Power BI report and [export](https://docs.microsoft.com/en-us/power-bi/create-reports/desktop-performance-analyzer#saving-performance-information) the results to a .json file. Save the performance data file to the same folder as your Power BI Desktop/Template file(s). Report Analyzer is able to handle multiple .pbix/.pbit files as well as multiple Performance Analyzer .json files.\n\n*NOTE: There is no specific naming requirement for performance data .json files.*\n\n1. [Install Report Analyzer](https://github.com/m-kovalsky/ReportAnalyzer/releases/latest).\n2. Open Power BI Desktop.\n3. Navigate to 'External Tools' in the ribbon.\n4. Open Report Analyzer.\n5. Select the folder which contains your [Power BI Desktop](https://powerbi.microsoft.com/desktop/) (or Power BI Template) file(s) as well as the Performance Analyzer export (.json) file.\n\n*NOTE: As of v1.3.0, you can also open Report Analyzer from the Start menu or the Desktop shortcut. It is not necessary to open Report Analyzer through Power BI Desktop.*\n\n## Compatiblity\n\nThis tool is compatible with [Power BI Desktop](https://powerbi.microsoft.com/desktop), Power BI Templates, and [Performance Analyzer](https://docs.microsoft.com/power-bi/create-reports/desktop-performance-analyzer) data (.json) files. All files must be in the same folder for the tool to integrate all of these files.\n\n## Features\n\n* Visually see [Performance Analyzer](https://docs.microsoft.com/power-bi/create-reports/desktop-performance-analyzer) data overlaid on each visual on a simulated Power BI Desktop canvas.\n* Find a specific visual by searching by Visual ID (especially useful for matching Visual IDs from [Log Analytics](https://docs.microsoft.com/power-bi/transform-model/log-analytics/desktop-log-analytics-overview)).\n* Use the Visual Type slicer to easily see all visuals of a specific visual type (i.e. Card).\n* Setting the DAX Query Time slider highlights visuals (with a red fill) with DAX Query times slower than the selected time (in seconds).\n* Hover over a visual to see additional visual metadata.\n   *  Visual ID, Visual Name, Page Name, Report Name, DAX Query Time, Render Time, Row Count, Columns Used, Measures Used, Hierarchies Used, Custom Visual Flag, Visual Contains a [Report-Level Measure](https://www.elegantbi.com/post/reportlevelmeasures).\n* Click on a visual to copy additional metadata pertaiing to that visual to the clipboard (including the DAX Query).\n* Supports loading multiple Power BI Desktop/Template files and automatically associating them with the Performance Analyzer .json files (must all be in the folder selected in the start screen).\n* Dark mode out of the box.\n* [Report Analyzer Recommendations](https://www.elegantbi.com/post/reportanalyzerrecos) (as of v1.1.0).\n* Export Report Metadata (as of v1.2.0) - this exports the report metadata (objects) in the same fashion as the [Export Report Objects](https://github.com/m-kovalsky/Tabular#export-report-objects) script.\n* The Bookmarks slicer allows for updating the simulated Power BI canvas to show the visuals per the settings of the selected bookmark (as of v1.4.0).\n\n## [Recommendations](https://www.elegantbi.com/post/reportanalyzerrecos)\n\n* Make sure to see my [blog post](https://www.elegantbi.com/post/reportanalyzerrecos) on this topic for additional context regarding the recommendations!\n* These recommendations are meant to complement the [Best Practice Rules](https://github.com/microsoft/Analysis-Services/tree/master/BestPracticeRules) for [Tabular Editor](https://tabulareditor.com/)'s [Best Practice Analyzer](https://docs.tabulareditor.com/te2/Best-Practice-Analyzer.html) as those rules focus on the model side whereas these recommendations focus on the report side.\n* 7 pre-loaded recommendations available to be run against your reports.\n* Following these recommendations will generally yield more performant reports.\n* Each recommendation and object has tooltips on hover which provide additional context regarding the recommendation and objects which violate the best practice.\n* Clicking on objects within the recommendations will navigate you to the particular page/visual where additional information can be found and performance improvement actions can commence.\n* Recommendations in red text have visuals which are deemed 'slow queries' (based on the DAX Query Time slider).\n* Visuals in red text are deemed 'slow queries' (based on the DAX Query Time slider).\n* Prioritization for visual performance troubleshooting should commence with rules/visuals in red text as those indicate visuals which are designated as slow.\n* The number in parenthesis next to a recommendation shows the number of objects which violate the recommendation.\n* The number in parenthesis next to a violation shows the number of objects within that object (visual/page/report).\n\n## Log Analytics Visual Matching\n\nReport Analyzer can be used to match Log Analytics queries to a specific visual in a Power BI report. In order to do this, follow these steps:\n\n1. Navigate to your [Log Analytics](https://docs.microsoft.com/power-bi/transform-model/log-analytics/desktop-log-analytics-overview) Workspace.\n2. Click on 'Logs' within the 'General' category on the left pane.\n3. Paste the [Kusto](https://docs.microsoft.com/azure/data-explorer/kusto/query/) query (see below).\n4. Add any additional filters to the Kusto query (as desired - perhaps based on time etc.).\n5. Find the Visual ID within Log Analytics in the Visual ID slicer within Report Analyzer (must be connected to the same report).\n\n*NOTE: The following Kusto query displays the slowest Power BI queries at the top so you can easily prioritize the queries which need the most attention.*\n\n```kusto\nPowerBIDatasetsWorkspace\n| where OperationName == \"QueryEnd\"\n| project PowerBIWorkspaceName\n,DatasetId = tostring(parse_json(ApplicationContext).DatasetId)\n,ReportId = tostring(parse_json(parse_json(ApplicationContext).Sources[0]).ReportId)\n,VisualId  = tostring(parse_json(parse_json(ApplicationContext).Sources[0]).VisualId)\n,DurationMs\n,EventText\n,ApplicationContext\n| order by DurationMs desc \n```\n\n\n*NOTE: A simple way to find the Report ID of a Power BI report is by navigating to the report page within [PowerBI.com](\"https://www.powerbi.com\") and copying the GUID within the URL after 'reports' (highlighted in orange in the screenshot below).*\n\n![image](https://user-images.githubusercontent.com/29556918/137474202-34204afc-a1bc-461c-9324-125cbc521b38.png)\n\n\n## Disclaimer\n\n* In order to obtain the report metadata, Report Analyzer 'hacks' into the Power BI Desktop file. This type of operation is not supported by Microsoft.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-kovalsky%2FReportAnalyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm-kovalsky%2FReportAnalyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-kovalsky%2FReportAnalyzer/lists"}