Je crée un rapport dans MS SQL Server Reporting Services et je dois définir les paramètres de rapport de date de début et de fin par défaut pour être les première et dernière dates du mois civil précédent et j'ai besoin d'aide.
Le rapport est généré le 2ème jour calendaire du mois et j'ai besoin de valeurs pour:
Mois du calendrier précédent
- premier jour
- dernier jour
J'ai travaillé avec DateAdd, mais je n'ai pas réussi à créer une expression (dans VB.NET si je comprends bien). J'apprécierais vraiment toute aide que vous pourriez me donner!
Randall, voici les expressions VB que j'ai trouvées travailler dans SSRS pour obtenir le premier et le dernier jour de n'importe quel mois, en utilisant le mois en cours comme référence:
Premier jour du mois dernier:
=dateadd("m",-1,dateserial(year(Today),month(Today),1))
Premier jour de ce mois:
=dateadd("m",0,dateserial(year(Today),month(Today),1))
Premier jour du mois prochain:
=dateadd("m",1,dateserial(year(Today),month(Today),1))
Dernier jour du mois dernier:
=dateadd("m",0,dateserial(year(Today),month(Today),0))
Dernier jour de ce mois:
=dateadd("m",1,dateserial(year(Today),month(Today),0))
Dernier jour du mois prochain:
=dateadd("m",2,dateserial(year(Today),month(Today),0))
Le documentation MSDN pour la fonction VisualBasic DateSerial(year,month,day)
explique que la fonction accepte des valeurs en dehors de la plage attendue pour les year
, month
et day
paramètres. Cela vous permet de spécifier des valeurs relatives à la date utiles. Par exemple, une valeur de 0 pour Day
signifie "le dernier jour du mois précédent". C'est logique: c'est la veille du premier jour du mois en cours.
Ces fonctions m'ont été très utiles - en particulier dans la configuration des rapports d'abonnement; cependant, j'ai remarqué qu'en utilisant la fonction Dernier jour du mois en cours affichée ci-dessus, elle fonctionne tant que le mois en cours a le même nombre de jours que le mois en cours. J'ai travaillé et testé ces modifications et j'espère qu'elles aideront d'autres développeurs à l'avenir:
Formules de date: Rechercher le premier jour du mois précédent:
DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1))
Rechercher le dernier jour du mois précédent:
DateSerial(Year(Today()), Month(Today()), 0)
Rechercher le premier jour du mois en cours:
DateSerial(Year(Today()),Month(Today()),1)
Rechercher le dernier jour du mois en cours:
DateSerial(Year(Today()),Month(DateAdd("m", 1, Today())),0)
Dim thisMonth As New DateTime(DateTime.Today.Year, DateTime.Today.Month, 1)
Dim firstDayLastMonth As DateTime
Dim lastDayLastMonth As DateTime
firstDayLastMonth = thisMonth.AddMonths(-1)
lastDayLastMonth = thisMonth.AddDays(-1)
Je ne connais pas SSRS, mais vous pouvez obtenir le début et la fin du mois précédent dans VB.Net en utilisant le constructeur DateTime
, comme ceci:
Dim prevMonth As DateTime = yourDate.AddMonths(-1)
Dim prevMonthStart As New DateTime(prevMonth.Year, prevMonth.Month, 1)
Dim prevMonthEnd As New DateTime(prevMonth.Year, prevMonth.Month, DateTime.DaysInMonth(prevMonth.Year, prevMonth.Month))
(yourDate
peut être n'importe quel objet DateTime
, tel que DateTime.Today
ou #12/23/2003#
)
J'avais quelques difficultés à traduire VB.NET réel en sous-ensemble d'expression que SSRS utilise. Vous m'avez certainement inspiré et c'est ce que j'ai trouvé.
StartDate
=dateadd("d",0,dateserial(year(dateadd("d",-1,dateserial(year(Today),month(Today),1))),month(dateadd("d",-1,dateserial(year(Today),month(Today),1))),1))
End Date
=dateadd("d",0,dateserial(year(Today),month(Today),1))
Je sais que c'est un peu récursif pour le StartDate (premier jour du mois dernier). Y a-t-il quelque chose qui me manque ici? Ce sont strictement des champs de date (c'est-à-dire pas d'heure), mais je pense que cela devrait capturer l'année bissextile, etc.
Comment ai-je fait?
en C #:
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-1)
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)
Je cherchais une réponse simple pour résoudre ce problème moi-même. voici ce que j'ai trouvé
Cela divisera l'année et le mois, prendra un mois de congé et aura le premier jour.
firstDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate) - 1, 1)
Obtient le premier jour du mois précédent du courant
lastDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate), 0)
Plus de détails peuvent être trouvés à: http://msdn.Microsoft.com/en-us/library/aa227522%28v=vs.60%29.aspx
Celui-ci ne vous donnera aucune date:
=FormatDateTime(DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1)),
DateFormat.ShortDate)
Celui-ci vous donnera datetime:
=dateadd("m",-1,dateserial(year(Today),month(Today),1))
Dim aDate As DateTime = #3/1/2008# 'sample date
Dim StartDate As DateTime = aDate.AddMonths(-1).AddDays(-(aDate.Day - 1))
Dim EndDate As DateTime = StartDate.AddDays(DateTime.DaysInMonth(StartDate.Year, StartDate.Month) - 1)
'to access just the date portion
' StartDate.Date
' EndDate.Date