<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luiz Eduardo</title>
    <description>The latest articles on DEV Community by Luiz Eduardo (@ludolua).</description>
    <link>https://dev.to/ludolua</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F841522%2Fb84fe7b2-eb8a-45bc-8651-89e994dc47f9.png</url>
      <title>DEV Community: Luiz Eduardo</title>
      <link>https://dev.to/ludolua</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ludolua"/>
    <language>en</language>
    <item>
      <title>Guia Prático de Performance no Power BI</title>
      <dc:creator>Luiz Eduardo</dc:creator>
      <pubDate>Fri, 25 Apr 2025 12:35:19 +0000</pubDate>
      <link>https://dev.to/ludolua/guia-pratico-de-performance-no-power-bi-2cba</link>
      <guid>https://dev.to/ludolua/guia-pratico-de-performance-no-power-bi-2cba</guid>
      <description>&lt;p&gt;O Power BI é uma ferramenta poderosa, mas conforme os relatórios e modelos crescem, manter uma boa performance se torna crucial. Este guia reúne boas práticas e técnicas avançadas que vão desde modelagem até elementos visuais como SVG, HTML e emojis, tudo voltado para quem quer criar dashboards rápidos e eficientes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sumário
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Diagnóstico de Performance&lt;/li&gt;
&lt;li&gt;Modelagem: O Primeiro Passo&lt;/li&gt;
&lt;li&gt;Otimização de DAX&lt;/li&gt;
&lt;li&gt;Query Folding e Power Query&lt;/li&gt;
&lt;li&gt;Visuais e Layout&lt;/li&gt;
&lt;li&gt;Atualização de Dados&lt;/li&gt;
&lt;li&gt;Técnicas Avançadas&lt;/li&gt;
&lt;li&gt;Elementos Visuais Avançados&lt;/li&gt;
&lt;li&gt;Referências Essenciais&lt;/li&gt;
&lt;li&gt;Conclusão&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 Diagnóstico de Performance
&lt;/h2&gt;

&lt;p&gt;Antes de otimizar, é essencial identificar gargalos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance Analyzer&lt;/strong&gt; (no Power BI Desktop): mede o tempo de carregamento de cada visual.
👉 &lt;a href="https://learn.microsoft.com/pt-br/power-bi/create-reports/desktop-performance-analyzer" rel="noopener noreferrer"&gt;Saiba mais&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log de Diagnóstico e Premium Gen2 Metrics App&lt;/strong&gt; (no Power BI Service): úteis para avaliar desempenho em ambiente produtivo.
👉 &lt;a href="https://learn.microsoft.com/pt-br/power-bi/guidance/monitor-report-performance" rel="noopener noreferrer"&gt;Monitorar desempenho no serviço&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DAX Studio&lt;/strong&gt;, &lt;strong&gt;Server Timings&lt;/strong&gt; e &lt;strong&gt;VertiPaq Analyzer&lt;/strong&gt;: fundamentais para detectar medidas lentas e alto consumo de memória.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View Native Query&lt;/strong&gt; no Power Query: valide se o query folding está ativo (clique com o botão direito em uma etapa e selecione "Exibir consulta nativa").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Histórico de Atualização&lt;/strong&gt;: analise tempos de refresh para identificar gargalos no agendamento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Passos sugeridos para diagnóstico:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use o Performance Analyzer para identificar visuais lentos.&lt;/li&gt;
&lt;li&gt;No Power Query, verifique se as etapas mantêm o query folding.&lt;/li&gt;
&lt;li&gt;No DAX Studio, utilize o Server Timings para identificar medidas ou consultas pesadas.&lt;/li&gt;
&lt;li&gt;Analise o histórico de atualização no serviço para detectar lentidão em refresh.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🧱 Modelagem: O Primeiro Passo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Reduza a Complexidade
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Remova colunas e tabelas desnecessárias.&lt;/li&gt;
&lt;li&gt;Simplifique relacionamentos e evite cálculos desnecessários.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use o Modelo Estrela
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Estruture seus dados em tabelas fato e dimensão.&lt;/li&gt;
&lt;li&gt;Reduz a complexidade das consultas e melhora a performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Controle a Cardinalidade
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Colunas com muitos valores distintos impactam negativamente a performance.&lt;/li&gt;
&lt;li&gt;Sempre que possível, converta colunas de texto para IDs inteiros.&lt;/li&gt;
&lt;li&gt;Agrupe ou categorize valores detalhados.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Evite Relacionamentos Bidirecionais e Muitos-para-Muitos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use relacionamentos bidirecionais apenas quando realmente necessário.&lt;/li&gt;
&lt;li&gt;Prefira relacionamentos um-para-muitos (1:*).&lt;/li&gt;
&lt;li&gt;Relacionamentos muitos-para-muitos (M:M) devem ser evitados, pois aumentam a complexidade dos cálculos.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Otimização de DAX
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prefira Medidas a Colunas Calculadas
&lt;/h3&gt;

