Ir para conteúdo
  • 0

MELHORAR MEDIDA PELO CONTEXTO


FrancoAndre
Ir para solução Solucionado por Bruno Abdalla de Souza ,

Pergunta

  • Alunos

Olá à todos!

Senhores, estou com dificuldades de fazer manutenção nessa medida por ser bem complexa. A matriz é uma divisão de meses por Anos Anteriores e Ano Atual, onde o Ano Atual é o ano máximo do contexto e o Anos Anteriores é tudo anterior ao ano máximo. 

Seria retirar os valores onde no contexto total é R$ 0,00 e deixa em branco ou BLANK( ).

Na visão por coluna alguns meses estão informando 0 quando o ano do contexto está sem filtro, o correto deveria ser semelhante a quando selecionamos o ano 2024. 

Algumas contas, exemplo 00931 - CUSTOS GESTOR90 informa valores R$ 0,00, porém no total geral informa que há valores negativos quando não há filtros de ano selecionados. Quando selecionamos somente 2023 conseguimos visualizar os valores e dessa forma também deveria aparece quando a matriz não estivesse com filtros selecionado.

Screenshot_2.png.f0588b2eedec8fef54afe78c150f843e.png

 

A medida é a Anos Dinamico e está um pouco extenso para informar aqui, mas deixarei o pbix em anexo para quem puder ajudar.

 

Ajuda Matriz com 0.pbix

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Para resolver os problemas, foram necessários os seguintes ajustes:

1) Meses com zero, mesmo com total geral parecendo ser zero ==> na verdade o total geral neste caso apresentava uma valor quase zero, com número na écima casa decimal. Para isso, colocou-se na lógica que o valor absoluto do total geral deve ser menor ou igual a 0,001. Como na DRE nao vai ter decimais menores que 1 centavo, então este problema se elimina.

2) Meses com valores diferentes de zero, mas que na soma geral é zero ==> Nesse caso, foi necessário iterar para cada mês (sejam nos anos anteriores ou no ano atual) e verificar se a soma do valor absoluto é diferente de zero. Se sim, a linha deve ser mantida. Caso contrário, a linha deve assumir valor vazio para não aparecer.

3) Para aparecer zero ao invés de blank nas linhas que se mantiveram, foi necessário usar COALESCE na variável vContextoAnos. Nesta variável tb foi corrigida uma pequena lógica de aparecer somente valores para meses menores ou iguais ao valor do mês atual (que pode ser 12 se o ano atual for diferente de 2024 e outro mês se for 2024).

Creio que foram essas as correções. Segue a medida final.

