5 Dicas Infalíveis para Performance e Otimização de Modelos

E aí, tudo bem?!
Hoje darei dicas de como você pode analisar o modelo em termos de performance e não é só isso: te ajudarei a otimizá-lo!
Clique aquipara dominar o Power BI e se tornar um profissional valioso para o mercado de trabalho.
Como tratar performance?
Essa é uma questão muito comum: “Meu relatório está lento, o que pode ser?”
Primeira coisa para ser esclarecida é: está lento onde?
- No Power Query e na atualização dos dados
- No modelo de dados (PBIX está muito grande, acima de 500MB)
- Em medidas DAX
Na sua opinião, qual dessas opções é a mais crítica?
Pense sempre no usuário, e não em você que estão desenvolvendo.
O fato do Power Query estar lento muitas vezes só afeta o desenvolvimento.
A atualização dos dados você geralmente programa em um horário a noite e o usuário não vai sentir que está lento.

Regra de ouro
O Power BI tem que estar rápido para quem vai analisar, e não para você que está desenvolvendo!
Agora, vamos às dicas!
Dica #1
Importe apenas as tabelas e colunas realmente necessárias para análise!
É muito mais fácil você adicionar uma coluna quando solicitarem do que removê-la quando perceber que seu modelo está um monstrinho! É aquilo que falo sempre: comece pequeno e depois vá crescendo!
O principal inimigo da performance é a quantidade de colunas e a cardinalidade das colunas. Mas o que é Cardinalidade?
Cardinalidade
É a quantidade de valores distintos na sua tabela!
Para saber quais colunas e tabelas otimizar, você pode usar o VertiPaq Analyzer (que está dentro do DAX Studio). Ah, um spoiler: vou fazer uma live sobre o Tabular Editor em breve! Aguardem!
Existe uma ferramenta chamada: Business OPS que te ajudar a instalar essas e outras ferramentas que podem ser úteis também.
Assim que você realizar a instalação do DAX Studio e reiniciar o Power BI Desktop, verá a ferramenta em External Tools:

Remover essas colunas pesadas (e inúteis) resolverá 95% dos modelos de todo mundo!
Mostrei durante a live#40 um exemplo simples que pode te ajudar nisso! Verifique se em algum modelo seu, após instalar o DAX Studio, existe alguma tabela parecida com essas “LocalDataTable”:

Como tenho uma tabela dCalendario no meu modelo, o Power BI por trás cria uma “tabela” para cada coluna dessa tabela automaticamente.
Essas tabelas não servem pra nada no seu modelo e você pode removê-las sem causar problemas. Mas como fazer isso se você não “enxerga” essas tabelas no Power BI Desktop?
Simples! Vá em File → Options and Settings → Options → Current File → Data Load → Desabilite Auto date/time.

Volte no DAX Studio e verifique que as colunas sumiram de lá! Após isso, compare o tamanho do arquivo PBIX antes e após a remoção dessas tabelas!
Faça o mesmo para outras colunas que você não precisa. Para verificar as maiores colunas do seu modelo, vá em Advanced no DAX Studio, e depois clique em View Metrics.

Uma dica que sempre dou para meus alunos é para analisar se o modelo tem chave primária na tabela fato. Veja nosso exemplo: há uma coluna OnlineSalesKey na tabela fato FactOnlineSales. Tem um valor para cada linha da tabela (veja a coluna Cardinalidade)! Para que você precisa disso? Para nada, certo?! Então, pode removê-la sem dó!

