2013-05-31 173 views
0

我已經在Crystal Reports 10中創建了4個自定義函數。這些函數從數據庫記錄中獲取日期時間值,並確定該日期時間屬於當前會計年度或上一會計年度之內。Crystal Reports 10:是否可以通過命令調用自定義函數

這些計算以前是作爲SQL Server上的存儲過程執行的,但我們正在轉移到另一個票據應用程序(託管在供應商站點),並且當前沒有DB來執行這些計算。

下面是這些功能中的一個例子:

// Function name: isCloseDateWithinCurrentFY 
Function (DateTimeVar closeTime) 
// This replaces dbo.fn_FiscalYear 
// Determine if the incident close date falls inside the current Fiscal Year 
DateTimeVar startCurrentFiscalYear; 
NumberVar currentMonth; 
StringVar returnVal; 

currentMonth := Month(CurrentDate); 

If currentMonth >= 2 Then 
    startCurrentFiscalYear := Date(Year(CurrentDate), 2, 1) 
Else 
    startCurrentFiscalYear := Date(Year(CurrentDate)-1, 2, 1); 

If (closeTime >= startCurrentFiscalYear) Then 
    "T" 
Else 
    "F"; 

當這些計算是在SQL Server上,它們是從水晶報表SQL命令

SELECT 
category, 
subcategory, 
close_time, 
tyCount 
FROM (
    SELECT 
     category=ISNULL(UPPER(category),'*Unspecified'), 
     subcategory=ISNULL(UPPER(subcategory),'*Unspecified'), 
     tyCount=SUM(CASE WHEN dbo.fn_FiscalYear(close_time)='T' THEN 1 ELSE 0 END) 
    FROM 
     incident_tickets 
    GROUP BY 
     UPPER(category), 
     UPPER(subcategory) 
) tickets 
WHERE 
    tycmCount>0 
ORDER BY 
    category, 
    subcategory 

利用在我來說,我希望通過撥打我的自定義功能isCloseDateWithinCurrentFY替換對dbo.fn_FiscalYear的呼叫。

但是有可能從SQL命令調用一個自定義函數嗎?

或者是否有其他方法來限制基於在Crystal Report端進行的計算返回的記錄?

TIA

回答

0

沒有,因爲他們是兩個完全不同的東西,你不能使用任何種類的水晶代碼在一個SQL命令。 SQL命令基本上只是Crystal將直接發送到數據庫以便獲取記錄進行處理的查詢,在此之後這些記錄將可用於Crystal代碼。 SQL服務器無法解釋Crystal函數,而Crystal無法將其轉換爲SQL。

這樣做很可能是隻與多個SQL直接硬編碼到查詢替換dbo.fn_FiscalYear最簡單的方法。更具體地說,將isCloseDateWithinCurrentFY轉換爲等效的SQL。

+0

多數民衆贊成我認爲,非常感謝您的投入瑞安。它可能是在Select Expert中使用自定義函數的替代方法嗎? – user100487

+0

您可以使用晶典在選擇專家,但是這不會是儘可能快地將其轉化爲SQL因爲實際的查詢將不會改變,處理仍然會發生在客戶端。這個問題應該有所幫助:http://stackoverflow.com/questions/2678869/round-date-to-fiscal-year – Ryan

相關問題