Hallo,
ich erstelle mit Hilfe von VS 2005 bzw. mit Bussiness Intelligence Projects benutzerdefinierte Report für CRM.
Beim Auslesen/Aufrufen der FilteredViews wird jedes Datum durch die Funktion fn_UTCToTzSpecificLocalTime durch gejagt.
Im letzten Report musste ich mehrfach auf das Feld CreatedOn im FilteredActivityPointer zugreifen.
Da bei jedem Zugriff auf ein Datum (wie oben erwähnt) die Funktion fn_UTCToTzSpecificLocalTime aufgerufen wird, hatte ich große SP bzw. Report Laufzeiten.
Da ich nur über die FillterViews auf die Daten zugreifen soll, stehe ich ein wenig auf dem Schlauch, wie ich die Ausleseperformance der Activitys erhöhen kann.
Ich lagere die benötigten Daten schon extra in eine TempTab aus, um im folgenden Statement auf einen Tabelle mit Indexen zugreifen zu können und nicht mehrfach auf das View zugreifen zu müssen.
Leider nimmt der eine Zugriff auf den View über 2/3 der gesamten Laufzeit des Reports in Anspruch.
Im Folgenden das SQL Statement das mir die Sorgen macht:
Create Table #T_ActivityPointer
(
activityid
uniqueidentifier Primary Key,
regardingobjectidname
nvarchar(400),
regardingobjectid
uniqueidentifier,
activitytypecodename
nvarchar(255),
actualdurationminutes
int,
createdon
datetime,
description nText,
owneridname
nvarchar(160),
Subject nvarchar(200),
activitytypecode
int
)
CREATE
INDEX regardingobjectidname_index
ON #T_ActivityPointer (regardingobjectidname)
CREATE
INDEX regardingobjectid_index
ON #T_ActivityPointer (regardingobjectid)
Create
INDEX activitytypecode_index
ON #T_ActivityPointer (activitytypecode)
Insert
into #T_ActivityPointer
(
activityid
,
regardingobjectidname
,
regardingobjectid
,
activitytypecodename
,
actualdurationminutes
,
createdon
,
description,
owneridname
,
Subject,
activitytypecode
)
Exec
('
Select activityid,
regardingobjectidname,
regardingobjectid,
activitytypecodename,
actualdurationminutes,
createdon,
description,
owneridname,
Subject,
activitytypecode
From '
+ @CrmDBName + '.dbo.FilteredActivityPointer
Where ('
+ @CrmDBName + '.dbo.FilteredActivityPointer.createdon >= ''' + @datDatumBeginn +
'''And ' + @CrmDBName + '.dbo.FilteredActivityPointer.createdon <= ''' + @datDatumEnde + ''')
'
)
Ich freu mich über jede Antwort
Gruß
A. Polito