&lt;p&gt;As medidas são processadas sob demanda, consumindo menos memória:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Vendas = SUM(FatoVendas[Valor])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use Variáveis com &lt;code&gt;VAR&lt;/code&gt; + &lt;code&gt;CALCULATE&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Evita recalcular expressões complexas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lucro Margem (%) = 
VAR TotalLucro = SUM(FatoVendas[Lucro])
VAR TotalReceita = SUM(FatoVendas[Receita])
RETURN DIVIDE(TotalLucro, TotalReceita, 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Domine FILTER, ALL, ALLSELECTED, SELECTEDVALUE e HASONEVALUE
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;FILTER&lt;/code&gt; é poderoso, mas pesado em grandes volumes. Prefira filtros diretos sempre que possível.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ALL&lt;/code&gt; remove todo o contexto de filtro.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ALLSELECTED&lt;/code&gt; mantém os filtros aplicados pelo usuário, mas ignora os dos visuais.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SELECTEDVALUE&lt;/code&gt; e &lt;code&gt;HASONEVALUE&lt;/code&gt; otimizam cálculos condicionais.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% Participação = 
DIVIDE(
    SUM(FatoVendas[Valor]),
    CALCULATE(SUM(FatoVendas[Valor]), ALL(DimProduto))
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Evite Iteradores em Grandes Tabelas
&lt;/h3&gt;

&lt;p&gt;Funções como &lt;code&gt;SUMX&lt;/code&gt;, &lt;code&gt;FILTER&lt;/code&gt; e outras iterativas podem ser lentas em grandes volumes. Sempre que possível, utilize funções agregadas simples.&lt;/p&gt;




&lt;h2&gt;
  
  
  📉 Query Folding e Power Query
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sempre que possível, deixe que o Power BI “empurre” os filtros e transformações para a fonte de dados (query folding).&lt;/li&gt;
&lt;li&gt;Transformações como "adicionar coluna personalizada" ou "merge" entre fontes diferentes podem quebrar o folding. Prefira etapas simples e nativas.&lt;/li&gt;
&lt;li&gt;Use “Exibir consulta nativa” para validar se o folding está ativo.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📊 Visuais e Layout
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Evite páginas com muitos visuais — cada um gera uma consulta ao modelo.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;drill-through&lt;/strong&gt; para detalhamento, em vez de sobrecarregar a página principal.&lt;/li&gt;
&lt;li&gt;Prefira visuais nativos aos customizados. Visuais customizados podem impactar a performance.&lt;/li&gt;
&lt;li&gt;Limite o uso de imagens grandes e SVGs complexos.&lt;/li&gt;
&lt;li&gt;Utilize bookmarks e navegação para dividir informações sem sobrecarregar páginas.&lt;/li&gt;
&lt;li&gt;Desative auto-refresh em visuais como &lt;strong&gt;Play Axis&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔁 Atualização de Dados
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;refresh incremental&lt;/strong&gt; para evitar recarregar toda a base.&lt;/li&gt;
&lt;li&gt;Escolha entre &lt;strong&gt;Import&lt;/strong&gt; ou &lt;strong&gt;DirectQuery&lt;/strong&gt; conforme o caso:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Import&lt;/strong&gt; para performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DirectQuery&lt;/strong&gt; para dados em tempo real (com custo de performance).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Analise o histórico de refresh para identificar gargalos.&lt;/li&gt;

&lt;li&gt;Considere segmentar a atualização por partições usando &lt;strong&gt;RangeStart&lt;/strong&gt; e &lt;strong&gt;RangeEnd&lt;/strong&gt;.&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Técnicas Avançadas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agregações em DirectQuery
&lt;/h3&gt;

&lt;p&gt;Permite que o Power BI use uma tabela agregada e recorra à tabela detalhada apenas quando necessário.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passos:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crie uma tabela com agregações.&lt;/li&gt;
&lt;li&gt;Marque como "tabela de agregação".&lt;/li&gt;
&lt;li&gt;Estabeleça relacionamentos com a tabela detalhada.&lt;/li&gt;
&lt;li&gt;Verifique o uso com o DAX Studio (Server Timings).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Modelos Compostos (Composite Models)
&lt;/h3&gt;

&lt;p&gt;Combine dados importados com DirectQuery. Ideal para manter históricos em Import e dados recentes em DirectQuery. Atenção: nem todos os recursos estão disponíveis em modelos compostos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Partition Pruning com RangeStart e RangeEnd
&lt;/h3&gt;

&lt;p&gt;Segmenta dados por data no Power Query, essencial para refresh incremental eficiente.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 Elementos Visuais Avançados
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SVG
&lt;/h3&gt;

&lt;p&gt;Ideal para gráficos vetoriais dinâmicos como barras de progresso. Cuidado com SVGs complexos em grandes volumes de dados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BarraProgresso = 
VAR Perc = DIVIDE([ValorAtual], [Meta], 0)
VAR QtdePreenchido = INT(Perc * 10)
VAR BlocosSVG = CONCATENATEX(
    GENERATESERIES(1,10),
    IF([Value] &amp;amp;lt;= QtdePreenchido,
        "&amp;amp;lt;rect width='10' height='20' x='" &amp;amp;amp; ([Value]-1)*12 &amp;amp;amp; "' fill='green' /&amp;amp;gt;",
        "&amp;amp;lt;rect width='10' height='20' x='" &amp;amp;amp; ([Value]-1)*12 &amp;amp;amp; "' fill='lightgray' /&amp;amp;gt;"
    ),
    ""
)
RETURN "&amp;amp;lt;svg width='120' height='20' xmlns='http://www.w3.org/2000/svg'&amp;amp;gt;" &amp;amp;amp; BlocosSVG &amp;amp;amp; "&amp;amp;lt;/svg&amp;amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Imagens Dinâmicas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;URLs baseadas nos dados exibidas em tabelas e matrizes.&lt;/li&gt;
&lt;li&gt;Comprima ou otimize imagens para evitar lentidão.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Via visuais customizados como &lt;strong&gt;HTML Content&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ideal para tooltips avançados e visualizações customizadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Emojis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Usados diretamente em DAX, com impacto de performance irrelevante:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IndicadorFarol = 
SWITCH(
    TRUE(),
    [Valor] &amp;amp;gt; 80, "🟢",
    [Valor] &amp;amp;gt; 50, "🟡",
    "🔴"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📚 Referências Essenciais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/power-bi/guidance/power-bi-optimization" rel="noopener noreferrer"&gt;Guia Oficial de Otimização - Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/training/modules/optimize-model-power-bi/" rel="noopener noreferrer"&gt;Treinamentos Oficiais Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://daxstudio.org/" rel="noopener noreferrer"&gt;DAX Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sqlbi.com/tools/vertipaq-analyzer/" rel="noopener noreferrer"&gt;VertiPaq Analyzer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/pt-br/power-bi/guidance/monitor-report-performance" rel="noopener noreferrer"&gt;Monitorar o desempenho de relatórios no Power BI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Conclusão
&lt;/h2&gt;

&lt;p&gt;Performance no Power BI vai muito além de "fazer funcionar". Trata-se de construir experiências fluídas, escaláveis e bem arquitetadas. Investir em boas práticas, entender o modelo tabular e usar ferramentas de análise vai elevar o nível dos seus dashboards. Elementos visuais avançados enriquecem — desde que usados com responsabilidade.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparativo Rápido de Boas Práticas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tema&lt;/th&gt;
&lt;th&gt;Boas Práticas&lt;/th&gt;
&lt;th&gt;Pontos de Atenção&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Modelagem&lt;/td&gt;
&lt;td&gt;Modelo estrela, evitar bi-direcional&lt;/td&gt;
&lt;td&gt;Cardinalidade alta, M:M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DAX&lt;/td&gt;
&lt;td&gt;Medidas, VAR, funções agregadas&lt;/td&gt;
&lt;td&gt;FILTER/iteradores em grandes tabelas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Query&lt;/td&gt;
&lt;td&gt;Query folding, etapas nativas&lt;/td&gt;
&lt;td&gt;Custom columns, merges complexos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visuais&lt;/td&gt;
&lt;td&gt;Nativos, poucos por página&lt;/td&gt;
&lt;td&gt;Custom visuals, imagens grandes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Atualização&lt;/td&gt;
&lt;td&gt;Incremental, agendado&lt;/td&gt;
&lt;td&gt;Gateway, refresh total&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Métricas de referência:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Busque páginas carregando em menos de 5 segundos.&lt;/li&gt;
&lt;li&gt;Visuais individuais devem responder em até 2 segundos.&lt;/li&gt;
&lt;li&gt;Relatórios com refresh incremental devem atualizar em minutos, não horas.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>performance</category>
      <category>tutorial</category>
      <category>braziliandevs</category>
      <category>powerbi</category>
    </item>
  </channel>
</rss>