MEDIDA TESTE = 
VAR vMesContexto = MAX(dCalendario[Mês]) 
VAR vAnoAtual = 
CALCULATE(
    YEAR(MAX(fLancamento[DataConjunto])),
    FILTER(
        ALLSELECTED(fLancamento),
        [Realizado]
    )
)
VAR vMesAtual = 
CALCULATE(
    MONTH(MAX(fLancamento[DataConjunto])),
    FILTER(
        ALLSELECTED(fLancamento),
        [Realizado]
    )
)
VAR vRealizadoAnosAnteriores = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] < vAnoAtual,
    dCalendario[Mês] <= vMesAtual
)
VAR vRealizadoAnoAtual = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] = vAnoAtual,
    dCalendario[Mês] <= vMesAtual
)
VAR vContextoAnos = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, IF(ISINSCOPE(dCalendario[MesReduzido]) && vMesContexto > vMesAtual , BLANK(), COALESCE(vRealizadoAnosAnteriores, 0)),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 2, COALESCE(vRealizadoAnoAtual, 0),
    NOT(ISINSCOPE(auxAnosAnteriores[Id])), COALESCE(vRealizadoAnoAtual + vRealizadoAnosAnteriores, 0) //resolve o problema da coluna total com a soma de anos anteriores e atual
)
VAR vContexto = [Contexto]
VAR vSubTotal = SELECTEDVALUE(dPlanoContas[Subtotal])
VAR N2 = SELECTEDVALUE(dPlanoContas[N2_UNIF])
VAR N3 = SELECTEDVALUE(dPlanoContas[N3_UNIF])
VAR vBlankN4 = ISBLANK(SELECTEDVALUE(dPlanoContas[N4_UNIF]))
VAR vBlankN3 = ISBLANK(SELECTEDVALUE(dPlanoContas[N3_UNIF]))
VAR vBlankN2 = ISBLANK(SELECTEDVALUE(dPlanoContas[N2_UNIF]))
VAR vTotalReal = 
CALCULATE(
    [Realizado], 
    FILTER(
        ALL(dCalendario), 
        dCalendario[Mês] <= vMesAtual
    ),
    VALUES(dCalendario[MesReduzido])
)
VAR vCheckSomaValorAbsolutoMesesAnosAnteriores = 
SUMX(
    FILTER(
        ALL(dCalendario[Mês], dCalendario[MesReduzido]),
        dCalendario[Mês] <= vMesAtual
    ),
    CALCULATE(
        ABS([Realizado]),
        dCalendario[Ano] < vAnoAtual
    )
)
VAR vCheckSomaValorAbsolutoMesesAnosAtual = 
SUMX(
    FILTER(
        ALL(dCalendario[Mês], dCalendario[MesReduzido]),
        dCalendario[Mês] <= vMesAtual
    ),
    CALCULATE(
        ABS([Realizado]),
        dCalendario[Ano] = vAnoAtual
    )
)
VAR vOcultarMeses = ISFILTERED(dCalendario[Ano]) = FALSE() && SELECTEDVALUE(dCalendario[Mês]) > vMesAtual //resolve o problema quando não há filtro de ano selecionado e os meses após o contexto do mês atual ficam exibindo 0
VAR vCondicao = 
SWITCH(
    TRUE(),
    vCheckSomaValorAbsolutoMesesAnosAnteriores < 0.001 && vCheckSomaValorAbsolutoMesesAnosAtual < 0.001, BLANK(),
    vContexto = "3" && vBlankN3 = TRUE() && vBlankN4 = TRUE() && vBlankN2 = FALSE(), BLANK(),
    vSubTotal = 1 && vContexto = "1" && vOcultarMeses = TRUE(), BLANK(),
    vSubTotal = 1 && vContexto = "1" && vOcultarMeses = FALSE(), COALESCE(vContextoAnos, 0),
    vSubTotal = 0 && vContexto = "4", BLANK(),
    vContexto && vSubTotal = 1, BLANK(),
    vSubTotal = 1 && (ISBLANK(N2) || ISBLANK(N3)), BLANK(),
    vSubTotal = 0 && vOcultarMeses = TRUE(), BLANK(),
    vSubTotal = 0 && vOcultarMeses = FALSE(), COALESCE(vContextoAnos, 0)
)
RETURN
vCondicao

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
21 horas atrás, Bruno Abdalla de Souza disse:

@André Franco, a medida é complexa. O ideal seria vc colocar quais são as regras envolvidas. Este trabalho de debugar sua medida, que parece ser complexa, leva muito tempo.
Para que possa te ajudar mais, preciso das regras envolvidas nos cálculos desta matriz.

Bruno, as primeiras etapas da medida faz uma divisão do que é mês anterior e atual sendo que mês atual é o ano máximo do contexto e anos anteriores é tudo anterior ao ano máximo. Na tabela auxAnosAnteriores o [Id] 1 é Anos Anteriores e 2 Ano Atual. A primeira condição da SWITCH deixa equivalente os meses com valores baseado no ano atual, ou seja, se estamos em julho de 2024 no Ano Atual nos Anos Anteriores deve ter valores até julho, isso considerando quando não há filtro de ano selecionado. Já o restante dos argumentos da switch é auto explicativo:

image.png.8e08e65703605f940610ed9b7f0952cf.png

 
Já nas outras etapas da medida é para corrigir o problema de níveis de contas da hierarquia da matriz que estão em branco, como o exemplo abaixo:

image.png.d071b811172a201aa4558346bce68192.png

image.png.8ee642271149ccbba7a15a1b022ed884.png

 

Porém, como exemplifiquei no início do post, ainda aparece contas em branco.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@FrancoAndre, veja se assim está correto.

Anos Dinamico = 
VAR vAnoAtual = 
CALCULATE(
    YEAR(MAX(fLancamento[DataConjunto])),
    FILTER(
        ALLSELECTED(fLancamento),
        [Realizado]
    )
)
VAR vValoresAnoAtual = 
CALCULATE(
    [Realizado],
    YEAR(fLancamento[DataConjunto]) = vAnoAtual
)

