Reporting Services: Substituindo um parâmetro padrão com uma expressão em um relatório vinculado
Pergunta
Então eu tenho um relatório "dashboard diária" no SSRS 2005. Ele tem um parâmetro, @pDate, cujo padrão é "= Now".
Eu gostaria de usar este mesmo relatório em um relatório vinculado para mostrar painel final, de ontem (que seria, então, enviado para fora através de subscrição), e substituir o padrão parâmetro com outra expressão, "= dateadd (d, 1, Agora)." Mas quando eu mudar o parâmetro padrão, eu recebo um erro de incompatibilidade de dados (natch).
Estou assumindo que é o fim da linha e eu só preciso implantar uma cópia do relatório de painel diariamente com uma @pDate padrão de ontem, mas eu pensei que eu ia postar aqui e ver se alguém tinha algum atalho bacana para alcançar este objetivo sem ter que manter dois RDLs.
UPDATE: Eu achei essa mensagem em MSDN :
Se Valor padrão aceita um valor, você pode digitar um constante ou sintaxe que é válido para o processamento de dados extensão usado com o relatório.
"extensão de processamento de dados" aparentemente se traduz em servidor SQL, então eu tentei seleciona únicas válidas que não eram constantes (GETDATE () "27/4 /" + ANO (GETDATE ()), etc ...) e ainda nada.
Solução
Então eu descobri o meu problema: se você tiver sub-relatórios dentro de seu relatório principal que estão usando parâmetros de passagem do relatório principal, certifique-se de que todos os parâmetros em seus sub-relatórios estão usando o mesmo tipo de dados . Dois dos meus sub-relatórios estavam usando um tipo de dados string para o campo @pDate vez de DateTime, de modo a subscrição estava falhando (embora por algum motivo a versão ao vivo do relatório tolera esta inconsistência.)
Agora estou usando uma assinatura controlada por dados para definir @pDate dinamicamente e tudo parece estar funcionando bem.
Outras dicas
Eu não testei isso, mas você poderia tentar adicionar um segundo parâmetro para o relatório (sem um padrão - chamá-lo pDateOverride
por causa do argumento) e altere o valor padrão para pDate
ser uma expressão usando o novo valor se ele está presente, caso contrário Now ().
Algo como:
=Iif(IsEmpty(Parameters!pDateOverride.Value),Now(),Parameters!pDateOverride.Value)
Você pode então definir pDateOverride
ao chamar o relatório para gerar painel final, de ontem.