Il y a plusieurs façons de calculer le N° de semaine. J’y ai déjà été confronté il y a quelques années.
Il y a une norme ISO qui est notamment utilisée par les calendriers papier (http://fr.wikipedia.org/wiki/Numérotation_ISO_des_semaines).
On peut avoir ce comportement dans Outlook ; il faut le configurer ici :
Le problème se pose quand on doit l’utiliser dans du code. J’ai notamment eu le cas dans un rapport Reporting Services.
J’utilise l’expression suivante :
DatePart(“ww”, Fields!MaDate.Value)
Or, cette instruction ne se base pas sur la norme ISO mais démarre au 1er janvier.
En T-SQL, on peut avoir le bon calcul en changeant la constante :
SELECT DATEPART(ISOWK, '2010-01-04')
Mais cette constante n’existe pas dans le moteur d’expression de Reporting Services…
Donc il vous faudra vous baser sur un bout de code embarqué.
Et hop, une remontée de plus sur Connect.
UPDATE :
La fonction DatePart() a une surcharge qui prend 4 paramètres dont le dernier sert à définir la première semaine de l’année et donc avoir un comptage qui respecte la norme ISO 8601.
=Datepart(DateInterval.WeekOfYear, Fields!Date.Value, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays)
J’ai testé avec avec Report Builder 3.0 // SQL Server 2008 R2
Et si tu ajoutais une col calculée à ta table
Ou bien une vue qui ajoutes les infos que tu veux.
Pfff pas si puissant que ça SSRS.
🙂
Oui, c’est une solution, laisser SQL Server le calculer et l’avoir comme champ dans le DataSet.
Mais bon, si tu es en MDX et que tu ne l’as pas dans ta dimension Temps.