2010-12-06 57 views
2

J'ai un rapport de rdlc avec une source de données qui fournit quelque chose comme ceci: pour afficher la date sur le côté gaucherdlc tablix comprennent les dates manquantes

1/1/01 User1 5 
1/1/01 User2 3 
2/1/01 User1 4 
2/1/01 User2 8 
3/1/01 User1 5 
4/1/01 User2 3 
6/1/01 User1 9 
6/1/01 User2 2 

J'utilise ensuite une matrice (aka tablix) et Utilisateur à travers le haut. Le compte va à l'intersection. Tout fonctionne bien.

Je peux configurer que les cellules manquantes ont un 0 - par exemple pour User2 sur le 3ème.

Le problème est qu'il n'y a pas d'entrée pour le 5ème (par exemple une date où les utilisateurs de NO ont eu aucune activité). Cela gâche également les graphiques

Ce que je veux faire est de remplir chaque date entre la date la plus basse et la plus élevée.

Comment puis-je y parvenir?

Répondre

0

J'ai finalement résolu cela en utilisant une liste de dates entre la première et la dernière date spécifiée et en obtenant des comptes pour chaque utilisateur à la date spécifiée.

Je ne suis pas convaincu que ce soit la meilleure solution, mais je n'ai rien trouvé de mieux.

0

Pour une solution Crystal Reports, this semble être une bonne approche (CR 8)

Pour résoudre dans la source de données, cela dépend de ce qui est la source de données ... Par ex une solution pour MySQL: MySQL how to fill missing dates in range?

+0

Je préférerais ne pas le résoudre dans la source de données. J'utilise EF4 Code-first et lance une requête arbitraire contre mon référentiel avant de convertir le 'IQueryable' en un' IEnumerable' de 'type anonyme' qui correspond au format attendu par le rapport - Cela permet au rapport d'utiliser le même BL et restrictions que le reste de l'application (par exemple l'utilisateur A ne peut pas voir les enregistrements de l'utilisateur B du tout) – Basic

+0

Et [un?] heureusement, nous utilisons Microsoft reporting non cristal - le composant cristal pour VS2010/.Net 4 ne fonctionne pas encore – Basic

+0

Oui, je n'ai plus d'idées ... J'ai eu ce problème plusieurs fois, heureusement j'aurais pu le résoudre dans la DB View ... mais j'aime bien la pratique d'abstaction que vous avez mentionnée ici. Je dirais que la seule façon de le résoudre est via le code (en plaçant les données sources dans une structure de données personnalisée et de combler les lacunes avant de les transmettre au rapport si possible, mais je suppose que je dis l'évidence) –