Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Filtro de parâmetro de vários valores do SSRS com base no conjunto de dados


Decidi escrever meu comentário sobre sua resposta, M.Ali, como uma resposta à minha própria pergunta, pois encontrei uma maneira de resolver isso. Talvez eu não tenha explicado o meu problema com precisão suficiente. Estou ciente de como a coisa acima funciona e como passar parâmetros com base em um conjunto de dados, através do SQL para criar outro conjunto de dados, vários valores permitidos ou não. Eu aprecio sua resposta embora!

O problema que tenho é que a consulta que definiria minha lista de valores para o parâmetro e a consulta para o conjunto de dados real são as mesmas. E é uma consulta ENORME. Em outras palavras, onde diz 'TABLE' no exemplo de código, tenho várias centenas de linhas de código. E meu objetivo era não ter toda essa consulta definindo os dois conjuntos de dados. Se no futuro eu tiver que alterar a consulta, teria que fazê-lo em mais de um lugar. Aqui está como eu resolvi:

Coloquei a consulta principal em um conjunto de dados compartilhado em vez de incorporá-la ao meu relatório. E então adicionei uma função row_number à minha consulta assim:
SELECT ID, Value, UserID, rn = ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY UserID)
FROM *my huge query*

Isso significa que há apenas uma linha 'rn =1' por UserID. Então voltei ao meu relatório. Meu DataSet1 original, então, apenas apontaria para o conjunto de dados compartilhado. O DataSet2 (o parâmetro um) também apontaria para o conjunto de dados compartilhado com a única diferença de que adicionei um filtro a esse conjunto de dados dizendo 'rn =1'. Eu então fiz um parâmetro com 'permitir vários valores' que tirou seus valores de DataSet2. E funciona como um encanto. Dessa forma, posso simplesmente acessar o conjunto de dados compartilhado quando precisar atualizar a consulta, e tanto o DataSet1 quanto o DataSet2 serão atualizados de acordo!

Sucesso :)

Mais uma vez, obrigado pela sua resposta!