{"id":38370,"date":"2020-08-04T16:00:18","date_gmt":"2020-08-04T15:00:18","guid":{"rendered":""},"modified":"2020-12-18T23:49:40","modified_gmt":"2020-12-18T22:49:40","slug":"power-bi-performance-tuning-workflow-part-2","status":"publish","type":"post","link":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/","title":{"rendered":"Power BI Performance Tuning Workflow &#8211; Part 2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full size-full webp-format\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader.jpg\" alt=\"An illustration representing a data warehouse, next to an illustration of Bit the Raccoon.\" width=\"1920\" height=\"700\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader.jpg 1920w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader-300x109.jpg 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader-1024x373.jpg 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader-768x280.jpg 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader-1536x560.jpg 1536w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader-330x120.jpg 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader-800x292.jpg 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader-400x146.jpg 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionheader.jpg\" \/><\/p>\n<p>In <a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/\" target=\"_blank\" rel=\"noopener noreferrer\">Part 1 of the series<\/a>, you learned how to ingest, transform, and load data, and how to develop and optimise the Power BI data model. This article provides guidance that enables developers to write optimised DAX expressions and design reports, as well as enabling administrators to deploy and manage Power BI solutions.<\/p>\n<p>&nbsp;<\/p>\n<h2>DAX\u00a0Calculations<\/h2>\n<h3>Variables vs Repeatable Measures<\/h3>\n<p>Let&#8217;s take a look at DAX Measures versus DAX with Variables:<\/p>\n<p><strong>DAX Measures<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9.png\" alt=\"A Dax Measures line of code\" width=\"1459\" height=\"120\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9.png 1459w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9-300x25.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9-1024x84.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9-768x63.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9-330x27.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9-800x66.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9-400x33.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi9.png\" \/><\/p>\n<p><strong>DAX with Variables<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10.png\" alt=\"A Dax with Variables line of code\" width=\"1397\" height=\"210\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10.png 1397w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10-300x45.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10-1024x154.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10-768x115.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10-330x50.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10-800x120.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10-400x60.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi10.png\" \/><\/p>\n<p>In the second scenario, the measure Total Rows in the first scenario is executed twice, whereas it is executed only once in the variables scenario. Under such scenarios, variables can improve performance significantly.<\/p>\n<p>&nbsp;<\/p>\n<h3>Handling Blanks<\/h3>\n<pre>Sales (No <span style=\"color: #0000ff\">Blank<\/span>) =\r\n<span style=\"color: #0000ff\">IF<\/span> (\r\n    <span style=\"color: #0000ff\">ISBLANK<\/span>([Sales]),\r\n    0,\r\n    [Sales]\r\n)<\/pre>\n<p>It&#8217;s recommended that measures return BLANK when a meaningful value cannot be returned, as this design allows Power BI to render reports faster. Also, returning BLANK is efficient because report visuals\u2014by default\u2014eliminate groupings when summarisations are set to BLANK.<\/p>\n<p>&nbsp;<\/p>\n<h3>SELECTEDVALUE () vs\u00a0HASONEVALUE ()<\/h3>\n<p>A common scenario is to use HASONEVALUE() to check if there is only one value present in a column after applying slicers and filters, and then use the VALUES(column name) DAX function to get the single value.<\/p>\n<p>SELECTEDVALUE () performs both the above steps internally and gets the value if there is only one distinct value present in that column, or returns blank in case there are multiple values available.<\/p>\n<p>&nbsp;<\/p>\n<h3>SELECTEDVALUE () vs VALUES ()<\/h3>\n<p>VALUES () will return an error if it encounters multiple values. Normally, users handle it using error functions which are bad for performance. Instead of using that, SELECTEDVALUE () must be used. It is a better approach and returns blank in case of multiple values being encountered.<\/p>\n<p>&nbsp;<\/p>\n<h3>DISTINCT () vs VALUES ()<\/h3>\n<p>Power BI adds a blank value to the column in case it finds a referential integrity violation. For direct queries, Power BI by default adds a blank value to the columns as it does not have a way to check for violations.<\/p>\n<p><strong>DISTINCT ()<\/strong>: does not return blank when encountering an integrity violation. It returns blank only if it is in part of the original data.<\/p>\n<p><strong>V<span style=\"font-size: 1.4rem\">ALU<\/span><\/strong><span style=\"font-size: 1.4rem\"><strong>ES ()<\/strong>: includes blank, as it&#8217;s added by Power BI due to referential integrity violations.<\/span><\/p>\n<p>The usage of either of the functions should be the same throughout the whole report. Use VALUES () in the whole report if possible so that blank values are not an issue.<\/p>\n<p>&nbsp;<\/p>\n<h3>Avoid FORMAT in measures<\/h3>\n<p>Format functions are done in a single-threaded formula engine and slows down the calculation for large numbers of string values.<\/p>\n<p>&nbsp;<\/p>\n<h3>Optimize Virtual Relationships using TREATAS ()<\/h3>\n<p>A virtual relationship is simulated with DAX and column equivalency. FILTER|CONTAINS executes slower than\u00a0TREATAS.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11.png\" alt=\"An example of DAX with column equivalency.\" width=\"2410\" height=\"652\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11.png 2410w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-300x81.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-1024x277.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-768x208.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-1536x416.png 1536w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-2048x554.png 2048w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-330x89.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-800x216.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11-400x108.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi11.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>ISBLANK () vs Blank ()<\/h3>\n<p>The built-in function ISBLANK () to check for blank values is faster than using the comparison operator \u201c= Blank ()\u201d<\/p>\n<p>&nbsp;<\/p>\n<h3>Ratio Calculation efficiently<\/h3>\n<p>Use (a-b)\/b with variables instead of (a\/b)-1. The performance is the same in both cases usually, but under edge cases when both a and b are blank values, the former will return blanks and filter out the date whereas the latter will return -1 and increase the query space.<\/p>\n<p>&nbsp;<\/p>\n<h3>DIVIDE () vs \/<\/h3>\n<p>DIVIDE () function has an extra parameter which is returned in cases where the denominator value is zero. For scenarios that might have a zero in the denominator, it is suggested to use DIVIDE () as it will internally check if the denominator is zero. It also checks for ISBLANK (). However, if there can be a guarantee that the denominator will be non-zero, it is better to use \/ because DIVIDE() will perform an additional if ( denominator &lt;&gt; 0 ) check.<\/p>\n<p>&nbsp;<\/p>\n<h3>Avoid IFERROR () and ISERROR ()<\/h3>\n<p>IFERROR () and ISERROR () are sometimes used in measure. These functions force the engine to perform a step by step execution of the row to check for errors. So wherever possible, replace with the in-built function for error checking.<\/p>\n<p>Example: DIVIDE () and SELECTEDVALUE () perform an error check internally and return expected results.<\/p>\n<p>&nbsp;<\/p>\n<h3>COUNTROWS () vs COUNT ()<\/h3>\n<p>When the intention is to count table rows, it is recommended that you always use the COUNTROWS function. It&#8217;s more efficient and doesn&#8217;t consider BLANKs contained in any column of the table.<\/p>\n<p>&nbsp;<\/p>\n<h3>SUMMARIZE () Vs\u00a0SUMMARIZECOLUMNS ()<\/h3>\n<p>SUMMARIZE is used to provide aggregated results by performing groups of actions on the columns. It is recommended to use the SUMMARIZECOLUMNS () function, which is the optimised version. SUMMARIZE should only be used to get just the grouped elements of a table without any measures\/aggregations associated with it.<\/p>\n<p>&nbsp;<\/p>\n<h3>FILTER (all (ColumnName)) vs\u00a0FILTER (VALUES ()) vs FILTER(Table)<\/h3>\n<p>Instead of applying a filter to the whole table, it is better to apply filters to a desired column. Also, use ALL with the FILTER function if there is no specific need to keep the current context. To calculate measures while ignoring all the filters applied on a column, use the All (ColumnName) function along with FILTER instead of Table or VALUES ().<\/p>\n<p>&nbsp;<\/p>\n<h3>Avoid\u00a0AddColumns () in measure expression<\/h3>\n<p>By default, measure expressions are calculated in an iterative manner. Adding Addcolumns will convert it to a nested loop and further slow down the performance.<\/p>\n<p>&nbsp;<\/p>\n<h2>Complex Row Level Security<\/h2>\n<ul>\n<li>Keep the security table as small as possible. If the security granularity needs to be applied, consider multiple security tables. It is recommended to have relationships between security tables, as this will avoid the additional LOOKUP calls for filter operations.<\/li>\n<li>Avoid Row level security filter directly on Fact tables.<\/li>\n<li>If you have multiple RLS filters applied on a single fact table, consider a mapping table, and implement all the RLS fields on the single table.<\/li>\n<li>Avoid Bi-directional filters, instead of converting to a single direction in combination of FILTER DAX expression.<\/li>\n<li>Keep filter functions simple and avoid regular expressions, string manipulation and complex logic.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12.png\" alt=\"An example of Row-Level Security.\" width=\"1507\" height=\"731\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12.png 1507w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12-300x146.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12-1024x497.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12-768x373.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12-330x160.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12-800x388.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12-400x194.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi12.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2>Reports and dashboard design<\/h2>\n<h3>Limit Number of Visuals<\/h3>\n<p>A good starting point is to build a report with few tiles, with a maximum limit of 20 visuals. Every visual generates at least one query against its data source, so a higher number of visuals can throttle the CPU and network.<\/p>\n<ul>\n<li>A suitable approach is to segregate high level KPI data and granular line item reports in separate reports.<\/li>\n<li>Drill Through to provide granular data.<\/li>\n<li>Set default slicer and filters to limit dataset context.<\/li>\n<li>Use the bookmark capability to hide visuals and provide subsets of data for analysis.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi13.png\" alt=\"The selection pane and bookmarks pane switched off in Power BI.\" width=\"639\" height=\"543\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi13.png 639w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi13-300x255.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi13-294x250.png 294w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi13-330x280.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi13-400x340.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi13.png\" \/><\/p>\n<ul>\n<li>Test custom visual performance in isolation. Replace custom visuals with built-in visuals wherever possible. However, if there is a functionality gap, it is recommended to use ones that are validated by Microsoft.<\/li>\n<li>Avoid the export of reports with large granular data. Leaf level queries will consume memory and network bandwidth. Limit data export by selecting either export summarised data or none.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14.png\" alt=\"The 'Allow end users to export both summarized and underlying data from the service' options checked in Power BI.\" width=\"968\" height=\"273\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14.png 968w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14-300x85.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14-768x217.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14-330x93.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14-800x226.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14-400x113.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi14.png\" \/><\/p>\n<h3>Simplify Table or Matrix data<\/h3>\n<p>Tables\/matrix in reports with thousands of rows, many columns and measures can be complex and slow. Also, so many rows can be overwhelming for users to gain good insights.<\/p>\n<ul>\n<li>Use TopN filters to limit the initial view of table.<\/li>\n<li>Move less critical measures to tooltips so these are only displayed on demand, per row.<\/li>\n<\/ul>\n<p><strong>Slicers\/Filters<\/strong><\/p>\n<ul>\n<li>With a high number of visuals, using slicers or cross filters for every other visual by default generates many queries. An option is to edit interactions and disable the meaningless cross filters.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15.png\" alt=\"The Edit Interactions option highlighted in the Power BI visualisations dashboard \" width=\"1523\" height=\"1215\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15.png 1523w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15-300x239.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15-1024x817.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15-768x613.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15-313x250.png 313w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15-330x263.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15-800x638.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15-400x319.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi15.png\" \/><\/p>\n<ul>\n<li>Avoid slicers with a very large number of values. Slicers have two queries; One is to populate and the other is to fetch selection details. Instead of slicers, use filters or force context and limit values.<\/li>\n<li>Also, set default values and set single\/multi-select properties in slicers. It will reduce the context, reduce memory load, and fetch less data.<\/li>\n<li>Use sync slicers with care.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Data Source\/Network Latency<\/h2>\n<p>The on-premises data gateway (OPDG) acts as a link to provide secure data transfers between on-premises data and Azure data services. One of the cloud services in Power BI uses OPDG to connect to data sources that are connected to data sources on-premises, or those within a private vnet.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format alignnone\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16.png\" alt=\"An example on-premises data gateway (OPDG)\" width=\"1428\" height=\"1046\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16.png 1428w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16-300x220.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16-1024x750.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16-768x563.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16-330x242.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16-800x586.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16-400x293.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/08\/pbi16.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2>Data Gateway\u00a0Configuration<\/h2>\n<ul>\n<li>Keep data gateways as close to the data source. The data traffic between the gateway and Azure is compressed, as this will minimise the raw data movement for shorter distances between data source and gateway, and leverage the benefit of the compression in the downstream traffic.<\/li>\n<li>Use enterprise gateways instead of personal gateways because enterprise gateways enable centralised gateways and data source management and supports various storage models.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Gateway Parallelism<\/h3>\n<p>The on-premises data gateway has settings controlling the resource usage on the machine where the gateway is installed. By default, gateways automatically scale these values, using resources depending on CPU usage. In scenarios related to poor refresh, there are a few settings that can be considered<\/p>\n<ul>\n<li><strong>MashupDefaultPoolContainerMaxCount:<\/strong> Maximum container count for Power BI refresh, Azure Analysis Services, and others.<\/li>\n<li><strong>MashupDQPoolContainerMaxCount:<\/strong>\u00a0\u00a0Maximum container count for Power BI Direct Query. You can set to twice of number of cores in gateway or leave it to auto tuning<\/li>\n<\/ul>\n<p>Read more on <a href=\"https:\/\/docs.microsoft.com\/en-us\/data-integration\/gateway\/service-gateway-performance-cpu\" target=\"_blank\" rel=\"noopener noreferrer\">how to adjust gateway performance based on server CPU<\/a> on Microsoft Docs.<\/p>\n<p>&nbsp;<\/p>\n<h3>AutoScaling Gateway<\/h3>\n<p>Currently the gateway application utilises resources on the gateway machine based on the pre-configured state. The autoscaling application can now scale to use more or less resources depending on the system CPU.<\/p>\n<p>To allow the gateway to scale based on CPU, this configuration \u201cMashupDisableContainerAutoConfig\u201d would need to be\u00a0set to\u00a0false. When this is done, the following configurations are adjusted based on the gateway CPU.<\/p>\n<p><a href=\"https:\/\/powerbi.microsoft.com\/en-us\/blog\/on-premises-data-gateway-june-2019-update-is-now-available\/\" target=\"_blank\" rel=\"noopener noreferrer\">Read more about this on the Power BI blog.<\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Cluster Load Balancing<\/h3>\n<ul>\n<li>Gateway admins can\u00a0throttle resources of each gateway member to make sure either a gateway member or the entire gateway cluster isn\u2019t overloaded causing system failures.<\/li>\n<li>If a gateway cluster with load balancing enabled receives a request from one of the cloud services, it will randomly select a gateway member. If the chosen member is already near the throttling limit set for CPU or memory, another member within the cluster is selected. If all members within the cluster are in the same state, all the new requests fail.<\/li>\n<li><span style=\"font-size: 1.4rem\"><strong>CPUUtilizationPercentageThreshold<\/strong> \u2013 This configuration allows gateway admins to set a throttling limit for CPU. The range for this configuration is between 0 to 100. The default value is 0, would indicate that this configuration is disabled.<\/span><\/li>\n<li><span style=\"font-size: 1.4rem\"><strong>MemoryUtilizationPercentageThreshold<\/strong> \u2013Allows gateway admins to set a throttling limit for memory with a between 0 to 100.The default value is 0, would indicate that this configuration is disabled.<\/span><\/li>\n<li><span style=\"font-size: 1.4rem\"><strong>ResourceUtilizationAggregateionPeriodInMinutes<\/strong> \u2013The time for which CPU and memory system counters of the gateway machine would be aggregated to be compared against the respective threshold limits using above mentioned configurations. The default value is 5.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Use SSD\/Fast Storage<\/h3>\n<p>Power BI gateway refresh and data movement returns a large dataset that is temporarily stored on the gateway machine.\u202f It is recommended to have SSD storage for the spooling layer.<\/p>\n<p>&nbsp;<\/p>\n<h2>Useful Links<\/h2>\n<ul>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/\" target=\"_blank\" rel=\"noopener noreferrer\">Power BI Performance Tuning Workflow &#8211; Part 1<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/modules\/get-started-with-power-bi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Get started building with Power BI<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/modules\/model-data-power-bi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Model data in Power BI<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/paths\/create-use-analytics-reports-power-bi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Create and use analytics reports with Power BI<\/a><\/li>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/07\/how-to-operationalise-your-data-lake\/\" target=\"_blank\" rel=\"noopener noreferrer\">How to Operationalise your Data Lake<\/a><\/li>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/05\/28\/enjoy-free-technical-sessions-from-microsoft-experts-on-learn-tv\/\" target=\"_blank\" rel=\"noopener noreferrer\">Enjoy free technical sessions from Microsoft experts on Learn TV!<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Is your Power BI report is running slow? Nilabja Ball walks us through what you can tune and optimise in the second part of this two part series.<\/p>\n","protected":false},"author":430,"featured_media":36918,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"categories":[594],"post_tag":[519],"content-type":[],"coauthors":[1577],"class_list":["post-38370","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technetuk","tag-technet-uk"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Power BI Performance Tuning Workflow - Part 2 - Microsoft Industry Blogs - United Kingdom<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Power BI Performance Tuning Workflow - Part 2 - Microsoft Industry Blogs - United Kingdom\" \/>\n<meta property=\"og:description\" content=\"Is your Power BI report is running slow? Nilabja Ball walks us through what you can tune and optimise in the second part of this two part series.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Industry Blogs - United Kingdom\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-04T15:00:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-18T22:49:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionthumb.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Neel Ball\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Neel Ball\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/\"},\"author\":[{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/author\\\/neel-ball\\\/\",\"@type\":\"Person\",\"@name\":\"Neel Ball\"}],\"headline\":\"Power BI Performance Tuning Workflow &#8211; Part 2\",\"datePublished\":\"2020-08-04T15:00:18+00:00\",\"dateModified\":\"2020-12-18T22:49:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/\"},\"wordCount\":1849,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/datasolutionthumb.jpg\",\"keywords\":[\"TechNet UK\"],\"articleSection\":[\"TechNet UK\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/\",\"name\":\"Power BI Performance Tuning Workflow - Part 2 - Microsoft Industry Blogs - United Kingdom\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/datasolutionthumb.jpg\",\"datePublished\":\"2020-08-04T15:00:18+00:00\",\"dateModified\":\"2020-12-18T22:49:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/datasolutionthumb.jpg\",\"contentUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/datasolutionthumb.jpg\",\"width\":800,\"height\":450,\"caption\":\"An illustration representing a data warehouse, next to an illustration of Bit the Raccoon.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/08\\\/04\\\/power-bi-performance-tuning-workflow-part-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Power BI Performance Tuning Workflow &#8211; Part 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/\",\"name\":\"Microsoft Industry Blogs - United Kingdom\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#organization\",\"name\":\"Microsoft Industry Blogs - United Kingdom\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"contentUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Industry Blogs - United Kingdom\"},\"image\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Power BI Performance Tuning Workflow - Part 2 - Microsoft Industry Blogs - United Kingdom","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/","og_locale":"en_US","og_type":"article","og_title":"Power BI Performance Tuning Workflow - Part 2 - Microsoft Industry Blogs - United Kingdom","og_description":"Is your Power BI report is running slow? Nilabja Ball walks us through what you can tune and optimise in the second part of this two part series.","og_url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/","og_site_name":"Microsoft Industry Blogs - United Kingdom","article_published_time":"2020-08-04T15:00:18+00:00","article_modified_time":"2020-12-18T22:49:40+00:00","og_image":[{"width":800,"height":450,"url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionthumb.jpg","type":"image\/jpeg"}],"author":"Neel Ball","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Neel Ball","Est. reading time":"7 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#article","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/"},"author":[{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/author\/neel-ball\/","@type":"Person","@name":"Neel Ball"}],"headline":"Power BI Performance Tuning Workflow &#8211; Part 2","datePublished":"2020-08-04T15:00:18+00:00","dateModified":"2020-12-18T22:49:40+00:00","mainEntityOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/"},"wordCount":1849,"commentCount":0,"publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#organization"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionthumb.jpg","keywords":["TechNet UK"],"articleSection":["TechNet UK"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/","name":"Power BI Performance Tuning Workflow - Part 2 - Microsoft Industry Blogs - United Kingdom","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#primaryimage"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionthumb.jpg","datePublished":"2020-08-04T15:00:18+00:00","dateModified":"2020-12-18T22:49:40+00:00","breadcrumb":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#primaryimage","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionthumb.jpg","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionthumb.jpg","width":800,"height":450,"caption":"An illustration representing a data warehouse, next to an illustration of Bit the Raccoon."},{"@type":"BreadcrumbList","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/"},{"@type":"ListItem","position":2,"name":"Power BI Performance Tuning Workflow &#8211; Part 2"}]},{"@type":"WebSite","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#website","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/","name":"Microsoft Industry Blogs - United Kingdom","description":"","publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#organization","name":"Microsoft Industry Blogs - United Kingdom","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Industry Blogs - United Kingdom"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/posts\/38370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/users\/430"}],"replies":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/comments?post=38370"}],"version-history":[{"count":0,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/posts\/38370\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/media\/36918"}],"wp:attachment":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/media?parent=38370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/categories?post=38370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/post_tag?post=38370"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/content-type?post=38370"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/coauthors?post=38370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}