VAR vRealizadoAnosAnteriores = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] < vAnoAtual
)
VAR vRealizadoAnoAtual = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] = vAnoAtual
)
VAR vContextoAnos = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, IF(ISBLANK(vValoresAnoAtual), BLANK(),COALESCE(vRealizadoAnosAnteriores,0)), 
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, vRealizadoAnosAnteriores,
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 2, vRealizadoAnoAtual,
    NOT(ISINSCOPE(auxAnosAnteriores[Id])), [Realizado] //resolve o problema da coluna total com a soma de anos anteriores e atual
)
VAR vContexto = [Contexto]
VAR vSubTotal = SELECTEDVALUE(dPlanoContas[Subtotal])
VAR N2 = SELECTEDVALUE(dPlanoContas[N2_UNIF])
VAR N3 = SELECTEDVALUE(dPlanoContas[N3_UNIF])
VAR vTotalPlan = CALCULATE([Planejado], ALL(dCalendario))
VAR vTotalReal = CALCULATE([Realizado], ALL(dCalendario))
VAR vCondicao = 
SWITCH(
    TRUE,
    vTotalPlan < 0.001 && vTotalReal < 0.001, BLANK(),
    vSubTotal = 1 && vContexto = "1", COALESCE(vContextoAnos, 0),
    vSubTotal = 0 && vContexto = "4", BLANK(),
    vContexto && vSubTotal = 1, BLANK(),
    vSubTotal = 1 && (ISBLANK(N2) || ISBLANK(N3)), BLANK(),
    vSubTotal = 0, COALESCE(vContextoAnos, 0)
)
RETURN
vCondicao

 

20240715_Ajuda Matriz com 0.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 15/07/2024 em 14:14, Bruno Abdalla de Souza disse:

@FrancoAndre, veja se assim está correto.

Anos Dinamico = 
VAR vAnoAtual = 
CALCULATE(
    YEAR(MAX(fLancamento[DataConjunto])),
    FILTER(
        ALLSELECTED(fLancamento),
        [Realizado]
    )
)
VAR vValoresAnoAtual = 
CALCULATE(
    [Realizado],
    YEAR(fLancamento[DataConjunto]) = vAnoAtual
)

VAR vRealizadoAnosAnteriores = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] < vAnoAtual
)
VAR vRealizadoAnoAtual = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] = vAnoAtual
)
VAR vContextoAnos = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, IF(ISBLANK(vValoresAnoAtual), BLANK(),COALESCE(vRealizadoAnosAnteriores,0)), 
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, vRealizadoAnosAnteriores,
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 2, vRealizadoAnoAtual,
    NOT(ISINSCOPE(auxAnosAnteriores[Id])), [Realizado] //resolve o problema da coluna total com a soma de anos anteriores e atual
)
VAR vContexto = [Contexto]
VAR vSubTotal = SELECTEDVALUE(dPlanoContas[Subtotal])
VAR N2 = SELECTEDVALUE(dPlanoContas[N2_UNIF])
VAR N3 = SELECTEDVALUE(dPlanoContas[N3_UNIF])
VAR vTotalPlan = CALCULATE([Planejado], ALL(dCalendario))
VAR vTotalReal = CALCULATE([Realizado], ALL(dCalendario))
VAR vCondicao = 
SWITCH(
    TRUE,
    vTotalPlan < 0.001 && vTotalReal < 0.001, BLANK(),
    vSubTotal = 1 && vContexto = "1", COALESCE(vContextoAnos, 0),
    vSubTotal = 0 && vContexto = "4", BLANK(),
    vContexto && vSubTotal = 1, BLANK(),
    vSubTotal = 1 && (ISBLANK(N2) || ISBLANK(N3)), BLANK(),
    vSubTotal = 0, COALESCE(vContextoAnos, 0)
)
RETURN
vCondicao

 

20240715_Ajuda Matriz com 0.pbix 2.5 MB · 1 download

Bruno, não seria dessa forma. 
Iniciei várias tentativa para descrever da melhor forma o que pretendo com a medida, mas como seria muito informação preferi fazer um vídeo pra explicar. No link abaixo demostrei o que pretendo com a medida, algumas mudanças que fiz tentando resolver o problema e detalhei melhor o processo de criação da medida.

