Problema em Formatação Condicional de CrossTab

Prezados,

Estou utilizando uma consulta crosstab e tenho uma coluna que não está sendo disposta para visualização na minha query, chamada Flag (para testar).
Tenho um case que em determinada condição essa Flag recebe o valor 1 e um Else para 0, quando insiro uma formatação condicional em uma coluna de valores (que está sendo mostrada na crosstab) coloco uma imagem para quando o valor da Flag for 1 quando for 0, não recebe nada.
Não funciona neste caso, mas se eu por a imagem com a Flag = 0 funciona.
Entrei na query e mudei 1 para 5 e 0 para 3, mesma situação, quando a query me der Flag = 5 não vem imagem e quando fica igual 3 mostra a imagem.
Obs: Só consegui fazer aparecer a imagem quando utilizo como um campo auxiliar.

Se mudo para 1, não funciona nesta imagem acima.

Espero que tenha conseguido ser claro.

Att,
Gustavo

Olá @Gustavo!

O problema que você está enfrentando parece ser o mesmo deste outro tópico.

Supondo que estes sejam os seus dados:

Nr Frota Periodo Qtd Flag
0133 2021 10 0
0133 2021 12 1
0133 2020 6 1
0133 2019 2 0
0133 2019 1 0

Perceba que o Nro Frota 0133 no período de 2021 possui um registro com Flag 0 e outro com Flag 1.

Quando o CrossTab for agrupar esses dados, o resultado será este:

Período Qtd Flag
0133 2019 3 0
0133 2020 6 1
0133 2021 22 :thinking:

Nessa situação, não tem como saber se o CrossTab vai utilizar a Flag com valor 0 ou 1 no período de 2021. Ele vai utilizar o primeiro valor que encontrar durante a agregação de valores.

No seu caso, deve estar assumindo a Flag 0.

Bom dia Daniel,

Neste caso meu período é uma data, ele não chega a agrupar por ter apenas 1 registro por dia. Já fora tomado todo cuidado para mostrar 1 registro por data para evitar problemas.
Então para cada frota, existe apenas 1 data e 1 flag, não possuindo mais que isso, por isso cheguei a abrir o chamado.

Att,
Gustavo

Daniel,

Estava fazendo alguns testes e passando a flag por parâmetro na abertura de uma nova tela e realmente veio flag 0, porém se eu executar a query vem apenas 1 registro para aquela frota/data com flag 1.
Teu apontamento faz sentido mas não condiz com o resultado da query… Tem ideia do que possa ser?
Segue exemplo, nem distinct possui a query:

Att,
Gustavo

Bom dia @Gustavo

O que acontece, é que a coluna flag é um Campo Auxiliar do campo dtperiodo, ou seja, cada data diferente vai ter referência à apenas uma flag.

Vou tentar explicar de outra forma, usando o exemplo que dei anteriormente.

Nr Frota Periodo Qtd Flag
0133 2021 10 0
0133 2021 12 1
0133 2020 6 1
0133 2019 2 0
0133 2019 1 0

O CrossTab seria apresentado assim:

2019 2020 2021
0133 3 6 22

Agora, vamos imaginar onde estaria posicionado o valor da coluna flag:

2019 (0) 2020 (1) 2021 (0 ou 1?)
0133 3 6 22

Note que a flag estava relacionada ao Nr Frota no resultado da Query, mas no resultado final ela não está mais.

Agora, que os dados estão agrupados, vamos imaginar como seria processada a formatação condicional:

  • Para o ano de 2019, temos a quantidade 3, que será formatada usando a flag 0.

  • Para o ano de 2020, temos a quantidade 6, que será formatada usando a flag 1.

  • Para o ano de 2021, temos a quantidade 22, mas durante o agrupamento dos dados, foram encontrados dois valores de flags diferentes. Neste caso, pode ser que seja usado flag 0 ou 1.

    Em decorrência da complexidade do processamento realizado, não tem como garantir qual será o primeiro valor de flag a ser encontrado, pois fatores como a ordenação dos dados na origem e a ordenação dos dados no resultado final influenciam.

Em resumo, Campos Auxiliares servem para complementar a informação do campo ao qual eles estão referenciados. Por exemplo, se o campo de linha fosse o Nome do Cliente, poderia ter um campo auxiliar vinculado a ele que fosse o CNPJ ou o Id do mesmo. Esses campos auxiliares poderiam ser passados como parâmetro para uma janela configurada em um link ou usados nas Formatações Condicionais.

Para fazer a Formatação Condicional, você precisa imaginar o CrossTab em sua forma final, e usar nas condições apenas campos ancestrais àquele que você deseja formatar.

Daniel,

Entendi seu exemplo da primeira vez e continuo a não concordar pois você está atribuindo uma soma de valores em 1 período coisa que não acontece no meu caso, cada período (dia/mês/ano) tem um único registro não podendo ter uma flag 0 e 1 ao mesmo tempo.
Vejo como uma limitação do sistema ou problema na utilização do crosstab, pois sua explicação não entra no meu contexto, isso nunca existiu na minha query:
image

Não tem soma, não tem 2 registros diferentes que se juntam por ter uma única frota/período.

Para deixar isso claro, incluí a coluna flag para mostrar pedindo o valor mínimo e vem 1, não 0.
Pela sua explicação, entendo que se tivesse 0 ou 1, colocando para mostrar o valor mínimo, apareceria 0.
image

Att,
Gustavo

@Gustavo este processamento é difícil de explicar mesmo.

Não faz diferença se o registro com a chave Nro Frota + Periodo for único.

A flag está vinculada apenas ao Periodo.

Se você tiver dois Nro Frota diferentes na mesma Periodo, com Flags diferentes, apenas uma das Flags será utilizada.

image

Vou modificar o meu exemplo, usando apenas um Periodo e 4 NroFrota diferentes.

Nr Frota Periodo Qtd Flag
0133 2021 10 0
0134 2021 12 1
0135 2021 6 1
0136 2021 2 0

O CrossTab ficaria assim:

2021 (flag 0 ou 1?)
0133 10
0134 12
0135 6
0136 2

Os valores ancestrais que poderiam ser usados nas condições da formatação do campo Qtd são:

image

Qtd Valores Ancestrais
10 NrFrota=0133, Periodo=2021, Flag=???
12 NrFrota=0134, Periodo=2021, Flag=???
6 NrFrota=0135, Periodo=2021, Flag=???
2 NrFrota=0136, Periodo=2021, Flag=???

Daniel,

Acho que entendi, independente da frota, na ‘coluna’ 27/04 tem ambos valores e ele não consegue gerenciar, em resumo.

Qual solução para isso? Teria alguma?

Att,
Gustavo

Isso mesmo!

A única forma de testar a coluna Flag nas condições da Formatação Condicional seria adicionando ela como um campo de Dados do CrossTab, da mesma maneira que você fez para testar. Neste caso, o campo Flag não poderia ser ocultado.

Se você for usar essa abordagem, precisa estar utilizando o LATROMI Web v3.5.314 ou superior.

Daniel,

Entendi, neste caso vou trabalhar com valores negativos … no lugar de por 1 flag, quando fosse entrar na condição que colocaria a flag, eu vou fazer *-1 e ter ele negativo e tratar só os valores negativos para diferenciar do que é um VALOR e não um código de uma anomalia, neste exemplo citado.

Obrigado pela atenção.

Att,
Gustavo

1 curtida