{"id":37980,"date":"2020-07-31T13:00:28","date_gmt":"2020-07-31T12:00:28","guid":{"rendered":""},"modified":"2020-12-18T23:49:54","modified_gmt":"2020-12-18T22:49:54","slug":"power-bi-performance-tuning-workflow-part-1","status":"publish","type":"post","link":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/","title":{"rendered":"Power BI Performance Tuning Workflow &#8211; Part 1"},"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>This is the first in a two-part blog series covers various tips and tricks on Power BI performance tuning. In this blog, the focus is on best practices related to data preparation and design data models to meet performance requirements.<\/p>\n<p><span data-contrast=\"auto\">Power BI is a <\/span><span data-contrast=\"auto\">cloud based analytics platform that provides\u00a0<\/span><span data-contrast=\"auto\">self-service<\/span><span data-contrast=\"auto\"> analytics at enterprise scale, unifying <\/span><span data-contrast=\"none\">data from many sources to create interactive, immersive dashboards and reports that provide actionable insights and drive business results.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">One of the common issues we hear is that a &#8220;<\/span><span data-contrast=\"auto\">Power<\/span><span data-contrast=\"auto\"> BI report is running slow&#8221;<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">B<\/span><span data-contrast=\"auto\">roadly, the<\/span><span data-contrast=\"auto\"> areas that can be optimised and tuned <\/span><span data-contrast=\"auto\">are as follows:<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>The data source(s)<\/strong><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"> &#8211; Is it on<\/span>-premises or in Azure? Structured or Unstructured?<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>The data model<\/strong><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"> &#8211; Does it use a <\/span>Snowflake or Star model? Is it Normalised or De-normalised?<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\"><strong>Visualisations<\/strong> &#8211; this included dashboards and Power BI reports. Are you using a <\/span>Table or Matrix? Charts or Graph? Custom or Built-in?<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\"><strong>Infrastructure<\/strong> &#8211; <\/span><span data-contrast=\"auto\">including<\/span><span data-contrast=\"auto\">\u00a0capacities, data gateways, and the network<\/span><span data-contrast=\"auto\"> etc.<\/span><\/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\/07\/pbi1.png\" alt=\"A table that shows an example Power BI setup\" width=\"2353\" height=\"1055\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1.png 2353w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-300x135.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-1024x459.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-768x344.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-1536x689.png 1536w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-2048x918.png 2048w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-330x148.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-800x359.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1-400x179.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi1.png\" \/><\/p>\n<p><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559731&quot;:210,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><span data-contrast=\"none\">Inappropriate use of\u00a0<\/span><span data-contrast=\"none\">Direct Query and <\/span><span data-contrast=\"none\">Import\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h2>\n<p><em>Import<\/em><span data-contrast=\"none\"><em>\u202f<\/em> mode is the most common mode used to develop models. This mode delivers extremely fast performance thanks to in-memory querying and provides complete DAX support. Because of these strengths, it&#8217;s the default mode when creating a new Power BI desktop solution.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559731&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559731&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2.png\" alt=\"A demonstration of an import model\" width=\"726\" height=\"405\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2.png 1647w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-300x167.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-1024x571.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-768x428.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-1536x856.png 1536w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-330x184.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-800x446.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-400x223.png 400w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2-235x132.png 235w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi2.png\" \/><\/span><i><span data-contrast=\"auto\">Direct Query<\/span><\/i><span data-contrast=\"none\">\u202fmode is an alternative to the Import model. The model in this mode consists only of metadata defining the model structure. When the model is queried, queries that are compatible with<\/span><span data-contrast=\"none\"> the underlying data sources are fired off in the background to retrieve data.<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559731&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3.png\" alt=\"An example DirectQuery setup\" width=\"676\" height=\"178\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3.png 1675w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3-300x79.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3-1024x270.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3-768x202.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3-1536x404.png 1536w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3-330x87.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3-800x211.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3-400x105.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi3.png\" \/>\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559731&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><span data-contrast=\"none\">Considerations for Import<\/span><\/h2>\n<p><span data-contrast=\"auto\">The Power BI engine offers around 5-10x compression depending on <\/span><span data-contrast=\"auto\">the data<\/span><span data-contrast=\"auto\"> type and values. In a shared <\/span><span data-contrast=\"auto\">capacity,<\/span><span data-contrast=\"auto\"> the import model can store around 1GB of data but can scale using premium capacity that supports larger datasets.\u00a0<\/span><span data-contrast=\"auto\">However, you should avoid<\/span><span data-contrast=\"auto\"> the import model in these situations:<\/span><\/p>\n<ul>\n<li data-leveltext=\"%1.\" data-font=\"Calibri, Calibri_MSFontService, sans-serif\" data-listid=\"3\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">The dataset is very large and cannot fit in the available capacity.<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Calibri, Calibri_MSFontService, sans-serif\" data-listid=\"3\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">You need real-time insights for reporting. Import works on the refresh model, and will not suffice for data refreshing every few seconds or minutes.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><span data-contrast=\"none\">Considerations for Live Connection and Direct Query<\/span><\/h2>\n<p><span data-contrast=\"auto\">This is essentially the opposite to the Import model. Whenever you need real time data for reporting or analytics or you cannot store your data in the Power BI workspace (shared or premium, based on your environment), use Direct Query.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559731&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">If your team or organisation already uses a tabular model, you can continue with AAS or SSAS tabular for live connection scenarios. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">There are limitations of a Direct Query model, including <\/span><span data-contrast=\"auto\">extra network round-trip<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0to\u00a0<\/span><span data-contrast=\"auto\">retrieve the dataset from the source. DAX coverage is also limited and depends on the supportability w.r.t to the various data sources.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><span data-contrast=\"none\">Data Refresh<\/span><\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Schedule your refreshes for less busy times, especially if your datasets are on Power BI Premium.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Keep refresh limits in mind. If the source data changes frequently or the data volume is substantial, consider using DirectQuery\/LiveConnect mode instead of Import mode if the increased load at the source and the impact on query performance are acceptable<\/span><span data-contrast=\"auto\">.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-aria-posinset=\"1\" data-aria-level=\"1\">Verify that your dataset refresh time does not exceed the maximum refresh duration.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Use a reliable enterprise data gateway deployment to connect your datasets to on-premises data sources.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Use separate data gateways for Import datasets and DirectQuery\/LiveConnect datasets so that the data imports during scheduled refresh doesn&#8217;t impact the performance of reports and dashboards on top of DirectQuery\/LiveConnect datasets<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Configure failure notifications and send emails to your mailbox when any refresh fails.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Configure incremental refresh for\u00a0<\/span><span data-contrast=\"auto\">datasets that are filtered by using Power Query date\/time parameters with the reserved, case-sensitive names\u202f<\/span><b><span data-contrast=\"auto\">RangeStart<\/span><\/b><span data-contrast=\"auto\">\u202fand\u202f<\/span><b><span data-contrast=\"auto\">RangeEnd<\/span><\/b><span data-contrast=\"auto\">.\u202f<\/span><span data-contrast=\"auto\">This will minimise the memory footprint and reduce refresh time.<\/span><\/li>\n<\/ul>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><span data-contrast=\"none\">Use Query Caching<\/span><\/h2>\n<p><span data-contrast=\"none\">Query caching is a premium feature that provides performance benefits when a dataset is accessed frequently and doesn&#8217;t need to be refreshed often.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4.png\" alt=\"A Query Caching dialogue box in Power BI\" width=\"468\" height=\"186\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4.png 1119w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4-300x119.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4-1024x406.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4-768x305.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4-330x131.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4-800x317.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4-400x159.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi4.png\" \/><\/span><\/p>\n<p><span data-contrast=\"none\">Query caching can also minimise load on premium workspaces because it reuses the existing cached data and overall reduced the number of queries.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span data-contrast=\"none\">Data Loading<\/span><\/h2>\n<h3><span data-contrast=\"none\">Modelling Improvements<\/span><\/h3>\n<p><span data-contrast=\"auto\">In Power BI models, there can be intermediate tables used as <\/span><span data-contrast=\"auto\">staging layers<\/span><span data-contrast=\"auto\"> or custom queries that the author hides to prevent access. These hidden tables <\/span><span data-contrast=\"auto\">consume<\/span><span data-contrast=\"auto\"> memory, and one way to improve performance is to disable <\/span><span data-contrast=\"auto\">load.<\/span><span data-contrast=\"auto\"> Don\u2019t get confused with the \u201cHide in report view\u201d option. This only removes from the <\/span><span data-contrast=\"auto\">view,<\/span><span data-contrast=\"auto\"> but the table is still loaded in the model and <\/span><span data-contrast=\"auto\">consumes memory<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5.png\" alt=\"A screenshot showing the Enable Load option is enabled.\" width=\"435\" height=\"441\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5.png 788w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5-296x300.png 296w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5-768x779.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5-247x250.png 247w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5-330x335.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5-400x406.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi5.png\" \/><\/p>\n<h3><span data-contrast=\"auto\">Don\u2019t use Auto Date\/Time <\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"none\">The Auto date\/time is a data load option in Power BI Desktop. When the date columns are loaded into the model, this feature helps developers to create time-based visuals easily.<\/span><\/p>\n<p><span data-contrast=\"none\">If a data<\/span><span data-contrast=\"none\">\u00a0model has many dat<\/span><span data-contrast=\"none\">e\/<\/span><span data-contrast=\"none\">time fields, this setting can create several internal tables and increase the memory footprint of small models.\u00a0 <\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi6b.png\" alt=\"The Time intelligence option in Power BI, showing that Auto date\/time is enabled.\" width=\"633\" height=\"137\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi6b.png 633w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi6b-300x65.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi6b-330x71.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi6b-400x87.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi6b.png\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><span data-contrast=\"none\">GroupKind.Local<\/span><\/h3>\n<p><span data-contrast=\"none\">GroupKind.Local performs faster than the default setting. When the <\/span><span data-contrast=\"none\">data\u00a0<\/span><span data-contrast=\"none\">is sorted or in continuous fashion\u00a0<\/span><span data-contrast=\"none\">you can speed up your grouping operations considerably.\u202f You can <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerquery-m\/table-group\" target=\"_blank\" rel=\"noopener noreferrer\">re<\/a><\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">ad more about this on Microsoft Docs.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span data-contrast=\"none\">D<\/span><span data-contrast=\"none\">ata models<\/span><\/h2>\n<h3><span data-contrast=\"none\">Star Schema<\/span><\/h3>\n<p><span data-contrast=\"none\">Star schema<\/span><span data-contrast=\"none\">\u202fis a mature modelling approach widely adopted by relational data warehouses. It requires modellers to classify their model tables as either <\/span><span data-contrast=\"none\">dimension<\/span><span data-contrast=\"none\">\u202for\u202f<\/span><span data-contrast=\"none\">fact<\/span><span data-contrast=\"none\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">A well-structured model design should include tables that are either dimension-type tables or fact-type tables. Avoid mixing the two types of tables into a single table that might have dimension fields or additive measures. We also recommend that you should try to create the right number of tables with the right relationships in place.<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7.png\" alt=\"A diagram showing the star schema model.\" width=\"669\" height=\"474\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7.png 1558w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7-300x213.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7-1024x726.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7-768x544.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7-1536x1088.png 1536w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7-330x234.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7-800x567.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7-400x283.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi7.png\" \/><\/span><\/p>\n<p><span data-contrast=\"none\">You can <a href=\"https:\/\/docs.microsoft.com\/en-us\/power-bi\/guidance\/star-schema\" target=\"_blank\" rel=\"noopener noreferrer\">read more about Star Schema<\/a> on Microsoft Docs.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><span data-contrast=\"none\">Prefer integers over strings<\/span><\/h3>\n<p><span data-contrast=\"none\">Integers are a fixed length datatype that use run length encoding, whereas strings use dictionary encoding. Also, if you sort the column data using the integer column, the level of compression will be significant higher. The Power BI segments boundary is 1 million. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Avoid high precision\/cardinality columns<\/span><\/h3>\n<p><span data-contrast=\"auto\">If you create models that have higher precision such as numeric or dat<\/span><span data-contrast=\"auto\">e\/<\/span><span data-contrast=\"auto\">time etc<\/span><span data-contrast=\"auto\">, it reduces the compression ratio and increases load times. Wherever possible, find ways to reduce precision without impacting business requirements. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For example,<\/span><span data-contrast=\"auto\">\u00a0Date has a\u00a0<\/span><span data-contrast=\"auto\">precision<\/span><span data-contrast=\"auto\"> of milliseconds. Use Date only if you need to use Date, Time if you only need to use Time. Also, reduce the precision and round off to values <\/span><span data-contrast=\"auto\">wherever<\/span><span data-contrast=\"auto\">\u00a0possible.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Lean Model<\/span><\/h3>\n<p><span data-contrast=\"auto\">The source tables or views might have many columns, but in your data model the area of interest might be restricted to a few rows. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">For e<\/span><span data-contrast=\"auto\">xample, auditing columns such as Last Modified are not useful for an analytics purpose.\u00a0<\/span><span data-contrast=\"auto\">Remove unwanted tables or columns in the model, as this will reduce the model size and improve refresh times. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Bi-Directional Relationships<\/span><\/h3>\n<p><span data-contrast=\"auto\">The bi-directional cross-filtering feature is very powerful, and it allows us to solve complex models with more ease. However, if you have a model which is full of bi-directional filters, any slicing or filtering activity might slow down because of the relationship propagation chain.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Also, if not modelled correctly, you might see inconsistent behaviour, particularly in a snowflake architecture.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full webp-format aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8.png\" alt=\"A screenshot showing the cross filter direction option in the relationship editor in Power BI.\" width=\"605\" height=\"512\" data-orig-srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8.png 1343w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8-300x254.png 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8-1024x867.png 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8-768x650.png 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8-295x250.png 295w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8-330x279.png 330w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8-800x677.png 800w, https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8-400x339.png 400w\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/07\/pbi8.png\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><span data-contrast=\"none\">Default Aggregations<\/span><\/h3>\n<p><span data-contrast=\"auto\">Not all numeric columns are additive in nature, <\/span><span data-contrast=\"auto\">such as<\/span><span data-contrast=\"auto\">\u00a0surrogate\u00a0<\/span><span data-contrast=\"auto\">columns or<\/span><span data-contrast=\"auto\"> primary keys. By default, when any numeric column is placed on a visual, Power BI will aggregate that column, increasing the report compute time. It&#8217;s recommended that you change the default aggregations to none for such columns. One of the key points is that the fact-type tables always load data at the correct granularity level. If you have a higher granularity, you would miss detailed information. Too low, and it becomes too detailed for reports, and you have a cost-inefficient large model size.<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Composite Model and Aggregations<\/span><\/h3>\n<p><span data-contrast=\"auto\">Whenever possible, it&#8217;s best to develop a model in Import mode. This mode provides the greatest design flexibility and best performance.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">However, challenges related to large data volumes, or reporting on near real-time data, cannot be solved by Import models. In either of these cases, you can consider a DirectQuery model, providing your data is stored in a single data source that&#8217;s\u202f<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/power-bi\/power-bi-data-sources\" target=\"_blank\" rel=\"noopener noreferrer\"><span data-contrast=\"auto\">supported by DirectQuery mode<\/span><\/a><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Further, you can consider developing a Composite model in the following situations:<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Your model could be a DirectQuery model, but you want to boost performance. In a Composite model, performance can be improved by configuring appropriate storage for each\u00a0<\/span><span data-contrast=\"auto\">table. You can also add\u202f<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/power-bi\/desktop-aggregations\" target=\"_blank\" rel=\"noopener noreferrer\"><span data-contrast=\"auto\">aggregations<\/span><\/a><span data-contrast=\"auto\">.\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-aria-posinset=\"1\" data-aria-level=\"1\">You can also add aggregations to store aggregated fact data in the PBI import mode.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">You want to combine a DirectQuery model with additional data, which must be imported into the model. Imported data can be loaded from a different data source, or from calculated tables.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">You want to combine two or more DirectQuery data sources into a single model.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">You can <a href=\"https:\/\/docs.microsoft.com\/en-us\/power-bi\/desktop-composite-models\" target=\"_blank\" rel=\"noopener noreferrer\">read more about Desktop Composite Models<\/a> on Microsoft Docs.<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"auto\">Important composite best practices<\/span><\/h3>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"10\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Set the storage mode to\u202f<\/span><b><span data-contrast=\"auto\">DirectQuery<\/span><\/b><span data-contrast=\"auto\">\u202fwhen a table is a fact-type table storing large data volumes, or it needs to deliver near real-time results.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"10\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Set the storage mode to\u202f<\/span><b><span data-contrast=\"auto\">Dual<\/span><\/b><span data-contrast=\"auto\">\u202fwhen a table is a dimension-type table, and it will be queried together with\u202f<\/span><b><span data-contrast=\"auto\">DirectQuery<\/span><\/b><span data-contrast=\"auto\">\u202ffact-type tables based on the same source.<\/span><\/li>\n<\/ul>\n<h3>Aggregations<\/h3>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">You can add aggregations to DirectQuery tables in your Composite model. Aggregations are cached in the model, so they behave as Import <\/span><span data-contrast=\"auto\">tables. Their<\/span><span data-contrast=\"auto\">\u00a0purpose is to improve performance for &#8220;higher grain&#8221; queries.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">We recommend that an aggregation table follows a basic rule: Its row count should be at least a factor of 10 smaller than the underlying table.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:570,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<hr \/>\n<p>Be sure to <a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">check out part two<\/a>, which looks at optimisations you can make to certain calculations, row-level security, dashboard design and more!<\/p>\n<h2>Useful Links<\/h2>\n<ul>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/04\/power-bi-performance-tuning-workflow-part-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">Power BI Performance Tuning Workflow \u2013 Part 2<\/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 first 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-37980","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 1 - 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\/07\/31\/power-bi-performance-tuning-workflow-part-1\/\" \/>\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 1 - 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 first part of this two part series.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Industry Blogs - United Kingdom\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-31T12:00:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-18T22:49:54+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\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/\"},\"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 1\",\"datePublished\":\"2020-07-31T12:00:28+00:00\",\"dateModified\":\"2020-12-18T22:49:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/\"},\"wordCount\":1668,\"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\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#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\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/\",\"name\":\"Power BI Performance Tuning Workflow - Part 1 - 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\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/datasolutionthumb.jpg\",\"datePublished\":\"2020-07-31T12:00:28+00:00\",\"dateModified\":\"2020-12-18T22:49:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2020\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#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\\\/07\\\/31\\\/power-bi-performance-tuning-workflow-part-1\\\/#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 1\"}]},{\"@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 1 - 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\/07\/31\/power-bi-performance-tuning-workflow-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Power BI Performance Tuning Workflow - Part 1 - 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 first part of this two part series.","og_url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/","og_site_name":"Microsoft Industry Blogs - United Kingdom","article_published_time":"2020-07-31T12:00:28+00:00","article_modified_time":"2020-12-18T22:49:54+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\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#article","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/"},"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 1","datePublished":"2020-07-31T12:00:28+00:00","dateModified":"2020-12-18T22:49:54+00:00","mainEntityOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/"},"wordCount":1668,"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\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#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\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/","name":"Power BI Performance Tuning Workflow - Part 1 - 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\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#primaryimage"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/datasolutionthumb.jpg","datePublished":"2020-07-31T12:00:28+00:00","dateModified":"2020-12-18T22:49:54+00:00","breadcrumb":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#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\/07\/31\/power-bi-performance-tuning-workflow-part-1\/#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 1"}]},{"@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\/37980","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=37980"}],"version-history":[{"count":0,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/posts\/37980\/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=37980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/categories?post=37980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/post_tag?post=37980"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/content-type?post=37980"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/coauthors?post=37980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}