https://drive.google.com/file/d/1EJRlLK0NVGa799CiCLAGQmWoOdTH9vLb/view?usp=sharing

Upei novamente o arquivo com as alterações que fiz durante o vídeo.

Agradeço mais uma vez imensamente a sua disposição.

Ajuda Matriz com 0.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Se você filtrar 2022, por exemplo, este seria o "ano atual" e os anos anteriores seria todos os anos anteriores a 2022?

R: Exatamente

Se você filtrar 2024 e 2021, o ano atual será 2024 e os anos anteriores será 2021?

R: Exatamente

O ideal seria colocar o ano com seleção única, porém foi orientado a necessidade de selecionar mais de um ano

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@FrancoAndre, veja se é isso:

Anos Dinamico = 
VAR vAnoAtual = 
CALCULATE(
    MAX(dCalendario[Ano]),
    ALLSELECTED(dCalendario)
)
VAR vMesAtual = 
CALCULATE(
    MAX(dCalendario[Mês]),
    FILTER(
        ALLSELECTED(dCalendario),
        dCalendario[Ano] = vAnoAtual &&
        [Realizado] > 0
    )
)
VAR vValoresAnoAtual = 
CALCULATE(
    [Realizado],
    YEAR(fLancamento[DataConjunto]) = vAnoAtual
)
VAR vAnosAnteriores = 
    CALCULATETABLE(
        VALUES(dCalendario[Ano]),
        dCalendario[Ano] < vAnoAtual
    )
VAR vRealizadoAnosAnteriores = 
CALCULATE(
    [Realizado],
    FILTER(
        ALL(dCalendario),
        dCalendario[Ano] < vAnoAtual &&
        dCalendario[MesReduzido] IN VALUES(dCalendario[MesReduzido])
    )
)
VAR vRealizadoAnoAtual = 
CALCULATE(
    [Realizado],
    FILTER(
        ALL(dCalendario),
        dCalendario[Ano] = vAnoAtual &&
        dCalendario[MesReduzido] IN VALUES(dCalendario[MesReduzido])
    )
)
VAR vContextoAnos = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, vRealizadoAnosAnteriores,
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 2, [Realizado],
    vRealizadoAnoAtual + vRealizadoAnosAnteriores
)
VAR vContexto = [Contexto]
VAR vSubTotal = SELECTEDVALUE(dPlanoContas[Subtotal])
VAR N2 = SELECTEDVALUE(dPlanoContas[N2_UNIF])
VAR N3 = SELECTEDVALUE(dPlanoContas[N3_UNIF])
VAR vTotalReal = 
    CALCULATE(
        [Realizado], 
        ALLSELECTED(dCalendario[Ano])
    )
VAR vCondicao = 
SWITCH(
    TRUE(),
    vTotalReal = 0, BLANK(),
    vSubTotal = 0 && vContexto = "4", BLANK(),
    vContexto && vSubTotal = 1, BLANK(),
    vSubTotal = 1 && (ISBLANK(N2) || ISBLANK(N3)), BLANK(),
    vSubTotal = 1 && vContexto = "1" || vSubTotal = 0, COALESCE(vContextoAnos, 0)
)
RETURN
vCondicao

 

20240717_Ajuda Matriz com 0.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 18/07/2024 em 10:30, Bruno Abdalla de Souza disse:

@FrancoAndre, veja se é isso:

Anos Dinamico = 
VAR vAnoAtual = 
CALCULATE(
    MAX(dCalendario[Ano]),
    ALLSELECTED(dCalendario)
)
VAR vMesAtual = 
CALCULATE(
    MAX(dCalendario[Mês]),
    FILTER(
        ALLSELECTED(dCalendario),
        dCalendario[Ano] = vAnoAtual &&
        [Realizado] > 0
    )
)
VAR vValoresAnoAtual = 
CALCULATE(
    [Realizado],
    YEAR(fLancamento[DataConjunto]) = vAnoAtual
)
VAR vAnosAnteriores = 
    CALCULATETABLE(
        VALUES(dCalendario[Ano]),
        dCalendario[Ano] < vAnoAtual
    )
