quarta-feira, 13 de março de 2019

Curva ABC Segmentação Dinâmica com Power BI - DAX

A segmentação ABC apresentada no post anterior cria uma coluna calculada para representar o resultado da classe, o que permite a utilização dessa coluna como filtro ou como campo para apresentar em elementos gráficos. Esse é o lado bom, mas, uma coluna calculada precisa ser "calculada" em tempo de processamento do modelo e não em tempo de execução, a medida que o painel é filtrado. O problema relacionado a este padrão de implementação é o fato dele ser estático e não atualizar conforme os painéis são manipulados. Para desenvolver uma métrica dinâmica que respeite os filtros, necessariamente temos que criar medidas.

Vamos a um exemplo de como implementar a classificação ABC através de medidas.

1-Criar uma medida de RANK

Essa medida será usada para identificar os produtos que possuem valores maiores do que o produto atual.









2-Criar o acumulado das vendas até o Rank do produto atual

* para cada produto, a engine do dax cria uma tabela temporária em memória com todos os produtos com melhor rank e faz a agregação.


















3-Total geral dos produtos selecionados

Para identificar a proporção do percentual do total do valor agregado e obter a métrica para gerar a classificação ABC.










É importante dizer que a função ALLSELECT() garante que o filtro do contexto explicito do painel é considerado e a medida irá ser calculada considerando os filtros realizados pelo usuário.


4-Dividir o acumulado atual com o total geral de produtos para obter o percentual do total







5-Definir a classe com base no percentual




















Também é possível obter o mesmo resultado utilizando a função TOPN para obter o acumulado e extrair a classificação dele.












Essa medida cria uma tabela temporário com os produtos TOPN até o Rank atual do produto. Exemplo: se o rank do produto é 10 a função irá retornar uma tabela com os 10 primeiros que será usada pela CALCULATE para fazer a agregação.



Como o resultado das Classes é obtido por uma medida, podemos usar em uma matrix como no exemplo abaixo..



































Mas a princípio não é possível usar a medida em um gráfico. Uma alternativa interessante para apresentar um quantitativo agregado seria usar cards.

Para apresentar em cards temos que criar 3 novas medidas, uma para cada classe



Resultado Final






Vídeo:




7 comentários:

  1. Olá boa tarde tudo bem leandro ? Espero que sim!
    Sensacional esse seu post, eu estava procurando exatamente isso e ajudou demais.

    Agora estou tentando pegar esse resultado que deu na tabela e fazer 3 cartões, um A , outro B e por fim o C com o número de produtos que cada um representa.

    Qual seria a melhor maneira de fazer isso ?

    ResponderExcluir
    Respostas
    1. Bom dia, Adrinao, tudo bem, também estou tentando fazer os 3 cartões, um A , outro B e por fim o C com o número de produtos que cada um representa, você conseguiu fazer, se sim poderia nos dar a dica

      Excluir
    2. Acho que o uso de cards é adequado. Inclui no artigo um exemplo de como seria implementado

      Excluir
  2. Olá, Lenadro!

    Por gentileza, poderia encaminhar o arquivo utlizado para este post?

    Tentei fazer essa função mas sem sucesso.


    ResponderExcluir
  3. Bom Dia!

    Estou tentando fazer uma curva ABC Dinâmica quando o Usuário seleciona uma segmentação de Dados automaticamente gera novos valores já conseguir fazer isso na tabela mas quando chega no gráfico não consigo contas os itens que tiveram classificação ABC e valores

    ResponderExcluir
  4. Boa noite,
    Leandro,
    Ao tentar realizar a criação dos KPI com as quantidades das classificações A,B,C e esta apresentando essa mensagem:
    Error Message:
    MdxScript(Model) (28, 13) Erro de cálculo na medida 'Medidas'[ClasseA]: SummarizeColumns() e AddMissingItems() não podem ser usados nesse contexto.

    ResponderExcluir
  5. Bom dai Leandro Barbieri, primeiramente, Parabéns pelo trabalho! Utilizei seus códigos DAX para fazer Curva ABC aqui na empresa que eu trabalho. Funcionou muito bem, porém com a base reduzida, quando coloquei toda a base o Powerbi travou. Você teria alguma modificação ou outra estratégia de tratamento de dados para Estoques com mais de 20k ítens? Andei verificando, muitos têm o mesmo problema. Agradeço desde já.

    ResponderExcluir