Solicitar parâmetro de valores separados de data e hora?

9

Estou trabalhando com o Crystal Reports 2016. A fonte de dados é o MS SQL Server 2008 R2. Atualmente, posso solicitar ao usuário um intervalo de datas para o meu relatório usando um parâmetro Eu também gostaria de adicionar um prompt para um intervalo de tempo. Usar um prompt para um parâmetro DateTime não faz o que eu quero. O período selecionará uma janela maior de dias e o período selecionará os horários durante o dia em que o relatório mostrará os dados. O uso de um prompt de parâmetro DateTime simplesmente adiciona precisão ao dia / hora inicial e final do relatório e não faz o que eu quero. Os dois prompts se referirão ao mesmo registro DateTime no banco de dados.

Tentei adicionar um segundo prompt de parâmetro separado por um tempo justo, mas isso tem o mesmo resultado que a alteração do prompt de parâmetro para um valor DateTime. Vou reiterar: esse não é o meu resultado desejado.

Como exemplo concreto e específico, eu gostaria de usar dados válidos de 1º de setembro a 31 de outubro, onde o que estou relatando aconteceu entre 14h e 22h EST, em um ou em todos esses dias. Se eu tiver uma seleção de Data e hora, posso escolher 1 de setembro, 14h e 31 de outubro, 22h. No entanto, não é isso que estou tentando selecionar.

Basicamente, selecione os dados que ocorreram nesses dias entre as 14h e as 22h. Onde a data inicial e a data final são selecionáveis; e o horário de início e de término são selecionáveis.

insira a descrição da imagem aqui

Usando linguagem SQL, acho que gostaria de uma junção interna do período e do período (o centro):

insira a descrição da imagem aqui

Um exemplo completamente não relacionado, mas semelhante; esse fenômeno é semelhante às reuniões no Outlook. Você pode (mas não deve) fazer uma reunião realmente longa, que começa em 1 dia / hora e termina em outro dia / hora vários dias depois, mas você deve fazer uma reunião recorrente para gerenciar adequadamente a agenda de seus e de seus quartos. Estou procurando selecionar registros de maneira semelhante a uma reunião recorrente.

Como posso criar uma select expertregra para obter os dados que estou procurando? Existe alguma outra maneira de fazer isso? Talvez um sub-relatório?

YetAnotherRandomUser
fonte
11
Pode ser tarde demais, pois esse Q tem uma semana agora. Eu o reescreveria como exemplo de entradas, saída necessária e sua melhor tentativa de solução (eu sei como desenvolvedor de CR, você confia em muitos widgets incorporados, o que dificulta a postagem). Mas, como está, não consigo visualizar qual é o problema que você está tentando resolver especificamente. Se você disser "Estou recebendo 2017-05-12.00: 00: 00Z, mas quero 2017-05-12.23: 59: 59", acho que muitas pessoas acham mais fácil ajudar. Boa sorte.
shellter 11/05/19
11
Uma solução simples talvez seja criar uma exibição de banco de dados no MS SQL apontando para a outra tabela em que o relatório obtém os dados, mas diga para ele obter apenas os valores aqui [a hora] HHé entre 14 e 22 horas usando a DATEPARTfunção Por exemplo, sem ser explícito SELECT * FROM Table WHERE DATEPART(hh,[DateField]) BETWEEN 14 AND 22na coluna usando na exibição e, em seguida, aponte o select expertrelatório para obter seus dados para períodos selecionados. Outra maneira seria transformar a mesma consulta T-SQL em um comando CR SQL, mas uma exibição SQL pode ter um desempenho muito melhor.
Pimp Juice IT
11
Portanto, para esclarecer a consulta SQL com a qual você deseja jogar como um objeto VIEW SQL ou CR Command SQL, SELECT * FROM Table WHERE DATEPART(hh,[DateField]) BETWEEN 14 AND 22você pode ser específico da coluna com a consulta na visualização SQL, select column1, column2 FROM ~etc., em vez de *.
Pimp Juice IT
11
Meu exemplo foi um exemplo específico. Desejo deixar que o usuário determine os horários de início e término, e foi por isso que mencionei parâmetros. Eu não sei muito sobre o SQL Views, mas acho que se colar algo assim em algum lugar, está definido estaticamente e o usuário que está executando o relatório não pode alterá-lo rapidamente. Vou ver como tornar a pergunta mais clara a esse respeito.
YetAnotherRandomUser
Ok, isso não funcionaria se os usuários escolhessem o intervalo de tempo. Talvez seja um trabalho para um processo armazenado, talvez. Eu não tenho mais CR e já faz um ano que eu estraguei tudo para testar qualquer coisa, mas achei que poderia ajudar com uma solução potencial de nível SQL, supondo que você pudesse obter a parte de CR configurada e configurada para permitir que o TSQL fizesse a filtragem, etc. Não tenho certeza se você pode criar um processo armazenado e passar nos parâmetros de horário de início e de término e ter um prompt dinâmico de CR para esses valores, etc. mas pensei em pelo menos dar algumas idéias ... Boa sorte independentemente.
Pimp Juice IT