none
Filtro de consulta RRS feed

  • Pergunta

  • Boa tarde , Galera

     

    Estou usando o Report Service do Sql 2000

    No caso criei um parametro com um  filtro para o usuario onde retorna o nome do produto que ele quer consultar e a mesma tem varios produtos , como faço para colocar um registro nesta tabela como exemplo "Todos" para que o usuario visualize todos os produtos da lista e não apenas 1 item ?

     

     

    Att,

    Cristiano 

    quarta-feira, 22 de agosto de 2007 17:37

Respostas

  • Okay...

     

    esse select é apenas para retornar as descrições dos filtros não é isso? Então nele você faz.

     

    select "todos" as descricao, -1 as codigo

    union

    select distinct a.descricao,a.codigo from express a, dim_produto_express b

    where a.codigo = b.codproduto

     

    Então no seu outro select que retorna a consulta dos produtos relacionados com clientes você usa o CASE.

     

    where codigo = CASE @codigo when -1 then codigo

       else @codigo end

     

     

    Rafael Krisller

    quinta-feira, 23 de agosto de 2007 13:36
  • Cristiano,

     

    No seu segundo DataSet (

    SELECT * FROM DIM_PRODUTO_EXPRESS

    )

     

    que você irá usar o CASE ,veja:

     

    SELECT * FROM DIM_PRODUTO_EXPRESS

    where CODPRODUTO = Case @codigo when -1 then CODPRODUTO

    else @codigo end

     

    Então você não precisar usar o Filters.

     

    No primeiro DataSet você não precisa usar o CASE não.

     

    []'s

     

     

    Rafael Krisller

    quinta-feira, 23 de agosto de 2007 14:55
  • Rafael

     

    Deu certo , valeu pelo o help

     

     

    Att,

    Cristiano

     

    quinta-feira, 23 de agosto de 2007 16:15
  • Não tem de quê.

    Só marque o post como respondido para ficar mais fácil a consulta.

     

    []'s

     

    Rafael Krisller

    quinta-feira, 23 de agosto de 2007 16:23

