Eu tenho um relatório do SSRS que possui 3 conjuntos de dados que se alimentam de uma fonte de dados. O conjunto de dados principal é um procedimento armazenado que agrega alguns dados com base em um conjunto de parâmetros alimentados pelos outros dois conjuntos de dados.
O principal procedimento armazenado que alimenta este relatório possui 4 parâmetros. Um é um ID para o tipo de dados, dois são para datas de início e término e o terceiro é apenas um parâmetro de flag. O parâmetro flag é o parâmetro com vários valores em que desejo passar vários valores de flag que também são valores VARCHAR.
No meu procedimento armazenado para o meu parâmetro @Flag, tenho o comum:
WHERE [Flag] IN (@Flag)
Obviamente, o parâmetro @Flag no relatório SSRS definido para permitir 'Múltiplos Valores' que também são preenchidos a partir de uma consulta que está puxando esses valores @Flag de uma tabela de dimensões.
Meu problema
Na maioria dos casos, ao lidar com valores INT, a mesma técnica funciona. No entanto, quando estou lidando com valores de caracteres, ele falha. Se eu escolher um sinalizador, o relatório funcionará magicamente. Se eu selecionar mais de um sinalizador, ele não passará os sinalizadores corretamente para o procedimento armazenado e nenhum resultado será retornado.
Ao testar o sinalizador de vários valores diretamente no procedimento armazenado:
WHERE [Flag] IN ('A', 'B', 'C')
O procedimento armazenado funciona corretamente. Portanto, o problema não é o procedimento armazenado, mas como o SSRS está passando os valores com vários valores para o parâmetro @Flag.
Soluções experimentadas
Tentei fazer os seguintes ajustes no conjunto de dados SSRS para esses parâmetros @Flag:
=join(Parameters!<your param name>.Value,",")
E este também:
=SPLIT(JOIN(Parameters!<your param name>.Value,","),",")
Todos eles trabalham com valores únicos, mas nunca com valores múltiplos.
O que estou perdendo aqui?
fonte
=join(Parameters!<your param name>.Value,",")
) pode ser adicionada ao conjunto de dados que lê o parâmetro, na guia "Parâmetros": existe um botão "fx" para adicionar expressões, à direita do menu suspenso "Valor do parâmetro" -baixa.WHERE <Table>.[<Column>] IN (@MultiValueParm)
, em seguida, o código no procedimento armazenado poderia serWHERE CHARINDEX(<Table>.[<Column>], @MultiValueParmAsText) > 0