VAR vRealizadoAnosAnteriores = 
CALCULATE(
    [Realizado],
    FILTER(
        ALL(dCalendario),
        dCalendario[Ano] < vAnoAtual &&
        dCalendario[MesReduzido] IN VALUES(dCalendario[MesReduzido])
    )
)
VAR vRealizadoAnoAtual = 
CALCULATE(
    [Realizado],
    FILTER(
        ALL(dCalendario),
        dCalendario[Ano] = vAnoAtual &&
        dCalendario[MesReduzido] IN VALUES(dCalendario[MesReduzido])
    )
)
VAR vContextoAnos = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, vRealizadoAnosAnteriores,
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 2, [Realizado],
    vRealizadoAnoAtual + vRealizadoAnosAnteriores
)
VAR vContexto = [Contexto]
VAR vSubTotal = SELECTEDVALUE(dPlanoContas[Subtotal])
VAR N2 = SELECTEDVALUE(dPlanoContas[N2_UNIF])
VAR N3 = SELECTEDVALUE(dPlanoContas[N3_UNIF])
VAR vTotalReal = 
    CALCULATE(
        [Realizado], 
        ALLSELECTED(dCalendario[Ano])
    )
VAR vCondicao = 
SWITCH(
    TRUE(),
    vTotalReal = 0, BLANK(),
    vSubTotal = 0 && vContexto = "4", BLANK(),
    vContexto && vSubTotal = 1, BLANK(),
    vSubTotal = 1 && (ISBLANK(N2) || ISBLANK(N3)), BLANK(),
    vSubTotal = 1 && vContexto = "1" || vSubTotal = 0, COALESCE(vContextoAnos, 0)
)
RETURN
vCondicao

 

20240717_Ajuda Matriz com 0.pbix 2.5 MB · 1 download

Bruno, alguns pontos não estão validos:
- quando estou no contexto sem nenhum filtro de ano selecionado, a matriz exibe valores até dezembro. O correto seria exibir valores até o mês atual, que é julho. Isso deve ser aplicado tanto para anos anteriores quanto para o ano atual. A soma total do contexto Anos Anteriores e Ano Atual devem respeitar esse intervalo, como também a soma total;
- há células da matriz em branco. O correto seria exibir zero quando houver valor no contexto horizontal ou vertical;

- há níveis com a descrição em branco, exemplo conta 00931 - CUSTOS GESTOR90. O correto não deveria ser exibido.

 

Consegui resolver os problemas dos pontos citados acima da sua medida. Porém, existem outros problemas que não consegui resolver:
- categorias de contas exibindo zero em todos os contexto de Anos Anteriores, Ano Atual e Total isso quando estamos no contexto de nenhum filtro de ano selecionado, exemplo 09090 - RECEITA BRUTA GESTOR90. Essa conta possui somente valores realizado em dezembro dos anos 2014 a 2021, o correto seria exibir essa conta somente quando um ano que já possui valores realizados até mês de dezembro fosse selecionado, no caso, qualquer ano que não fosse 2024.

image.png.cc42b34e74dba1e440317f812c83d981.png


- categorias de contas que possuem valores que o total da soma é zero. O correto deveria não exibir essas categorias, que por mais exista valores o total sempre será zero o que não influencia em nada na análise da matriz.

image.png.bffe69f446b77000487771e2c0102f16.png

image.png.28a101d1ae1744561b042dd4dd15f0da.png

 

Bom, Bruno, agradeço mais uma vez a sua atenção e espero que os pontos que citei possa ajudar em algo. 
Irei anexar novamente o pbix com as mudanças que fiz.

image.png

image.png

image.png

Ajuda Matriz com 0 Explicado.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 18/07/2024 em 10:30, Bruno Abdalla de Souza disse:

@FrancoAndre, veja se é isso:

Anos Dinamico = 
VAR vAnoAtual = 
CALCULATE(
    MAX(dCalendario[Ano]),
    ALLSELECTED(dCalendario)
)
VAR vMesAtual = 
CALCULATE(
    MAX(dCalendario[Mês]),
    FILTER(
        ALLSELECTED(dCalendario),
        dCalendario[Ano] = vAnoAtual &&
        [Realizado] > 0
    )
)
VAR vValoresAnoAtual = 
CALCULATE(
    [Realizado],
    YEAR(fLancamento[DataConjunto]) = vAnoAtual
)
VAR vAnosAnteriores = 
    CALCULATETABLE(
        VALUES(dCalendario[Ano]),
        dCalendario[Ano] < vAnoAtual
    )