Dica #2
Para que haja rapidez do seu lado, que desenvolve o modelo, você precisa de duas coisas:
- Uma máquina legal (acima de 8GB de memória e SSD);
- Importar apenas uma amostra dos dados durante o desenvolvimento, e não toda a base (filtrar linhas)
Complementar a isso, você precisa configurar Atualizações Incrementais, usando os parâmetros RangeStart e RangeEnd. Isso vai resolver dois problemas ao mesmo tempo:
- O desenvolvimento ficará mais rápido (já que está trabalhando com uma base menor) e
- As atualizações ficarão mais rápidas porque você estará atualizando apenas os dados mais recentes (e não toda a sua base)
Lembre-se: o Power BI Desktop é seu ambiente de desenvolvimento. JAMAIS importe todas as linhas para desenvolver, é um desperdício absurdo de recurso e uma perda de tempo gigante. A base precisa estar completa apenas no relatório publicado no serviço online.
Para saber tudo sobre atualização incremental, dá uma olhada no nosso artigo sobre o isso aqui: https://xperiun.com/blog/como-usar-corretamente-a-atualizacao-incremental-e-nao-cair-em-armadilhas/
Dica #3
Crie o modelo no esquema estrela sempre, com campos descritivos apenas nas dimensões (nome do produto, nome do cliente, etc).
Dica #4
Caso mesmo assim, após tudo isso, o modelo ainda estiver lento, você tem uma excelente alternativa e que pouco se fala. Sabe qual é?
Faça a seguinte pergunta:
Eu realmente preciso analisar tudo a nível de SKU, por CNPJ do cliente, por Dia, etc?
Se a resposta for não, opte por trabalhar com Agregações e Modelos Compostos (Import + DQ).
| Agregações e Modelos Compostos: NÃO exige capacidade Premium. |
A ideia principal é importar a Tabela Agregada e trazer a Tabela Detalhada no modo DirectQuery, criando um modelo composto e configurando as Agregações no Power BI Desktop!
Por que esse é um bom caminho? Porque obtemos o melhor dos dois mundos:
| Tabelas fato agregadas no modo Import | Rápido e tenho limite de tamanho |
| Tabelas fato detalhadas no modo DirectQuery | Lento e não tenho limite de tamanho |
| Tabelas dimensão | Utilizar no modo Dual (porque se conectam com ambas tabelas fato) |
O passo a passo completo está aqui: https://xperiun.com/blog/nao-use-directquery-otimize-o-modelo-use-agregacoes-e-modelos-compostos/
Dica #5
Você precisa ter alguns cuidados na hora de criar medidas DAX. Vou mostrar alguns erros mais comuns a seguir.
Usar medidas em funções iteradoras

Neste exemplo usamos a medida [TotalQuantity] dentro de uma função iteradora (SUMX). Lembra que os iteradores percorrem cada linha da tabela e realizam um cálculo em suas linhas para só depois realizar a agregação (por exemplo, uma soma)? Então, quando utilizamos uma medida no argumento da SUMX estamos fazendo uma transição de contexto! E isso pode fazer com que sua medida demore para ser exibida no relatório. No teste que fizemos durante a live, levou cerca de 2s para que a medida fosse totalmente exibida!
Dica
Sempre que possível tente trocar a medida por coluna nos argumentos das funções iteradoras
Usar tabelas inteiras em filtros
Vamos supor que você queira contar a quantidade de clientes que compraram mais de 5 unidades de qualquer produto.
Comparei as duas formas de fazer isso: uma utilizando a função filter e outra aplicando o filtro diretamente, veja:

Você pode melhorar muito a performance das suas medidas se utilizar a segunda opção, porque nesse caso o Power BI não precisará analisar todas as colunas da sua tabela para depois aplicar o filtro. Repare que quando utilizamos a função FILTER indicamos a tabela FactOnlineSales inteira no primeiro argumento.
Uma outra opção seria utilizar a função ALL na coluna específica do primeiro argumento da FILTER, veja:

Usar o All é interessante porque ele vai reduzir a quantidade de linhas distintas da tabela antes de aplicar o filtro, ou seja, vai reduzir a cardinalidade!
Bom, espero que tenha gostado do material! Se tiver alguma dúvida ou sugestão de tema para a próxima live, comente aqui embaixo!
Abraços,
Leonardo.
Continue por aqui
Dashboard de Compras e Logística
Dashboard de compras e logística no Power BI: da importação da base ao Power Query, tabelas fato e dimensão, modelagem e a tela final.
Como trabalhar com várias datas na tabela fato
Descubra como trabalhar com uma tabela fato com várias datas no Power BI.
Como montar a sua dCalendario no Power BI
Descubra agora um jeito eficiente de montar a sua dCalendario no Power BI.
MasterLive Dashboard de People Analytics (RH) do ZERO
Hoje vamos montar um dashboard de Recursos de humanos. Esse em especial, foi desenvolvido pelo Flávio Leopoldo durante um desafio proposto por mim aos alunos do Power BI Experience.



