2013-02-12 71 views
1

我正在使用Crystal Reports 2011,並且有一個按YEAR(行)和MONTH(列)顯示數據的交叉表。我需要在任何特定時間報告3年的數據,但在4月份的時候,我需要放棄年紀較長的一年來選擇更新的一年。水晶報表年份Selecton

例如,自從我們在2月份以來,我正在報告2010年,2011年和2012年。一旦4月1日點擊,我將會報告2011年,2012年和2013年。因此,我將在2010年放棄報告並在報告中提取2013年。我期望自動執行此操作,以便報告自動更改報告的年份。

我試過各種記錄選擇公式,但一直沒有能夠找到一個返回所需的年份。這些年份目前是手動調整的。每年的4月1日,我都會手動調整報告,提前3年下降,並開始包括當年的數據。

我在尋找關於如何去做這件事的建議。感謝幫助!

+0

如果報告中,現在來看,這將報告於2010年1月1日至2012年2月12日,如果報告是在4月1日進行的,它將報告2011年1月1日至2013年4月1日?那是對的嗎? – LittleBobbyTables 2013-02-13 03:28:43

+0

是的,目前該報告將顯示2010年1月1日至2012年2月12日。首先在4月份它將繼續報告2010年1月。我必須手動放棄2010年並增加2013年。我的報告顯示3年數據任何給定的時間和4月1日是我放棄3年前的歷史年(2010年)並開始報告2013年的當前年度。 – Trish 2013-02-13 16:00:17

回答

1

我覺得我說錯了適當的日期範圍在我的意見,但如果我理解正確此,我們需要的公式來做到以下幾點:

  • 如果今天運行,該報告將顯示1/1數據/ 2010至12/31/2012。
  • 如果在4月1日運行,它將顯示2011年1月1日至2013年4月1日的數據。

要做到這一點,我想出了followign公式字段:

  • 創建一個名爲DateRangeFrom公式字段。它應該包含:

     
    IF datepart("m", CurrentDate) < 4 THEN
    // Show three years back if we are in the months January - March DateSerial (Year(DateAdd("yyyy", -3, CurrentDate)), 1, 1) ELSE // Show two years back if we are in the months of April - December DateSerial (Year(DateAdd("yyyy", -2, CurrentDate)), 1, 1)

  • 創建名爲DateRangeTo另一個公式。它應該包含:

     
    IF datepart("m", CurrentDate) < 4 THEN
    // Show one year back if we are in the months January - March DateSerial (Year(DateAdd("yyyy", -1, CurrentDate)), 12, 31) ELSE // Show up to the current date if we are in the months of April - December CurrentDate

  • 然後,您可以記錄選擇公式中使用這些領域,像這樣:

     
    {YourTable.YourDateColumn} > {@DateRangeFrom} 
        AND {YourTable.YourDateColumn} <= {@DateRangeTo} 
    

編輯:

如果你只想按年搜索,刪除DateSerial種功能,並改變記錄選擇公式使用>=代替>,你應該會留下:

  • 創建一個公式字段名爲DateRangeFrom。它應該包含:

     
    IF datepart("m", CurrentDate) < 4 THEN
    // Show three years back if we are in the months January - March Year(DateAdd("yyyy", -3, CurrentDate)) ELSE // Show two years back if we are in the months of April - December Year(DateAdd("yyyy", -2, CurrentDate))

  • 創建名爲DateRangeTo另一個公式。它應該包含:

     
    IF datepart("m", CurrentDate) < 4 THEN
    // Show one year back if we are in the months January - March Year(DateAdd("yyyy", -1, CurrentDate)) ELSE // Show up to the current date if we are in the months of April - December Year(CurrentDate)

  • 然後,您可以記錄選擇公式中使用這些領域,像這樣:

     
    {YourTable.YourDateColumn} >= {@DateRangeFrom} 
        AND {YourTable.YourDateColumn} <= {@DateRangeTo} 
    

+0

這看起來不錯!我按照你的建議添加了公式,但它沒有返回任何值,而且我幾乎可以確定這是因爲年份存儲爲4位字符年份,因爲數據來自SQL服務器。我已經嘗試將所有內容轉換爲文本,並且沒有工作,並且沒有任何運氣將我的角色年份轉換爲日期而沒有得到錯誤的日期格式錯誤消息。 – Trish 2013-02-13 18:10:43

+0

你究竟在尋找什麼?一個四位數的年份代碼,一個完整的日期,或者連在一起的東西? – LittleBobbyTables 2013-02-13 18:55:55

+0

這是一個四位數的年份代碼 – Trish 2013-02-13 19:02:05