Todas as Respostas

  • Cristiano,

     

    No seu filtro você insere o "Todos" com o codigo -1 por exemplo ( um código que não exista produto. ).Então na query do seu dataset, ou se estiver utilizando procedure não tem problema, basta fazer um case no seu where. Exemplo:

     

    Select Desc_produto, Nom_cli, cod_produto, codigo_venda

    from produto, cliente, vendas

    where cod_produto = case @Cod_prod when -1 then cod_produto

    else @cod_prod end

    and cod_produto = codigo_venda

     

    Alguma coisa desse tipo. Não sei a estrutura da sua tabela, então tentei simular apenas para ver o que você tem que fazer no CASE.

     

    []'s

     

    Rafael Krisller

     

    quinta-feira, 23 de agosto de 2007 13:08
  •  

    Rafael ,

     

    A estruruta da minha tabela é apenas Codigo e Nome do produto , como que ficaria ?

     

    Att,

    Cristiano

    quinta-feira, 23 de agosto de 2007 13:13
  • Posta seu select aí que fica mais fácil.

     

    Porque essa tabela produto faz algum relacionamento com outra não faz?

     

    Rafael Krisller

     

    quinta-feira, 23 de agosto de 2007 13:19
  • select 0 as codigo, 'Todos' as nome, " as ordem

    union

    select codigo, nome, nome as ordem

    from produto

    order by ordem

     

    Assim vai listar "Todos" no RS ..

    dae na sua procedure vc faiz

     

      WHERE codigo = CASE WHEN @codigo =  '0' THEN codigo ELSE @codigo END
    quinta-feira, 23 de agosto de 2007 13:23
  • Sim esta desta forma :

     

    A tabela de Produtos é a EXPRESS

     

    SELECT DISTINCT  A.DESCRICAO FROM  EXPRESS A , DIM_PRODUTO_EXPRESS B
    WHERE A.CODIGO = B.CODPRODUTO

     

     

    Att,

    Cristiano Brito

    quinta-feira, 23 de agosto de 2007 13:27
  • Cristiano ..

     

    Diga exatamente oq vc quer fazer.

     

    Voce quer ter um drop no seu relatorio para a pessoa selecionar os Tipo de produto a serem pesquisado ?

    Ex: um drop tem os campos 'Todos', 'Futebol', 'Volei', 'Roupas'

     

     

    e a partir dessi Drop q ele selecionar vc quer fazer a sua pesquisa ?

     

    diga oq vc quer exatamente para assim podermos ajuda-lo.

     

    Rafael

    quinta-feira, 23 de agosto de 2007 13:35
  • Okay...

     

    esse select é apenas para retornar as descrições dos filtros não é isso? Então nele você faz.

     

    select "todos" as descricao, -1 as codigo

    union

    select distinct a.descricao,a.codigo from express a, dim_produto_express b

    where a.codigo = b.codproduto

     

    Então no seu outro select que retorna a consulta dos produtos relacionados com clientes você usa o CASE.

     

    where codigo = CASE @codigo when -1 then codigo

       else @codigo end

     

     

    Rafael Krisller

    quinta-feira, 23 de agosto de 2007 13:36
  • Rafael ,

     

     

    Estou usando 2 DataSet o Primeiro uso uma tabela com os campos Codigo,Descricao , esta tabela me retorna a descricão do Produto no Filtro,  neste DataSet uso a seguinte Intrução.

     

    SELECT DISTINCT A.CODIGO,A.DESCRICAO FROM EXPRESS A, DIM_PRODUTO_EXPRESS B
    WHERE A.CODIGO = B.CODPRODUTO

     

     

    O segundo Dataset me retorna o faturamento destes produtos que esta em uma tabela Matrix , como esta abaixo.

     

    SELECT * FROM DIM_PRODUTO_EXPRESS

     

    Eu relaciono o campo filtro com a tabela nas propriedades da tabela na aba Filters , deste modo :

     =Fields!PRODUTO.Value  = = Parameters!Produto.Value

     

    Na instrução que vc me envio consegui retornar o campo "Todos"  no filtro , desta forma :

     

    SELECT -1 AS CODIGO, 'TODOS' AS DESCRICAO
    UNION
    SELECT DISTINCT A.CODIGO,A.DESCRICAO FROM EXPRESS A, DIM_PRODUTO_EXPRESS B
    WHERE A.CODIGO = B.CODPRODUTO and A.CODIGO = CASE CODIGO WHEN -1 THEN CODIGO 
    ELSE CODIGO END

     

     mas não consegui relacionar com a tabela de faturamento "DIM_PRODUTO_EXPRESS"

     

    Att,

    Cristiano

     

     

     

     

     

     

     

     

     

     

     

    quinta-feira, 23 de agosto de 2007 14:43
  • Cristiano,

     

    No seu segundo DataSet (

    SELECT * FROM DIM_PRODUTO_EXPRESS

    )

     

    que você irá usar o CASE ,veja:

     

    SELECT * FROM DIM_PRODUTO_EXPRESS

    where CODPRODUTO = Case @codigo when -1 then CODPRODUTO

    else @codigo end

     

    Então você não precisar usar o Filters.

     

    No primeiro DataSet você não precisa usar o CASE não.

     

    []'s

     

     

    Rafael Krisller

    quinta-feira, 23 de agosto de 2007 14:55
  • Rafael

     

    Deu certo , valeu pelo o help

     

     

    Att,

    Cristiano

     

    quinta-feira, 23 de agosto de 2007 16:15
  • Não tem de quê.

    Só marque o post como respondido para ficar mais fácil a consulta.

     

    []'s

     

    Rafael Krisller

    quinta-feira, 23 de agosto de 2007 16:23