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

Leonardo Karpinski

Leonardo Karpinski

Mestre do Power BI, criador do Curso Express de Power BI e Curso Completo de Power BI. Formou mais de 16 mil alunos nos últimos anos e participou de projetos em grandes empresas nacionais e multinacionais.

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!

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?

  1. No Power Query e na atualização dos dados
  2. No modelo de dados (PBIX está muito grande, acima de 500MB)
  3. 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:

Figura 1: 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”:

Figura 2: Tabelas de Data automáticas geradas pelo Power BI

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.

Figura 3: Desabilitando 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.

Figura 4: Identificando colunas pesadas no modelo

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ó!

Figura 5: Chave primária em tabela fato serve para nada

Dica #2

Para que haja rapidez do seu lado, que desenvolve o modelo, você precisa de duas coisas:

  1. Uma máquina legal (acima de 8GB de memória e SSD);
  2. 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://powerbiexperience.com/pt/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 ImportRápido e tenho limite de tamanho
Tabelas fato detalhadas no modo DirectQueryLento e não tenho limite de tamanho
Tabelas dimensãoUtilizar no modo Dual (porque se conectam com ambas tabelas fato)

O passo a passo completo está aqui: https://powerbiexperience.com/pt/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

Figura 6: Exemplo de Medida no Iterador SUMX

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:

Figura 7: Formas de filtrar uma tabela

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:

Figura 8: FILTER + ALL

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.

Compartilhe este post:
Compartilhar no facebook
Compartilhar no linkedin
Compartilhar no twitter
Compartilhar no pinterest