Relacionar dois DataSets por um campo em comum
-
quarta-feira, 8 de fevereiro de 2012 16:00
Boa tarde pessoal,
É possivel relacionar dois DataSets em uma expressão de uma matrix como se fosse um inner join?
Atualmente eu preciso verificar se os cpfs do dataset A existem no dataset B e se existir , idicar como true e os que não existirem retornar False
Sendo assim o melhor conceito seria o Left Join.
Todas as Respostas
-
quarta-feira, 8 de fevereiro de 2012 20:00
Vamos lá Junior,
Pelo que entendi você quer fazer um teste, se um campo em um dataset1 existe em outro dataset2.
Se for isso, faça da seguinte forma, no campo que você quer retornar como true ou false, coloque a seguinte FX (levando em consideração que o dataset1 é o principal, o que popula a grid):
Iif(Fields!cpf.value = (fields!cpf.value, "DataSet2"), true, false)
O que esta fórmula fará, pegará o campo CPF do dataset1 e testará a equivalência no campo CPF do dataset2.
Porém, se você precisa fazer apenas para um select a parte, você pode criar um parametro INTERNO, buscando as informações do CPF do DataSet2 e no select que desejas, colocar se o valor do parametro interno existe no campo CPF do dataset1.
Deve ter ficado muito complexo essa minha explicação, se não conseguir resolver com o dito, me avisa, que postarei um exemplo melhor.
Rodrigo Ataíde.
-
quarta-feira, 8 de fevereiro de 2012 20:29
Junior,
Em geral o ssrs nao permite JOIN entre dois datasets, no seu caso voce pode usar a funcao LOOKUP. Lookup permite a voce procurar uma chave em um segundo dataset.
Por Exemplo:
=Lookup(Fields!Cpf1.Value, Fields!Cpf2.Value, 1, "DataSet2")
http://technet.microsoft.com/en-us/library/ee210531.aspx
Lookup so existe a partir do SSRS2008 R2.
Att
Boreki
Boreki[MSFT] - SQL Server Reporting Services
-
quinta-feira, 9 de fevereiro de 2012 17:57Boreki, bom dia!
Fiz como me orientou e tive a seguinte mensagem:
Warning 1 [rsRuntimeErrorInExpression] The Value expression for the textrun ‘Textbox5.Paragraphs[0].TextRuns[0]’ contains an error: Exception of type 'Microsoft.ReportingServices.ReportProcessing.ReportProcessingException_ComparisonError' was thrown. 0 0
Warning 2 [rsRuntimeErrorInExpression] The Value expression for the textrun ‘Textbox7.Paragraphs[0].TextRuns[0]’ contains an error: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. 0 0
Além desta mensagem , no relatório apareceu para alguns registros "#error" e para outros não apareceu nada.
Verifiquei se os cpfs com a mensagem de erro tinha alguma relação com o segundo dataset e não há.
No exemplo que você mostra o que quer dizer o número 1?
Obrigado -
quinta-feira, 9 de fevereiro de 2012 18:16
Boa tarde Junior,
Faça o teste como informei, talvez funcione.
Rodrigo Ataíde.
-
quinta-feira, 9 de fevereiro de 2012 18:44
Boa tarde Rodrigo,
Segui suas orientações , criei o parâmetro interno chamando a segunda query e depois na primeira , fiz o teste lógico.
No momento de execução da query ele apresentava erro como se não reconhecesse o parâmetro.
Além disso , um fato me chamou a atenção , como eu preciso fazer o teste com todos os registros, qual seria a forma que o parâmetro usaria todos os valores do DataSet 2?
Colocando a opção de vários valores, eu conseguiria?
Obrigado pela a atenção!!
-
quinta-feira, 9 de fevereiro de 2012 19:01
Olá Júnior,
Sim, basta você marcar a opção "Allow Multivalue". E quando for fazer o teste, se você optar por dar 2 cliques no fields do dataset2, provavelmente irá com first ou sum na frente, basta deletar essa parte da fx.
Rodrigo Ataíde.
-
quinta-feira, 9 de fevereiro de 2012 22:44
Fabio
O 1 no meu exemplo seria o seu true, ou qualquer valor que voce queira retornar quando o campo eh encontrado. No seu caso parece que o erro foi de comparacao, para a funcao lookup os campos nos 2 datasets tem que ter o mesmo tipo de dados.
=Lookup(Fields!Cpf1.Value, Fields!Cpf2.Value, true, "DataSet2")
A sintaxe 'e:
=Lookup(CAMPO_DATASET1, CAMPO_DATASET2, VALOR_A_RETORNAR, NOME_DATASET2)
e o dataset1 sera implicitamente usado o que eh data dataregion1, entao se voce estiver em uma tabela, o campo_dataset1 sera um campo do mesmo dataset usado pela tabela.
Postei um exemplo de como usar Lookup aqui:
Esse relatorio cria 2 tabelas com 10 linhas aleatorias e procura a partir do dataset da segunda tabela, valores no dataset da primeira. Espero que ajude.
Att
Boreki
Boreki[MSFT] - SQL Server Reporting Services
- Marcado como Resposta Junior Oslain quinta-feira, 8 de março de 2012 14:06

