2010-03-29 6 views
0

J'utilise le service de création de rapports SQL Server 2005 pour générer une base de rapport sur une base de données. Il existe deux colonnes datetime type ColumnA et ColumnB. Le rapport afficherait une image KPI sur ce rapport en comparant ces deux columns.Below est l'expression de sélection d'imageAfficher l'image sur un rapport basé sur deux date

SWITCH(DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)<0,"kpi_r", 
     DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)>0,"kpi_g", 
     DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)=0,"kpi_y") 

Pour la plupart des dossiers, l'image est correcte. Seulement pour un enregistrement, le résultat est très étrange. Pour cet enregistrement

ColumnA = 2010-04-23 08:00:00 ColumnB = 2010-04-22 17:00:00 Il affichera kpi_r, il a affiché kpi_y. J'ai vérifié la valeur de DateDiff (d, Fields! ColumnA.Value, Fields! ColumnB.Value) dans le SSMS, la valeur est -1. Pourquoi affiche-t-il kpi_y? Est-ce que quelqu'un rencontre ce problème avant?

Cordialement,

Répondre

1

La différence est que la fonction SSMS DATEDIFF compte les limites d'intervalle entre les deux dates alors que ReportBuilder compte les intervalles réels. Dans SSMS, si vous passez la nuit à minuit, vous avez déclenché une limite de jour. Dans votre exemple, vous obtenez -1. Dans ReportBuilder, il faut 24 heures pour être entre les deux valeurs, donc vous obtenez 0. Si vous modifiez l'heure sur ColumnA pour être '2010-04-23 17:00:00', vous verrez la valeur changer à -1 comme tu t'attendais. Pour votre comparaison, il serait probablement judicieux de supprimer le composant time de ColumnA et ColumnB lorsque vous faites cette instruction SWITCH.

0

la réponse ci-dessus est sur place.

est ici quelques façons de dépouiller le temps hors d'une date en fonction de vos préférences:

1. faire en RS: utilisation et expression comme DateSerial (année (champs ColumnA.Value), mois (Fields ! ColumnA.Value), jour (champs ColumnA.Value)) dans l'expression de commutateur

2. Créer dans SQL: utiliser une expression comme fonte (ronde (fonte (ColumnA comme flotteur), 0,1) comme date/heure) dans votre requête

Questions connexes