Demander un paramètre de valeurs de date et d'heure séparées?

9

Je travaille avec Crystal Reports 2016. La source de données est MS SQL Server 2008 R2. Je suis actuellement en mesure de demander à l'utilisateur une plage de dates pour mon rapport à l'aide d'un paramètre. Je voudrais également ajouter une invite pour une plage de temps. L'utilisation d'une invite pour un paramètre DateTime ne fait pas ce que je veux. La plage de dates va sélectionner une plus grande fenêtre de jours et la plage de temps sélectionnera les heures de la journée pendant lesquelles le rapport affichera les données. L'utilisation d'une invite de paramètre DateTime ajoute simplement de la précision au jour et à l'heure de début et de fin du rapport et ne fait pas ce que je veux. Les deux invites feront référence au même enregistrement DateTime dans la base de données.

J'ai essayé d'ajouter une deuxième invite de paramètre distincte pour le temps juste, mais cela a le même résultat que de changer l'invite de paramètre en une valeur DateTime. Je le répète: ce n'est pas mon résultat souhaité.

À titre d'exemple concret et précis, je voudrais utiliser des données valables pour la période du 1er septembre au 31 octobre où la chose sur laquelle je fais rapport s'est produite entre 14 h et 22 h HNE un ou plusieurs de ces jours. Si j'ai une sélection DateTime, je peux choisir le 1er septembre à 14 h et le 31 octobre à 22 h. Cependant, ce n'est pas ce que j'essaie de sélectionner.

Fondamentalement, sélectionnez les données qui se sont produites ces jours-là entre 14 h et 22 h. Où la date de début et la date de fin sont sélectionnables; et l'heure de début et l'heure de fin sont sélectionnables.

entrez la description de l'image ici

En utilisant le langage SQL, je pense que je voudrais une jointure interne de la plage de dates et de la plage de temps (celle du centre):

entrez la description de l'image ici

Un exemple complètement indépendant mais similaire; ce phénomène est similaire aux réunions dans Outlook. Vous pouvez (mais ne devriez pas) faire une réunion très longue qui commence 1 jour / heure et se termine un autre jour / heure plusieurs jours plus tard, mais vous devez faire une réunion récurrente pour gérer correctement votre horaire et celui de vos salles. Je cherche à sélectionner des enregistrements d'une manière similaire à une réunion récurrente.

Comment puis-je créer une select expertrègle pour obtenir les données que je recherche? Existe-t-il une autre façon de procéder? Peut-être un sous-rapport?

YetAnotherRandomUser
la source
1
Il est peut-être trop tard, car ce Q a maintenant une semaine. Je le réécrirais en tant qu'échantillons d'entrées, sorties requises et meilleure tentative de solution (je sais qu'en tant que développeur CR, vous comptez sur beaucoup de widgets intégrés, ce qui rend la publication plus difficile). Mais tel quel, je ne peux pas visualiser quel est le problème que vous essayez de résoudre spécifiquement. Si vous dites "Je reçois le 12-05-2017: 00: 00Z mais que je veux le 12/05/2017: 59: 59", alors je pense que beaucoup de gens trouveraient plus facile d'aider. Bonne chance.
shellter
1
Une solution simple consiste peut-être à créer une vue de base de données dans MS SQL pointant vers l'autre table où le rapport obtient les données, mais lui indique de n'obtenir que les valeurs ici, [l'heure] se HHsitue entre 14 h et 22 h à l'aide de la DATEPARTfonction. Ainsi, par exemple, sans être explicite sur les colonnes en utilisant SELECT * FROM Table WHERE DATEPART(hh,[DateField]) BETWEEN 14 AND 22dans la vue, puis pointez le select expertrapport pour obtenir ses données pour les périodes sélectionnées. Une autre façon serait de faire de la même requête T-SQL une commande CR CR, mais une vue SQL peut être bien meilleure.
Pimp Juice IT
1
Donc, pour être clair, la requête SQL avec laquelle vous pouvez jouer comme une vue SQL ou un objet CR SQL Command serait SELECT * FROM Table WHERE DATEPART(hh,[DateField]) BETWEEN 14 AND 22et vous pouvez être spécifique à la colonne avec la requête dans la vue SQL, select column1, column2 FROM ~etc., au lieu de *.
Pimp Juice IT
1
Mon exemple était un exemple spécifique. Je veux laisser l'utilisateur déterminer les heures de début et de fin, c'est pourquoi j'ai mentionné les paramètres. Je ne sais pas grand-chose sur les vues SQL, mais je suppose que si je colle quelque chose comme ça quelque part, il est statiquement défini et l'utilisateur exécutant le rapport ne peut pas le changer à la volée. Je vais essayer de clarifier la question à cet égard.
YetAnotherRandomUser
D'accord, cela ne fonctionnerait pas si les utilisateurs choisissaient la plage de temps. Cela peut être un travail pour un proc stocké peut-être. Je n'ai plus de CR et cela fait environ un an que je l'ai gâché pour tester quoi que ce soit, mais j'ai pensé que je pourrais aider avec une solution de niveau SQL potentielle en supposant que vous pourriez obtenir la partie CR installée et configurée pour permettre au TSQL de faire le filtrage, etc. Je ne sais pas si vous pourriez construire un proc stocké et passer des paramètres d'heure de début et de fin et avoir une invite dynamique CR pour ces valeurs, etc. mais je pensais que je vous donnerais au moins quelques idées ... Bonne chance indépendamment.
Pimp Juice IT