2010-01-20 4 views
2

Ce problème s'applique aux versions 8.3 à 10.1.1 de Cognos Report Studio.Cognos Date Invite Macro Error

Dans Report Studio 8.3, j'ai cette requête SQL brute en cours d'exécution sur une source de données MySQL 5.1:

SELECT enc.encounterID, enc.date 
FROM enc 
WHERE enc.date between #prompt('textPromptStartDate')# AND #prompt('textPromptEndDate', 'date')# 

Ce produit texte invite à l'utilisateur. Si l'utilisateur entre des dates dans ces invites au format "AAAA-MM-JJ", par ex. '2010-01-15', la requête fonctionne bien. Mais je veux remplacer les invites de texte par des invites de date appropriées. Lorsque je tente de remplacer les instructions ci-dessus avec

#prompt('datePromptStartDate', 'date') AND #prompt('datePromptEndDate', 'date')# 

la requête est exécutée (pas d'erreurs sont générées), mais je reçois un jeu de résultats vide. J'ai le sentiment que j'ai besoin d'ajuster le format de date que la macro d'invite de date retourne, mais je suis coincé après de nombreuses heures d'expérimentation sur la façon de déboguer cela.

+0

Avez-vous vérifié pour tous les problèmes de conversion de chaîne, car les données sont entrées dans une invite de zone de texte est un texte/String mais la base de données utilise peut-être un format de date spécifique? Excuses si cette réponse était trop basique d'une suggestion. –

Répondre

0

Vous pouvez créer une page d'invite avec des contrôles d'invite de date, puis les lier aux paramètres de vos macros d'invite. J'ai testé cela en 8.4 avec MySQL 5.1 (ODBC) en utilisant la requête que vous avez ci-dessus et cela a fonctionné. J'ai également eu le même problème que vous avez rencontré sans aucune donnée renvoyée avant de créer une page d'invite distincte et de lier les contrôles.

Les mesures que vous prendriez pour ce faire sont les suivantes:

  1. ajouter une page rapide (si l'on n'existe pas) à votre rapport
  2. ajouter 2 Date commandes rapides à la page rapide
  3. dans la propriété « Paramètre » pour la première invite de date, utilisez: datePromptStartDate
  4. dans la propriété « Paramètre » pour la deuxième invite de la date, l'utilisation: datePromptEndDate

Lorsque vous exécutez le rapport, la nouvelle page d'invite remplacera la page d'invite générée à partir de la macro et les paramètres des macros seront liés aux contrôles de date.

Edit: J'ai oublié d'ajouter que les macros dans votre SQL doivent ressembler à ce qui suit:

SELECT enc.encounterID, enc.date 
FROM enc 
WHERE enc.date between #prompt('textPromptStartDate')# 
AND #prompt('textPromptEndDate')# 
0

Il est possible de créer une invite sans une page rapide pour la date invites sans utiliser page d'invite. J'ai également rencontré ce problème sur SQL Server jusqu'à ce que j'ai exécuté une trace de profil. La trace du profil a montré que Cognos ne transmettait pas de guillemets autour de la valeur de la date. J'ai corrigé le problème en passant l'invite sous la forme d'une chaîne, en remplaçant la chaîne de test de validation par défaut (testValue) par une date réelle, en générant la chaîne dans une variable et en la passant à la requête réelle. Voici ce que j'ai utilisé pour convertir une invite de date en un type de données DATE normal.

DECLARE @StartDate DATE = CONVERT(DATE, REPLACE(#prompt('StartDate')#, 'testValue', '1/1/2012')); 
1

Pour les dates, vous avez besoin des guillemets simples autour de la valeur. Je le fais en utilisant la fonction « carré »:

#sq (rapide (« DateParameterFromPromptPage », « date »)) #