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