none
Problema Filtro - Opção "Selecionar Tudo" RRS feed

  • Pergunta

  • Pessoal,

    Possuo um relatório que tem um filtro "Multiple Values". Ao selecionar a opção "(Selecionar Tudo)", alguns registros não são selecionados.

    Pelo que pude entender, o filtro do relatório não seleciona "registros repetidos". Neste caso, ele "marca" o primeiro valor repetido que é retornado no filtro e "desmarca" o segundo valor repetido.

    Para entender melhor, vejam a imagem abaixo:

    Imagem 01

    Notem que os valores "01.01" e "1.01" (destacados em amarelo) estão repetidos no filtro. Os dois primeiros valores retornados foram selecionados "automaticamente" pelo filtro e as próximas repetições foram desmarcadas também de forma "automática" pelo filtro.

    Vale lembrar que a Consulta SQL utilizada para retornar os valores do filtro não está errada. Fazendo uma analogia, imagine um Relatório que possui dois filtros:

    1) Filtro por País (todos os países do mundo);

    2) Filtro por Estado;

    - A tabela "País" possui dois campos: CODPAIS e NOMEPAIS;

    - A tabela Estado possui três campos: CODPAIS, CODESTADO e NOMEESTADO;

    Ou seja, o "Código do Estado" pode se repetir para países distintos e se quiséssemos filtrar "todos os estados" de "todos os países" o RS desmarcaria os estados com códigos repetidos (deixaria marcada apenas a primeira incidência no filtro).

    Sabem me dizer se isso é de fato um problema do RS e se existe alguma solução para contornar isso?

    Obrigado!

    segunda-feira, 17 de março de 2014 18:47

Respostas

  • Junior,

    Pelos testes que eu fiz o RS de fato interpreta desta forma. Ele leva em consideração o campo que é vinculado à propriedade "Value Field" e o considera como chave primária.

    Uma solução não muito elegante para este problema, seria criar uma "chave fictícia", concatenando os dois campos referentes às chaves da tabela em questão. No exemplo que eu dei, eu criaria uma nova chave concatenando os campos CODPAIS e CODESTADO:

    select
    TB_ESTADO.CODPAIS + '-' + TB_ESTADO.CODESTADO as 'CHAVE',
    TB_ESTADO.NOMEESTADO
    
    from TB_ESTADO (nolock)


    Em seguida, fazer o mesmo processo na query que vai receber o parâmetro:

    select *
    
    from TB_DADOS (nolock)
    
    where TB_DADOS.CODPAIS + '-' + TB_DADOS.CODESTADO in ( @CODESTADO )

    Continuo achando que é um erro do RS ter este comportamento.

    De qualquer  forma, acredito que isto resolva o problema.

    Abs

    quarta-feira, 19 de março de 2014 16:53

Todas as Respostas

  • Marcelo,

    Acredito que o RS leva em consideração a coluna que esta definida como elemento para apresentação de dados no Parâmetro, tendo como base, o identificador único desta coluna.

    Algo muitas vezes similar a um lookup.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 19 de março de 2014 14:42
  • Junior,

    Pelos testes que eu fiz o RS de fato interpreta desta forma. Ele leva em consideração o campo que é vinculado à propriedade "Value Field" e o considera como chave primária.

    Uma solução não muito elegante para este problema, seria criar uma "chave fictícia", concatenando os dois campos referentes às chaves da tabela em questão. No exemplo que eu dei, eu criaria uma nova chave concatenando os campos CODPAIS e CODESTADO:

    select
    TB_ESTADO.CODPAIS + '-' + TB_ESTADO.CODESTADO as 'CHAVE',
    TB_ESTADO.NOMEESTADO
    
    from TB_ESTADO (nolock)


    Em seguida, fazer o mesmo processo na query que vai receber o parâmetro:

    select *
    
    from TB_DADOS (nolock)
    
    where TB_DADOS.CODPAIS + '-' + TB_DADOS.CODESTADO in ( @CODESTADO )

    Continuo achando que é um erro do RS ter este comportamento.

    De qualquer  forma, acredito que isto resolva o problema.

    Abs

    quarta-feira, 19 de março de 2014 16:53