VAR vRealizadoAnosAnteriores = 
CALCULATE(
    [Realizado],
    FILTER(
        ALL(dCalendario),
        dCalendario[Ano] < vAnoAtual &&
        dCalendario[MesReduzido] IN VALUES(dCalendario[MesReduzido])
    )
)
VAR vRealizadoAnoAtual = 
CALCULATE(
    [Realizado],
    FILTER(
        ALL(dCalendario),
        dCalendario[Ano] = vAnoAtual &&
        dCalendario[MesReduzido] IN VALUES(dCalendario[MesReduzido])
    )
)
VAR vContextoAnos = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, vRealizadoAnosAnteriores,
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 2, [Realizado],
    vRealizadoAnoAtual + vRealizadoAnosAnteriores
)
VAR vContexto = [Contexto]
VAR vSubTotal = SELECTEDVALUE(dPlanoContas[Subtotal])
VAR N2 = SELECTEDVALUE(dPlanoContas[N2_UNIF])
VAR N3 = SELECTEDVALUE(dPlanoContas[N3_UNIF])
VAR vTotalReal = 
    CALCULATE(
        [Realizado], 
        ALLSELECTED(dCalendario[Ano])
    )
VAR vCondicao = 
SWITCH(
    TRUE(),
    vTotalReal = 0, BLANK(),
    vSubTotal = 0 && vContexto = "4", BLANK(),
    vContexto && vSubTotal = 1, BLANK(),
    vSubTotal = 1 && (ISBLANK(N2) || ISBLANK(N3)), BLANK(),
    vSubTotal = 1 && vContexto = "1" || vSubTotal = 0, COALESCE(vContextoAnos, 0)
)
RETURN
vCondicao

 

20240717_Ajuda Matriz com 0.pbix 2.5 MB · 1 download

Bruno, vou tentar resumir melhor o que está acontecendo.


Em destaque na imagem abaixo a conta 09991 - DEDUCOES GESTOR90 está exibindo zero no total geral e é esse problema que está pendente pra resolver por completo o caso.

image.png.2cb81b725c9972e660285f7a4bfd73e7.png

Quando filtro somente esse código o total geral é diferente e percebemos que há valores após o contexto do MesAtual, no caso Dezembro:

image.png.0c9f8b51d40a7b29498b9ccb6c7e2cbf.png

 

Em resumo, para algumas contas, quando há valores após o contexto do MesAtual, o total geral vai exibir zero sendo que o correto seria não exibir. Preciso um ajuste no código para tratar esse ponto, já fiz bastante testes porém não consegui chegar no resultado esperado.

Mais uma vez se puder ajudar agradeço o seu apoio.

Ajuda Matriz com 0 Explicado.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
12 horas atrás, Bruno Abdalla de Souza disse:

Para resolver os problemas, foram necessários os seguintes ajustes:

1) Meses com zero, mesmo com total geral parecendo ser zero ==> na verdade o total geral neste caso apresentava uma valor quase zero, com número na écima casa decimal. Para isso, colocou-se na lógica que o valor absoluto do total geral deve ser menor ou igual a 0,001. Como na DRE nao vai ter decimais menores que 1 centavo, então este problema se elimina.

2) Meses com valores diferentes de zero, mas que na soma geral é zero ==> Nesse caso, foi necessário iterar para cada mês (sejam nos anos anteriores ou no ano atual) e verificar se a soma do valor absoluto é diferente de zero. Se sim, a linha deve ser mantida. Caso contrário, a linha deve assumir valor vazio para não aparecer.

3) Para aparecer zero ao invés de blank nas linhas que se mantiveram, foi necessário usar COALESCE na variável vContextoAnos. Nesta variável tb foi corrigida uma pequena lógica de aparecer somente valores para meses menores ou iguais ao valor do mês atual (que pode ser 12 se o ano atual for diferente de 2024 e outro mês se for 2024).

Creio que foram essas as correções. Segue a medida final.

