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 aqui para 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.