MS SQL Server Reporting Servicesでレポートを作成していますが、デフォルトの開始日と終了日のレポートパラメーターを前月の最初と最後の日付に設定する必要があり、サポートが必要です。
レポートは月の2番目のカレンダー日に生成され、次の値が必要です。
前月
- 初日
-最終日
私はDateAddを扱ってきましたが、Expressionの作成に成功していません(VB.NETで理解しているとおり)。あなたが私に与えることができる助けを本当に感謝します!
ランドール、ここにVB=式があります。SSRSで、月の最初と最後の日を取得するために、今月を参照として使用することがわかりました。
先月の最初の日:
_=dateadd("m",-1,dateserial(year(Today),month(Today),1))
_
今月の最初の日:
_=dateadd("m",0,dateserial(year(Today),month(Today),1))
_
来月の最初の日:
_=dateadd("m",1,dateserial(year(Today),month(Today),1))
_
先月の最終日:
_=dateadd("m",0,dateserial(year(Today),month(Today),0))
_
今月の最終日:
_=dateadd("m",1,dateserial(year(Today),month(Today),0))
_
来月の最終日:
_=dateadd("m",2,dateserial(year(Today),month(Today),0))
_
VisualBasic DateSerial(year,month,day)
関数のMSDNドキュメント は、関数がyear
、month
、およびday
パラメーターの予期される範囲外の値を受け入れることを説明しています。これにより、有用な日付相対値を指定できます。たとえば、Day
の値が0の場合、「前月の最終日」を意味します。それは理にかなっています:それは今月の1日目の前日です。
これらの機能は、特にサブスクリプションレポートの設定において非常に役立ちました。ただし、上記の「今月の最後の日」機能を使用すると、先月が現在の月と同じ日数である限り機能します。私はこれらの修正を試し、テストしましたが、将来他の開発者を助けることを願っています:
日付式:前月の最初の日を検索:
DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1))
前月の最終日を見つける:
DateSerial(Year(Today()), Month(Today()), 0)
今月の最初の日を見つける:
DateSerial(Year(Today()),Month(Today()),1)
今月の最終日を見つける:
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)
私はSSRSに精通していませんが、次のようにDateTime
コンストラクターを使用してVB.Netで前月の始まりと終わりを取得できます。
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
は、DateTime.Today
や#12/23/2003#
などのDateTime
オブジェクトにすることができます)
実際のVB.NETをSSRSが使用するExpressionサブセットに変換するのに苦労していました。あなたは間違いなく私にインスピレーションを与え、これが私が思いついたものです。
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))
StartDate(先月の初日)が少し再帰的であることは知っています。ここに足りないものはありますか?これらは厳密に日付フィールド(つまり、時間なし)ですが、うるう年などをキャプチャする必要があると思います。
どうだった?
c#の場合:
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-1)
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)
私はこれを自分で解決する簡単な答えを探していました。ここに私が見つけたものがあります
これにより、年と月が分割され、1か月休みを取って初日が取得されます。
firstDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate) - 1, 1)
現在から前月の最初の日を取得します
lastDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate), 0)
詳細については、次を参照してください: http://msdn.Microsoft.com/en-us/library/aa227522%28v=vs.60%29.aspx
これはあなたに時間を与えません
=FormatDateTime(DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1)),
DateFormat.ShortDate)
これはあなたに日時を与えます:
=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