Ir para conteúdo
  • 1

Quiz BI300


Delfino Neto
Ir para solução Solucionado por Diogo Gonçalves ,

Pergunta

  • Alunos

Boa noite pessoal!

Esta questão surgiu em uma de nossas reuniões e resolvemos trazer para a comunidade...

A BI300 com o intuito de transmitir conhecimento de forma divertida, resolveu montar um desafio para a comunidade hardcore de Power BI. Montamos um pequeno case, bem simples por sinal, para testar até onde vai a base de DAX de vocês. Temos uma tabela de Sales no nosso modelo (que não será relevante para esse desafio) e outra tabela de Produtos com 16 produtos únicos e cada produto com uma cor única, contendo cores das mais variadas, indo do azul, vermelho, roxo até o amarelo. Para facilitar a visualização, criamos uma medida no DAX Studio chamada Sales[Qtd Cores] que nada mais é que uma contagem de linhas dessa tabela Produtos com o intuito de descobrir quantas cores distintas temos em nosso modelo.

[Qtd Cores] =
CALCULATE(
   COUNTROWS(
        VALUES(Product[Color])
   ),
VALUES(Product[Color])
)

Para dificultar ou para distrair os incautos, encapsulamos a Função COUNTROWS numa CALCULATE e colocamos no argumento de filtro da CALCULATE a VALUES(Product[Color]).

Depois disso, geramos uma tabela em contexto de linha mediante a ADDCOLUMNS e criamos duas colunas referente a duas medidas:
Coluna 1 CALCULATE e Coluna 2 [Medida]. A Coluna 1 CALCULATE é a transcrição do conteúdo da medida anteriormente criada Sales[Qtd Cores] e a Coluna 2 [Medida] é exatamente a referência da medida, conforme a figura abaixo:

 

1107271343_WhatsAppImage2021-09-14at16_01_24.thumb.jpeg.626a32b1e360560cbd7eb0afa71d9f6c.jpeg

 

Pergunta: Qual o motivo do resultado da Coluna 1 ser diferente da Coluna 2? Não são a mesma coisa e, por isso, não deveria retornar o mesmo resultado? Será que é um bug do Power BI?

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Minha vez, o problema é a transição de contexto por que as duas medidas podem parecer iguais à vista, mas na ADDCOLUMNS estão diferentes. 

Eu lembro que o prof. falou que em medidas sempre está embutido um CALCULATE que vai quebrar o contexto de linha para um de filtro. Então, o uso direto de "[MEDIDA]" é como se tivessemos dois CALCULATE. Assim:

[Qtd Cores] = CALCULATE ( 
    CALCULATE(COUNTROWS(VALUES(Product[Color])), VALUES(Product[Color]) )
    )

  • Like 2
Link para o comentário
Compartilhar em outros sites

  • 1
  • Alunos
15 minutos atrás, Diogo Gonçalves disse:

Minha vez, o problema é a transição de contexto por que as duas medidas podem parecer iguais à vista, mas na ADDCOLUMNS estão diferentes. 

Eu lembro que o prof. falou que em medidas sempre está embutido um CALCULATE que vai quebrar o contexto de linha para um de filtro. Então, o uso direto de "[MEDIDA]" é como se tivessemos dois CALCULATE. Assim:

[Qtd Cores] = CALCULATE ( 
    CALCULATE(COUNTROWS(VALUES(Product[Color])), VALUES(Product[Color]) )
    )

Diogo, meus parabéns. Exatamente isso. Aproveitando que você pegou o problema, sabe me dizer porque o fato de uma ter uma CALCULATE “a mais que a outra” muda o resultado?

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
21 minutos atrás, Anderson Silva disse:

Na coluna 1 ele trouxe todos os produtos da tabela sem considerar o contexto de filtro. Já a calculate ela evidenciou pelo contexto de filtro que cada produto possui uma cor específica para cada produto. 

As duas medidas/colunas são iguais; as duas medidas possuem CALCULATE e as duas fazem transição de contexto. Mas porque do comportamento diferente entre ambas?

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom...deixa eu arriscar....rsrsrs

Acredito ser por causa da ADDCOLUMNS que é uma função iteradora - contexto de linha. Ela aceita apenas medidas e/ou obrigatório o uso da CALCULATE, digamos que pura, sem filtros. Por isso, na primeira coluna "CALCULATE", está sendo aplicado um filtro com a VALUES na expressão, modificando assim o contexto de linha para filtros - o que não pode ser usado dentro da ADDCOLUMNS. Já na coluna "MEDIDA" não existe essa situação, mantendo assim o contexto de linha que a ADDCOLUMNS exige.

Por isso a diferença de comportamento entre as 2 expressões.

 

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
11 minutos atrás, Rodrigo R1 disse:

Bom...deixa eu arriscar....rsrsrs

Acredito ser por causa da ADDCOLUMNS que é uma função iteradora - contexto de linha. Ela aceita apenas medidas e/ou obrigatório o uso da CALCULATE, digamos que pura, sem filtros. Por isso, na primeira coluna "CALCULATE", está sendo aplicado um filtro com a VALUES na expressão, modificando assim o contexto de linha para filtros - o que não pode ser usado dentro da ADDCOLUMNS. Já na coluna "MEDIDA" não existe essa situação, mantendo assim o contexto de linha que a ADDCOLUMNS exige.

Por isso a diferença de comportamento entre as 2 expressões.

 

Grande Rodrigo R1 de MG, na verdade a ADDCOLUMNS aceita sim. Para ambas as situações, essa VALUES que está no filtro da CALCULATE será avaliada e seu filtro aplicado...

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
50 minutos atrás, Lucas Novais disse:

Quando se usa medidas dentro de funções iteradoras ocorre uma transição de contexto.

Usando a [MEDIDA], foi feito o calculo linha a linha enxergando apenas cada linha separadamente. Digitando a calculate, enxergou a tabela inteira.

 

Lucas, quando se usa medidas dentro de iteradores, ocorre sim a transição de contexto. Porém, quando se usa a CALCULATE, também, ocorre a transição de contexto, ou seja, em ambas acontece, porém de forma diferente...

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
2 horas atrás, Fred - DAX disse:

Diogo, meus parabéns. Exatamente isso. Aproveitando que você pegou o problema, sabe me dizer porque o fato de uma ter uma CALCULATE “a mais que a outra” muda o resultado?

Oi Fred, isso foi por experiência mesmo.

Não sei a fundo não, mas acho que a função [Qtd Cores], nessa situação, não enxerga a tabela criada no momento pela ADDCOLUMNS, mas sim a coluna Cor de Produto. Em um visual de tabela do PBI, a medida daria o resultado 1 a todos normalmente pelo contexto de avaliação. Aqui, como não temos, ele precisa de outro CALCULATE para transformar este contexto de linha a fim de dividir o valor total pela tabela em questão.

 

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...