Usuário com melhor resposta
Como usar parametros para agrupar ?

Pergunta
-
Boa tarde !
Em em relatório que consulta uma tabela com essa estrutura:
CREATE TABLE gerencia.dbo.historicoServidoresMes ( idHistoricoServidoresMes INTEGER NOT NULL IDENTITY , tEnte INTEGER , sexo CHAR(1) , ano CHAR(4) , mes CHAR(2) , entrada INTEGER , saida INTEGER , saldo INTEGER , numAtivos INTEGER , PRIMARY KEY(idHistoricoServidoresMes));
deixa eu explicar isso:
tEnte é o local físico onde se trabalha.
Entrada é qtas pessoas entraram para trabalhar;
saida é as que sairam do trabalho;
numAtivos é o número de pessoas que estão trabalhando.
Observe que tem o campo sexo.
entao para mim fazer um relatorio por sexo é facil:
SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', hsm.sexo AS 'Sexo', hsm.entrada AS 'Entrada', hsm.saida AS 'Saida', hsm.numAtivos AS 'numAtivos' FROM gerencia.dbo.historicoServidoresMes AS hsm ORDER BY hsm.tEnte, hsm.ano, hsm.mes, hsm.sexo ASC
Porem, quando quero sumarizar, ou seja, não importa o sexo, devo agrupar:
SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', SUM(hsm.entrada) AS 'Entrada', SUM(hsm.saida) AS 'Saida', SUM(hsm.numAtivos) AS 'numAtivos' FROM gerencia.dbo.historicoServidoresMes AS hsm GROUP BY hsm.tEnte, hsm.ano, hsm.mes ORDER BY hsm.tEnte, hsm.ano, hsm.mes ASC
Como fazer isso usando o parametros no Report Services ?
Ou seja, escolhendo os 2 sexos, a consulta seria agrupada, somente um sexo, a consulta nao seria agrupada ?
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !
Respostas
-
aNetao,
Para mim a expressão funciona como postei, a unica coisa que vejo de errado na sua consulta são as quebras de linha, se a expressão estiver inteira em uma linha ou se voce fechar as strings a cada quebra deveria funcionar. Recomendo testar colocar as suas consultas em uma linha e ver se isso funciona.
Att
Boreki
http://www.boreki.eng.br- Marcado como Resposta Richard Juhasz quarta-feira, 27 de fevereiro de 2013 17:40
Todas as Respostas
-
Nao entendi a sua pergunta.
A principio, parametros nao irao afetar o agrupamento. Se voce precisa de duas consultas diferentes no dataset baseado em um parametro, voce pode usar o seu dataset baseado em expressao
=iif(Parameters!parametro.value="masc","SQL 1" ,"SQL 2")
onde SQL 1 e SQL 2 sao as consultas que voce quer usar.
Att
Boreki
http://www.boreki.eng.br -
Boreki,
deixei como esta abaixo.
nao, funcionou não !
IFF( Parameters!rpSexo.Value ="All", "SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', hsm.entrada AS 'Entrada', hsm.saida AS 'Saida', hsm.numAtivos AS 'numAtivos' FROM gerencia.dbo.historicoServidoresMes AS hsm GROUP BY hsm.tEnte, hsm.ano, hsm.mes ORDER BY hsm.tEnte, hsm.ano, hsm.mes ASC" , "SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes'/*, hsm.sexo AS 'Sexo', */hsm.entrada AS 'Entrada', hsm.saida AS 'Saida', hsm.numAtivos AS 'numAtivos' FROM gerencia.dbo.historicoServidoresMes AS hsm ORDER BY hsm.tEnte, hsm.ano, hsm.mes/*, hsm.sexo*/ ASC" )
Apresentou:
TITLE: Microsoft Report Designer
------------------------------
Could not generate a list of fields for the query.
Check the query syntax, or click Refresh Fields on the query toolbar.
------------------------------
ADDITIONAL INFORMATION:
Incorrect syntax near 'IFF'.
The identifier that starts with 'SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', hsm.entrada AS 'Entrada', hsm.saida AS 'Saida',
hsm.numAtivos A' is too long. Maximum length is 128.
The identifier that starts with 'SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes'/*, hsm.sexo AS 'Sexo', */hsm.entrada AS 'Entrada', hsm.saida AS '' is too long. Maximum length is 128. (Microsoft SQL Server, Error: 102)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.1399&EvtSrc=MSSQLServer&EvtID=102&LinkId=20476
------------------------------
BUTTONS:
OK
------------------------------
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
-
Junior,
entao, segundo a tabela acima, temos ano, mes, sexo, entrada, saida. Certo!
ano mes sexo entrada saida
2009 01 F 4 2
2009 01 M 7 3
2009 02 F 14 0
2009 02 M 10 1
No parametro qdo for consultar todos os sexos, nao quero visualizar a tabela os valores acima, e sim, eles sumarizados por ano, mes:
2009 01 4+7 2+3
2009 02 14+10 0+1
E qdo escolher o sexo, verei os registros do sexo selecionado. Ex.: F
2009 01 F 4 2
2009 02 F 14 0
-
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
Não é IFF, é IIF, e você precisa colocar = na frente para indicar que é uma expressão
=iif(...
Alem disso, o RS não vai criar a lista de campos, você deve primeiro criar a lista de campos com uma SQL que não é expressão, depois altera o dataset e coloca a expressão.
Mas se você puder colocar de uma maneira mais simples a sua dúvida talvez nós possamos dar uma sugestão melhor.
Att
Boreki
http://www.boreki.eng.br -
Boreki,
Agora no Preview:
The CommandText expression for the query `dsGer´ contains an error: [BC30451] Name 'IFF' is not declared
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
-
Boreki,
desculpe acima, foi um descuido/vacilo, contudo veja a consulta abaixo:
=IIF ( Parameters!rpSexo.Value = "F,M" , "SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', SUM(hsm.entrada) AS 'Entrada', SUM(hsm.saida) AS 'Saida',
Agora, consigo fazer a seleção, porem ao clicar em View Report !
SUM(hsm.numAtivos) AS 'numAtivos'
FROM gerencia.dbo.historicoServidoresMes AS hsm
GROUP BY hsm.tEnte, hsm.ano, hsm.mes
ORDER BY hsm.tEnte, hsm.ano, hsm.mes ASC
" , "SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', hsm.entrada AS 'Entrada', hsm.saida AS 'Saida', hsm.numAtivos AS 'numAtivos' FROM gerencia.dbo.historicoServidoresMes AS hsm ORDER BY hsm.tEnte, hsm.ano, hsm.mes ASC" )
An error occurred during local report processing.
An error has occurred during report processing.
Cannot set the command text for data set 'dsGer'.
Error during processing of the CommandText expression of dataset `dsGer´.
-
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
Acho que a expressão está incorreta. Ali na sua string tem algumas tags </br> que não sei se o Forum colocou por engano ou se estão na sua query. Mas as quebras de linha na string devem ser tratadas. Você deve concatenar a sua expressão para que ela fique em uma linha só.
Aqui tem um exemplo de SQL dinamicas no Dataset:
http://msdn.microsoft.com/en-us/library/aa237477(SQL.80).aspx
Att
Boreki
http://www.boreki.eng.br -
Boreki,
eu refez a query, poderia me ajudar no que está errado ?
O parametro utilizado é multivalorado (Multi-value), para sexo possuindo F e M como valores.
= " SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', "
-
& IIF( Parameters!rpSexo.Value = "F,M", "", " hsm.sexo AS 'sexo' ")
& IIF( Parameters!rpSexo.Value = "F,M", " SUM(hsm.entrada) ", " hsm.entrada ") & " AS 'Entrada', "
& IIF( Parameters!rpSexo.Value = "F,M", " SUM(hsm.saida) ", " hsm.saida ") & " AS 'Saida', "
& IFF( Parameters!rpSexo.Value = "F,M", " SUM(hsm.numAtivos) ", " hsm.numAtivos ") & " AS 'numAtivos' "
& " FROM gerencia.dbo.historicoServidoresMes AS hsm "
& IIF( Parameters!rpSexo.Value = "F,M", " GROUP BY hsm.tEnte, hsm.ano, hsm.mes ", "")
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
Ressalto:
Essas tags de pulo (<br/>) de linha, é gerada pelo próprio Forum.
-
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
Por favor.
Espero que me ajude nessa questão !
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
-
=IIF( Join(Parameters!rpSexo.Value,",") = "F,M", "SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', SUM(hsm.entrada) AS 'Entrada', SUM(hsm.saida) AS 'Saida', SUM(hsm.numAtivos) AS 'numAtivos' FROM gerencia.dbo.historicoServidoresMes AS hsm GROUP BY hsm.tEnte, hsm.ano, hsm.mes ORDER BY hsm.tEnte, hsm.ano, hsm.mes ASC" , "SELECT hsm.tEnte AS 'Ente', hsm.ano AS 'Ano', hsm.mes AS 'Mes', hsm.sexo AS 'Sexo', hsm.entrada AS 'Entrada', hsm.saida AS 'Saida', hsm.numAtivos AS 'numAtivos' FROM gerencia.dbo.historicoServidoresMes AS hsm ORDER BY hsm.tEnte, hsm.ano, hsm.mes, hsm.sexo ASC")
Então, fez conforme vc me pediu. ...
Testei as consultas no SSMS funcionam, está legal !
Porem, ao testar o código acima, no Preview Report, apareceu e não sei o seria:
An error occurred during local report processing.
An error has occurred during report processing.
Query execution failed for data set 'dsGer'.
Incorrect syntax near the keyword 'BY'.
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
Estou com isso pendente, alguém pode me ajudar a resolver isso?
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
aNetao,
Para mim a expressão funciona como postei, a unica coisa que vejo de errado na sua consulta são as quebras de linha, se a expressão estiver inteira em uma linha ou se voce fechar as strings a cada quebra deveria funcionar. Recomendo testar colocar as suas consultas em uma linha e ver se isso funciona.
Att
Boreki
http://www.boreki.eng.br- Marcado como Resposta Richard Juhasz quarta-feira, 27 de fevereiro de 2013 17:40