MEDIDA TESTE = 
VAR vMesContexto = MAX(dCalendario[Mês]) 
VAR vAnoAtual = 
CALCULATE(
    YEAR(MAX(fLancamento[DataConjunto])),
    FILTER(
        ALLSELECTED(fLancamento),
        [Realizado]
    )
)
VAR vMesAtual = 
CALCULATE(
    MONTH(MAX(fLancamento[DataConjunto])),
    FILTER(
        ALLSELECTED(fLancamento),
        [Realizado]
    )
)
VAR vRealizadoAnosAnteriores = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] < vAnoAtual,
    dCalendario[Mês] <= vMesAtual
)
VAR vRealizadoAnoAtual = 
CALCULATE(
    [Realizado],
    dCalendario[Ano] = vAnoAtual,
    dCalendario[Mês] <= vMesAtual
)
VAR vContextoAnos = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 1, IF(ISINSCOPE(dCalendario[MesReduzido]) && vMesContexto > vMesAtual , BLANK(), COALESCE(vRealizadoAnosAnteriores, 0)),
    SELECTEDVALUE(auxAnosAnteriores[Id]) = 2, COALESCE(vRealizadoAnoAtual, 0),
    NOT(ISINSCOPE(auxAnosAnteriores[Id])), COALESCE(vRealizadoAnoAtual + vRealizadoAnosAnteriores, 0) //resolve o problema da coluna total com a soma de anos anteriores e atual
)
VAR vContexto = [Contexto]
VAR vSubTotal = SELECTEDVALUE(dPlanoContas[Subtotal])
VAR N2 = SELECTEDVALUE(dPlanoContas[N2_UNIF])
VAR N3 = SELECTEDVALUE(dPlanoContas[N3_UNIF])
VAR vBlankN4 = ISBLANK(SELECTEDVALUE(dPlanoContas[N4_UNIF]))
VAR vBlankN3 = ISBLANK(SELECTEDVALUE(dPlanoContas[N3_UNIF]))
VAR vBlankN2 = ISBLANK(SELECTEDVALUE(dPlanoContas[N2_UNIF]))
VAR vTotalReal = 
CALCULATE(
    [Realizado], 
    FILTER(
        ALL(dCalendario), 
        dCalendario[Mês] <= vMesAtual
    ),
    VALUES(dCalendario[MesReduzido])
)
VAR vCheckSomaValorAbsolutoMesesAnosAnteriores = 
SUMX(
    FILTER(
        ALL(dCalendario[Mês], dCalendario[MesReduzido]),
        dCalendario[Mês] <= vMesAtual
    ),
    CALCULATE(
        ABS([Realizado]),
        dCalendario[Ano] < vAnoAtual
    )
)
VAR vCheckSomaValorAbsolutoMesesAnosAtual = 
SUMX(
    FILTER(
        ALL(dCalendario[Mês], dCalendario[MesReduzido]),
        dCalendario[Mês] <= vMesAtual
    ),
    CALCULATE(
        ABS([Realizado]),
        dCalendario[Ano] = vAnoAtual
    )
)
VAR vOcultarMeses = ISFILTERED(dCalendario[Ano]) = FALSE() && SELECTEDVALUE(dCalendario[Mês]) > vMesAtual //resolve o problema quando não há filtro de ano selecionado e os meses após o contexto do mês atual ficam exibindo 0
VAR vCondicao = 
SWITCH(
    TRUE(),
    vCheckSomaValorAbsolutoMesesAnosAnteriores < 0.001 && vCheckSomaValorAbsolutoMesesAnosAtual < 0.001, BLANK(),
    vContexto = "3" && vBlankN3 = TRUE() && vBlankN4 = TRUE() && vBlankN2 = FALSE(), BLANK(),
    vSubTotal = 1 && vContexto = "1" && vOcultarMeses = TRUE(), BLANK(),
    vSubTotal = 1 && vContexto = "1" && vOcultarMeses = FALSE(), COALESCE(vContextoAnos, 0),
    vSubTotal = 0 && vContexto = "4", BLANK(),
    vContexto && vSubTotal = 1, BLANK(),
    vSubTotal = 1 && (ISBLANK(N2) || ISBLANK(N3)), BLANK(),
    vSubTotal = 0 && vOcultarMeses = TRUE(), BLANK(),
    vSubTotal = 0 && vOcultarMeses = FALSE(), COALESCE(vContextoAnos, 0)
)
RETURN
vCondicao

 

Perfeito, Bruno! Deu certo a medida, agradeço o apoio.

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