2014-04-25 39 views
0

我的水晶報表沒有在其「sql查詢」中創建「where子句」。水晶報表ShiftDateTime不會導致生成「Where子句」

在我的「記錄選擇公式」我認爲這種轉移的日期時間的公式: {} @starttime

ShiftDateTime ({MYLABOR.STARTED}, "GMT,0",""); 

***如果我更換{} @starttime與實際開始時間字段從數據庫那麼我得到我的「where子句」,報告速度非常快。

任何人都知道爲什麼該公式會停止生成「where子句」?

這裏是我的「記錄選擇forumal」:

{@StartTime} >= {?FirstPeriodStartDate} 
and 
{@StartTime} <= dateadd("d",14,({?FirstPeriodStartDate})) 
+0

通常情況下,當您定義與數據庫中的日期時間格式不匹配的記錄選擇公式時,會出現這些類型的問題。嘗試寫入與數據庫產生完全相同輸出的記錄選擇。 – Siva

回答

0

水晶不能添加邏輯在WHERE子句因爲ShiftDateTime是Crystal功能,而不是你的數據庫可以使用的有效功能。基本上,Crystal不知道如何將其轉換爲有效的SQL。當您在記錄選擇公式中的數據庫字段上使用Crystal函數時,情況幾乎總是如此。

因此,在這種情況下會發生什麼:Crystal離開WHERE子句邏輯並從數據庫獲取所有記錄,然後在本地應用選擇......這就是爲什麼您會看到如此劇烈的性能下降下;無論他們的輪班開始時間如何,您都可以從數據庫中獲取所有記錄。

+0

謝謝瑞恩!非常有意義。你知道是否有辦法在Crystal中轉換日期時間,以便將其轉換爲有效的sql? –

+0

這取決於您的數據庫,但您需要將時區轉換爲有效的SQL,並將其放入Crystal Reports中的SQL Expression中。然後,您可以使用它來代替您的{@StartTime}公式。 – Ryan