2012-05-03 38 views
0

我具有其中顯示從稱爲個人公式字段總計數的報告組頭部分中創建報告頁腳總之,在報告的報告中的端部通過省略抑制記錄

if not IsNull({AirBilling.BillingCode}) and {AirBilling.BillingCode} = 'P' then 
    {AirBilling.Gross} 
else 
    0 

現在頁腳我顯示在組頁眉部分中計算的所有個人總計的彙總總數。現在我有一個子報表過濾某些記錄,並根據子報告返回的計數,我在主報告中禁止記錄。我的問題是,我的主要報告考慮了頁腳總數中抑制記錄的計數。當我嘗試在公式字段邏輯中添加一個條件時,如果RowCount> 0,那麼...(如果不是IsNull ....),但是當我嘗試運行報告時,它會給我一個錯誤,已在非經常性欄位上指定'。有沒有一種方法可以省略在頁腳部分計算的壓制記錄。 RowCount是由我用來過濾主報表中的記錄的子報表返回的共享變量值。

+0

這聽起來很hideous-可你也許退一步解釋一下什麼是子報表正在做,我們可以建議您如何也許能夠實現沒有它同樣的結果?使用共享變量來處理這類任務實際上可能會使最棘手的任務複雜化 –

+0

實際上,子報表正在比較來自數據庫的被屏蔽數據和允許用戶在報表中輸入的參數。沒有使用子報表的解決方法,因爲這是如何爲非屏蔽數據創建存儲過程的。所以如果有其他方法可以解決這個問題,而不是使用一個好的子報表。 – developer

+0

如果'{AirBilling.BillingCode}'是''P'',那麼在上面的表達式中'not IsNull({AirBilling.BillingCode})'條件是多餘的,那麼根據定義它是非空的。 –

回答

0

據我瞭解,你想運行一個報表,以確定在主報告中的某些行是否應該被排除(無論是從顯示器和總計)。有兩種方法可以解決此問題:

  • 在主報表的查詢/存儲過程中從子報表中複製邏輯,以便相關記錄在到達Crystal之前被排除。不需要子報表。
  • 交換子報表,並圍繞主報告(假設無論從什麼是目前在什麼是目前的報表,除了用戶輸入的參數需要主報表數據)和通過培訓相關數據什麼現在是作爲參數,主要報告已成爲子報告的內容。

我推薦前一種方法,因爲Crystal作爲格式化數據的工具比操作它更好--SQL通常是一個更好的數據處理工具。

0

纔有可能有另一字段,存隱患,跑的公式,以確定是否該行被抑制或沒有。基於它顯示0或1.然後你可以爲你的行數計數該字段。

另外,您可以建立一個關子報表生成一個已經做跑腿爲你列的存儲過程。然後,您可以使用它返回的數據列來解決此問題。