5
respostas

Adicionar IF dentro de um CALCULATE no Power BI, qual a maneira correta?

Buenas!

Estou tentando adicionar uma condição dentro de um calculate, mas não estou conseguindo acertar a sintaxe disso, alguem pode ajudar por favor?

Meu objetivo é ativar o filtro dClientes[SITUACAO]="A" se pAtividade estiver ativo.

Minha fórmula é a seguinte:

SOMA IDADE = CALCULATE(sum(dClientes[IDADE]),
                                        if(ISFILTERED(pAtividade[Opção])="Ativo",dClientes[SITUACAO]="A"))
5 respostas

Oi, Lucas, tudo bem?

Obrigado por compartilhar a expressão que você está utilizando para realizar a condicional. Contudo, para que ela funcione adequadamente é necessário realizar algumas alterações.

A função IF espera três argumentos: a condição, o valor se a condição for verdadeira e o valor se a condição for falsa. A expressão ficaria assim:

SOMA IDADE = CALCULATE(
    SUM(dClientes[IDADE]),
    IF(
        ISFILTERED(pAtividade[Opção]) && VALUES(pAtividade[Opção]) = "Ativo",
        FILTER(dClientes, dClientes[SITUACAO] = "A"),
        ALL(dClientes)
    )
)

Nessa fórmula, utilizamos a função VALUES para obter o valor único selecionado na coluna pAtividade[Opção]. Em seguida, verificamos se esse valor é igual a "Ativo" e, se for, filtramos apenas os registros em que a coluna dClientes[SITUACAO] seja igual a "A". Caso contrário, utilizamos a função ALL para remover todos os filtros da tabela dClientes.

Lembre-se que para que tudo funcione adequadamente é necessário realizar alguns testes complementares e ajustar a fórmula para a realidade do seu projeto.

Caso queira saber mais informações sobre as funções mencionadas, recomendo a documentação abaixo que aborda para que cada uma é utilizada, além de trazer exemplos de como aplicá-las:

Espero ter ajudado. Caso tenha dúvidas, não hesite em postar no fórum!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Não funcionou, retornou esse erro. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi, Lucas, tudo bem?

Sinto muito que a expressão que te mandei não deu certo. Uma opção para contornar essa situação que pode ocorrer por utilizar o filtro em uma condição booleana, é criar uma expressão Dax que filtre automaticamente a situação dos clientes "A", sempre que pAtividade estiver "Ativo". Dessa forma, podemos usar a expressão:

SOMA IDADE = CALCULATE(SUM(dClientes[Idade]), 
    FILTER(pAtividade, pAtividade[Opção]="Ativo"), 
    FILTER(dClientes, dClientes[SITUACAO]="A")
)

Na expressão acima, aplicamos dois filtros simultaneamente, uma para definir os clientes ativos e outra para definir os clientes em situação "A". Como exemplo mostro abaixo o resultado obtido, utilizando a expressão acima:

Tabelas mostrando o resultado com a expressão e sem a expressão

Espero ter ajudado. Se precisar, estarei à disposição!

Abraços e bons estudos!

Então amigo, no meu caso, estou num terreno mais complexo. Tenho uma tabela sintética pAtividade só existe um registro chamado "Ativo", com objetivo de ser utilizado como um parâmetro. Quando a pAtividade[Opção] = "Ativo" quero habilitar uma condição dentro do CALCULATE. Em todos os testes que eu fiz, não foi possível colocar algum tipo de condição nesse método dentro do CALCULATE, não encontrei nada do tipo nem em fóruns gringos, talvez isso não seja possível. Então tive que partir para o plano B:

SOMA IDADE = IF(pAtividade[Opção] = "Ativo",
                                 CALCULATE(sum(dClientes[IDADE]), dClientes[SITUACAO]="A"),
                                 SUM(dClientes[IDADE]))

Mesmo assim, agradeço Rodrigo, pelo empenho na explicação, ajudou bastante para entender os conceitos. Abraço.

Oi, Lucas,

Sinto muito pela resposta anterior também não ter se adequado à realidade dos seus dados e tabelas. Contudo, fico feliz que seu plano alternativo tenha dado certo. Espero que tudo funcione corretamente e você consiga evoluir na construção do seu projeto.

Conte sempre com a comunidade do fórum quando precisar, estaremos aqui para ajudar!!

Abraços e bons estudos!