Microsoft.SystemCenter.DataWarehouse.Report.Script.CustomPerformance (DataWarehouseScript)

Element properties:

Install ScriptRes.Microsoft.SystemCenter.DataWarehouse.Report.Script.CustomPerformance.Install
Uninstall ScriptRes.Microsoft.SystemCenter.DataWarehouse.Report.Script.CustomPerformance.Uninstall
Upgrade ScriptRes.Microsoft.SystemCenter.DataWarehouse.Report.Script.CustomPerformance.Upgrade
Upgrade UnsupportedFalse
AccessibilityPublic

Source Code:

<DataWarehouseScript ID="Microsoft.SystemCenter.DataWarehouse.Report.Script.CustomPerformance" Accessibility="Public">
<Install>
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet] AS RETURN 1')
END
GO

ALTER PROCEDURE [dbo].[Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet]
@StartDate datetime,
@EndDate datetime,
@OptionList xml,
@DataAggregation tinyint = 0,
@LanguageCode varchar(3) = 'ENU',
@UnitScale int
AS
BEGIN

SET NOCOUNT ON

DECLARE @Error int
DECLARE @ExecError int
DECLARE @xmldoc int
DECLARE @RowCount int

CREATE TABLE #OptionList
([Group] int,
GroupTitle nvarchar(255),
Position int,
ChartScale float,
ChartType nvarchar(255),
ChartColor nvarchar(255),
OptionXml xml)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #ObjectList
(ManagedEntityRowId int,
Position int)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #ContainmentObjectList
(ManagedEntityRowId int,
Position int,
[Level] int)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #RelationshipType (
RelationshipTypeRowId int,
[Level] int
)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #InstanceList
(PerformanceRuleInstanceRowId int,
InstanceName nvarchar(256),
Position int)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

/* ------------------------------ */

EXEC @ExecError = sp_xml_preparedocument @xmldoc OUTPUT, @OptionList
SET @Error = @@ERROR
IF @ExecError &lt;&gt; 0 OR @Error &lt;&gt; 0 GOTO QuitError

INSERT INTO #OptionList ([Group], GroupTitle, Position, ChartScale, ChartType, ChartColor, OptionXml)
SELECT [Group], GroupTitle, Position, ChartScale, ChartType, ChartColor, OptionXml
FROM OPENXML(@xmldoc, '/Data/Values/Value', 2) WITH
([Group] int '@mp:parentid',
GroupTitle nvarchar(255) '../@Title',
Position int '@mp:id',
ChartScale float 'Scale',
ChartType nvarchar(255) 'Type',
ChartColor nvarchar(255) 'Color',
OptionXml xml '@mp:xmltext')

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError


INSERT INTO #ContainmentObjectList (ManagedEntityRowId, Position, [Level])
SELECT ManagedEntityRowId, Position, 0
FROM OPENXML(@xmldoc, '/Data/Values/Value/Object', 2) WITH
(ManagedEntityRowId int 'text()',
Position int '@mp:parentid',
[Use] nvarchar(255) '@Use') AS ObjectList
WHERE ISNULL([Use], 'Self') = 'Containment'

SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
IF @Error &lt;&gt; 0 GOTO QuitError

IF (@RowCount &gt; 0)
BEGIN
DECLARE @ContainmentRelationshipTypeRowId int
SELECT @ContainmentRelationshipTypeRowId = RelationshipTypeRowId FROM vRelationshipType WHERE RelationshipTypeSystemName = 'System.Containment'

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

INSERT #RelationshipType(RelationshipTypeRowId, [Level])
SELECT RelationshipTypeRowId, [Level]
FROM dbo.RelationshipDerivedTypeHierarchy(@ContainmentRelationshipTypeRowId, 0)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

DECLARE @CurrentLevel int
SET @CurrentLevel = 1

WHILE (@RowCount &gt; 0)
BEGIN
/* Removed checking for Group creation time before reporting end date, so that Reporting data come for objects irrespective of group's creation time.*/
INSERT INTO #ContainmentObjectList (ManagedEntityRowId, Position, [Level])
SELECT r.TargetManagedEntityRowId, me.Position, @CurrentLevel
FROM Relationship r
JOIN RelationshipManagementGroup rmg ON (r.RelationshipRowId = rmg.RelationshipRowId)
JOIN #RelationshipType rt ON (r.RelationshipTypeRowId = rt.RelationshipTypeRowId)
JOIN #ContainmentObjectList me ON (me.ManagedEntityRowId = r.SourceManagedEntityRowId) AND (me.[Level] = @CurrentLevel - 1)

SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
SET @CurrentLevel = @CurrentLevel + 1

IF @Error &lt;&gt; 0 OR @ExecError &lt;&gt; 0 GOTO QuitError
END
END

INSERT INTO #ObjectList (ManagedEntityRowId, Position)
SELECT ManagedEntityRowId, Position
FROM OPENXML(@xmldoc, '/Data/Values/Value/Object', 2) WITH
(ManagedEntityRowId int 'text()',
Position int '@mp:parentid',
[Use] nvarchar(255) '@Use') AS ObjectList
WHERE ISNULL([Use], 'Self') = 'Self'

UNION

SELECT ManagedEntityRowId, Position
FROM #ContainmentObjectList

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

INSERT INTO #InstanceList (PerformanceRuleInstanceRowId, InstanceName, Position)

SELECT vPerformanceRuleInstance.PerformanceRuleInstanceRowId, vPerformanceRuleInstance.InstanceName, Position
FROM OPENXML(@xmldoc, '/Data/Values/Value/Instance', 2) WITH
(RuleGuid uniqueidentifier '../Rule',
InstanceName nvarchar(256) 'text()',
Position int '@mp:parentid') As InstanceList INNER JOIN
vRule ON (vRule.RuleGuid = InstanceList.RuleGuid) INNER JOIN
vPerformanceRuleInstance ON (vRule.RuleRowId = vPerformanceRuleInstance.RuleRowId) AND
(InstanceList.InstanceName = vPerformanceRuleInstance.InstanceName)

UNION ALL

SELECT vPerformanceRuleInstance.PerformanceRuleInstanceRowId, vPerformanceRuleInstance.InstanceName, Position
FROM OPENXML(@xmldoc, '/Data/Values/Value', 2) WITH
(RuleGuid uniqueidentifier 'Rule',
Position int '@mp:id') As InstanceList INNER JOIN
vRule ON (vRule.RuleGuid = InstanceList.RuleGuid) INNER JOIN
vPerformanceRuleInstance ON (vRule.RuleRowId = vPerformanceRuleInstance.RuleRowId)
WHERE InstanceList.Position NOT IN (SELECT Position FROM OPENXML(@xmldoc, '/Data/Values/Value/Instance', 2)
WITH( Position int '@mp:parentid'))

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

Update #OptionList
Set GroupTitle = [Name]
From
(
Select Me.Name, Se.Position
from #ObjectList Se
Inner Join vManagedEntity Me
On Se.ManagedEntityRowId = Me.ManagedEntityRowId
Inner Join #OptionList Op
On Se.Position = Op.Position
) Upd
Where Upd.Position = #OptionList.Position

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError


/* ------------------------------ */

IF @DataAggregation = 1

SELECT vPerf.DateTime,
vPerf.SampleCount,
(vPerf.AverageValue/@UnitScale) As AverageValue,
(vPerf.MinValue/@UnitScale) As MinValue,
(vPerf.MaxValue/@UnitScale) As MaxValue,
(vPerf.StandardDeviation/@UnitScale) As StandardDeviation,
vPerformanceRuleInstance.RuleRowId,
vPerformanceRuleInstance.InstanceName,
vManagedEntity.ManagedEntityRowId,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.Path,
ISNULL(vDisplayString.Name,vManagedEntityType.ManagedEntityTypeDefaultName) AS DisplayName,
vManagementGroup.ManagementGroupGuid,
vManagementGroup.ManagementGroupDefaultName,
vRule.RuleGuid,
ISNULL(vDisplayStringRule.Name,vRule.RuleDefaultName) AS RuleDisplayName,
vPerformanceRule.MultiInstanceInd,
OptionList.[Group],
OptionList.GroupTitle,
OptionList.Position,
OptionList.ChartScale,
OptionList.ChartType,
OptionList.ChartColor,
OptionList.OptionXml,
vManagedEntityTypeImage.Image
FROM Perf.vPerfDaily as vPerf
INNER JOIN vPerformanceRuleInstance
ON vPerformanceRuleInstance.PerformanceRuleInstanceRowId = vPerf.PerformanceRuleInstanceRowId
INNER JOIN vManagedEntity
ON vPerf.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType
ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
INNER JOIN vManagementGroup
ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId
INNER JOIN vRule
ON vPerformanceRuleInstance.RuleRowId = vRule.RuleRowId
INNER JOIN vPerformanceRule
ON vPerformanceRuleInstance.RuleRowId = vPerformanceRule.RuleRowId
INNER JOIN #InstanceList As InstanceList
ON (vPerformanceRuleInstance.PerformanceRuleInstanceRowId = InstanceList.PerformanceRuleInstanceRowId)
INNER JOIN #OptionList As OptionList
ON (InstanceList.Position = OptionList.Position)
INNER JOIN #ObjectList AS ObjectList
ON (InstanceList.Position = ObjectList.Position)
AND (vManagedEntity.ManagedEntityRowId = ObjectList.ManagedEntityRowId)
LEFT OUTER JOIN vManagedEntityTypeImage
ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
LEFT OUTER JOIN vDisplayString
ON vManagedEntityType.ManagedEntityTypeGuid = vDisplayString.ElementGuid
AND vDisplayString.LanguageCode = @LanguageCode
LEFT OUTER JOIN vDisplayString vDisplayStringRule
ON vRule.RuleGuid = vDisplayStringRule.ElementGuid
AND vDisplayStringRule.LanguageCode = @LanguageCode
WHERE (vPerf.DateTime &gt;= DATEADD(hh, DATEPART(hh, @StartDate), convert(varchar(8), @StartDate, 112)))
AND (vPerf.DateTime &lt; DATEADD(hh, DATEPART(hh, @EndDate), convert(varchar(8), @EndDate, 112)))
ELSE

SELECT vPerf.DateTime, vPerf.SampleCount, (vPerf.AverageValue/@UnitScale) As AverageValue, (vPerf.MinValue/@UnitScale) As MinValue, (vPerf.MaxValue/@UnitScale) As MaxValue, (vPerf.StandardDeviation/@UnitScale) As StandardDeviation,
vPerformanceRuleInstance.RuleRowId, vPerformanceRuleInstance.InstanceName,
vManagedEntity.ManagedEntityRowId, vManagedEntity.ManagedEntityGuid, vManagedEntity.ManagedEntityDefaultName, vManagedEntity.Path,
ISNULL(vDisplayString.Name,vManagedEntityType.ManagedEntityTypeDefaultName) AS DisplayName,
vManagementGroup.ManagementGroupGuid, vManagementGroup.ManagementGroupDefaultName,
vRule.RuleGuid, ISNULL(vDisplayStringRule.Name,vRule.RuleDefaultName) AS RuleDisplayName, vPerformanceRule.MultiInstanceInd,
OptionList.[Group],
OptionList.GroupTitle, OptionList.Position, OptionList.ChartScale, OptionList.ChartType, OptionList.ChartColor, OptionList.OptionXml,
vManagedEntityTypeImage.Image
FROM Perf.vPerfHourly as vPerf INNER JOIN
vPerformanceRuleInstance ON vPerformanceRuleInstance.PerformanceRuleInstanceRowId = vPerf.PerformanceRuleInstanceRowId INNER JOIN
vManagedEntity ON vPerf.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId INNER JOIN
vRule ON vPerformanceRuleInstance.RuleRowId = vRule.RuleRowId INNER JOIN
vPerformanceRule ON vPerformanceRuleInstance.RuleRowId = vPerformanceRule.RuleRowId INNER JOIN
#InstanceList As InstanceList ON (vPerformanceRuleInstance.PerformanceRuleInstanceRowId = InstanceList.PerformanceRuleInstanceRowId)INNER JOIN
#OptionList As OptionList ON (InstanceList.Position = OptionList.Position) INNER JOIN
#ObjectList AS ObjectList ON (InstanceList.Position = ObjectList.Position) AND
(vManagedEntity.ManagedEntityRowId = ObjectList.ManagedEntityRowId) LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon' LEFT OUTER JOIN
vDisplayString ON vManagedEntityType.ManagedEntityTypeGuid = vDisplayString.ElementGuid AND
vDisplayString.LanguageCode = @LanguageCode LEFT OUTER JOIN
vDisplayString vDisplayStringRule ON vRule.RuleGuid = vDisplayStringRule.ElementGuid AND
vDisplayStringRule.LanguageCode = @LanguageCode
WHERE (vPerf.DateTime &gt;= DATEADD(hh, DATEPART(hh, @StartDate), convert(varchar(8), @StartDate, 112))) AND
(vPerf.DateTime &lt; DATEADD(hh, DATEPART(hh, @EndDate), convert(varchar(8), @EndDate, 112)))

SET @Error = @@ERROR

QuitError:
-- remove xml document if opened
IF @xmldoc IS NOT NULL EXEC sp_xml_removedocument @xmldoc
IF ((@Error = 0) AND (@ExecError &lt;&gt; 0)) SET @Error = @ExecError

DROP TABLE #OptionList
DROP TABLE #ObjectList
DROP TABLE #ContainmentObjectList
DROP TABLE #RelationshipType
DROP TABLE #InstanceList

RETURN @Error
END
GO

GRANT EXECUTE ON dbo.[Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet] TO OpsMgrReader
GO

</Install>
<Uninstall>
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet')
BEGIN
DROP PROCEDURE dbo.[Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet]
END
GO

</Uninstall>
<Upgrade>
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet] AS RETURN 1')
END
GO

ALTER PROCEDURE [dbo].[Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet]
@StartDate datetime,
@EndDate datetime,
@OptionList xml,
@DataAggregation tinyint = 0,
@LanguageCode varchar(3) = 'ENU',
@UnitScale int
AS
BEGIN

SET NOCOUNT ON

DECLARE @Error int
DECLARE @ExecError int
DECLARE @xmldoc int
DECLARE @RowCount int

CREATE TABLE #OptionList
([Group] int,
GroupTitle nvarchar(255),
Position int,
ChartScale float,
ChartType nvarchar(255),
ChartColor nvarchar(255),
OptionXml xml)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #ObjectList
(ManagedEntityRowId int,
Position int)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #ContainmentObjectList
(ManagedEntityRowId int,
Position int,
[Level] int)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #RelationshipType (
RelationshipTypeRowId int,
[Level] int
)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

CREATE TABLE #InstanceList
(PerformanceRuleInstanceRowId int,
InstanceName nvarchar(256),
Position int)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

/* ------------------------------ */

EXEC @ExecError = sp_xml_preparedocument @xmldoc OUTPUT, @OptionList
SET @Error = @@ERROR
IF @ExecError &lt;&gt; 0 OR @Error &lt;&gt; 0 GOTO QuitError

INSERT INTO #OptionList ([Group], GroupTitle, Position, ChartScale, ChartType, ChartColor, OptionXml)
SELECT [Group], GroupTitle, Position, ChartScale, ChartType, ChartColor, OptionXml
FROM OPENXML(@xmldoc, '/Data/Values/Value', 2) WITH
([Group] int '@mp:parentid',
GroupTitle nvarchar(255) '../@Title',
Position int '@mp:id',
ChartScale float 'Scale',
ChartType nvarchar(255) 'Type',
ChartColor nvarchar(255) 'Color',
OptionXml xml '@mp:xmltext')

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError


INSERT INTO #ContainmentObjectList (ManagedEntityRowId, Position, [Level])
SELECT ManagedEntityRowId, Position, 0
FROM OPENXML(@xmldoc, '/Data/Values/Value/Object', 2) WITH
(ManagedEntityRowId int 'text()',
Position int '@mp:parentid',
[Use] nvarchar(255) '@Use') AS ObjectList
WHERE ISNULL([Use], 'Self') = 'Containment'

SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
IF @Error &lt;&gt; 0 GOTO QuitError

IF (@RowCount &gt; 0)
BEGIN
DECLARE @ContainmentRelationshipTypeRowId int
SELECT @ContainmentRelationshipTypeRowId = RelationshipTypeRowId FROM vRelationshipType WHERE RelationshipTypeSystemName = 'System.Containment'

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

INSERT #RelationshipType(RelationshipTypeRowId, [Level])
SELECT RelationshipTypeRowId, [Level]
FROM dbo.RelationshipDerivedTypeHierarchy(@ContainmentRelationshipTypeRowId, 0)

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

DECLARE @CurrentLevel int
SET @CurrentLevel = 1

WHILE (@RowCount &gt; 0)
BEGIN
/* Removed checking for Group creation time before reporting end date, so that Reporting data come for objects irrespective of group's creation time.*/
INSERT INTO #ContainmentObjectList (ManagedEntityRowId, Position, [Level])
SELECT r.TargetManagedEntityRowId, me.Position, @CurrentLevel
FROM Relationship r
JOIN RelationshipManagementGroup rmg ON (r.RelationshipRowId = rmg.RelationshipRowId)
JOIN #RelationshipType rt ON (r.RelationshipTypeRowId = rt.RelationshipTypeRowId)
JOIN #ContainmentObjectList me ON (me.ManagedEntityRowId = r.SourceManagedEntityRowId) AND (me.[Level] = @CurrentLevel - 1)

SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
SET @CurrentLevel = @CurrentLevel + 1

IF @Error &lt;&gt; 0 OR @ExecError &lt;&gt; 0 GOTO QuitError
END
END

INSERT INTO #ObjectList (ManagedEntityRowId, Position)
SELECT ManagedEntityRowId, Position
FROM OPENXML(@xmldoc, '/Data/Values/Value/Object', 2) WITH
(ManagedEntityRowId int 'text()',
Position int '@mp:parentid',
[Use] nvarchar(255) '@Use') AS ObjectList
WHERE ISNULL([Use], 'Self') = 'Self'

UNION

SELECT ManagedEntityRowId, Position
FROM #ContainmentObjectList

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

INSERT INTO #InstanceList (PerformanceRuleInstanceRowId, InstanceName, Position)

SELECT vPerformanceRuleInstance.PerformanceRuleInstanceRowId, vPerformanceRuleInstance.InstanceName, Position
FROM OPENXML(@xmldoc, '/Data/Values/Value/Instance', 2) WITH
(RuleGuid uniqueidentifier '../Rule',
InstanceName nvarchar(256) 'text()',
Position int '@mp:parentid') As InstanceList INNER JOIN
vRule ON (vRule.RuleGuid = InstanceList.RuleGuid) INNER JOIN
vPerformanceRuleInstance ON (vRule.RuleRowId = vPerformanceRuleInstance.RuleRowId) AND
(InstanceList.InstanceName = vPerformanceRuleInstance.InstanceName)

UNION ALL

SELECT vPerformanceRuleInstance.PerformanceRuleInstanceRowId, vPerformanceRuleInstance.InstanceName, Position
FROM OPENXML(@xmldoc, '/Data/Values/Value', 2) WITH
(RuleGuid uniqueidentifier 'Rule',
Position int '@mp:id') As InstanceList INNER JOIN
vRule ON (vRule.RuleGuid = InstanceList.RuleGuid) INNER JOIN
vPerformanceRuleInstance ON (vRule.RuleRowId = vPerformanceRuleInstance.RuleRowId)
WHERE InstanceList.Position NOT IN (SELECT Position FROM OPENXML(@xmldoc, '/Data/Values/Value/Instance', 2)
WITH( Position int '@mp:parentid'))

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError

Update #OptionList
Set GroupTitle = [Name]
From
(
Select Me.Name, Se.Position
from #ObjectList Se
Inner Join vManagedEntity Me
On Se.ManagedEntityRowId = Me.ManagedEntityRowId
Inner Join #OptionList Op
On Se.Position = Op.Position
) Upd
Where Upd.Position = #OptionList.Position

SET @Error = @@ERROR
IF @Error &lt;&gt; 0 GOTO QuitError


/* ------------------------------ */

IF @DataAggregation = 1

SELECT vPerf.DateTime,
vPerf.SampleCount,
(vPerf.AverageValue/@UnitScale) As AverageValue,
(vPerf.MinValue/@UnitScale) As MinValue,
(vPerf.MaxValue/@UnitScale) As MaxValue,
(vPerf.StandardDeviation/@UnitScale) As StandardDeviation,
vPerformanceRuleInstance.RuleRowId,
vPerformanceRuleInstance.InstanceName,
vManagedEntity.ManagedEntityRowId,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.Path,
ISNULL(vDisplayString.Name,vManagedEntityType.ManagedEntityTypeDefaultName) AS DisplayName,
vManagementGroup.ManagementGroupGuid,
vManagementGroup.ManagementGroupDefaultName,
vRule.RuleGuid,
ISNULL(vDisplayStringRule.Name,vRule.RuleDefaultName) AS RuleDisplayName,
vPerformanceRule.MultiInstanceInd,
OptionList.[Group],
OptionList.GroupTitle,
OptionList.Position,
OptionList.ChartScale,
OptionList.ChartType,
OptionList.ChartColor,
OptionList.OptionXml,
vManagedEntityTypeImage.Image
FROM Perf.vPerfDaily as vPerf
INNER JOIN vPerformanceRuleInstance
ON vPerformanceRuleInstance.PerformanceRuleInstanceRowId = vPerf.PerformanceRuleInstanceRowId
INNER JOIN vManagedEntity
ON vPerf.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType
ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
INNER JOIN vManagementGroup
ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId
INNER JOIN vRule
ON vPerformanceRuleInstance.RuleRowId = vRule.RuleRowId
INNER JOIN vPerformanceRule
ON vPerformanceRuleInstance.RuleRowId = vPerformanceRule.RuleRowId
INNER JOIN #InstanceList As InstanceList
ON (vPerformanceRuleInstance.PerformanceRuleInstanceRowId = InstanceList.PerformanceRuleInstanceRowId)
INNER JOIN #OptionList As OptionList
ON (InstanceList.Position = OptionList.Position)
INNER JOIN #ObjectList AS ObjectList
ON (InstanceList.Position = ObjectList.Position)
AND (vManagedEntity.ManagedEntityRowId = ObjectList.ManagedEntityRowId)
LEFT OUTER JOIN vManagedEntityTypeImage
ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
LEFT OUTER JOIN vDisplayString
ON vManagedEntityType.ManagedEntityTypeGuid = vDisplayString.ElementGuid
AND vDisplayString.LanguageCode = @LanguageCode
LEFT OUTER JOIN vDisplayString vDisplayStringRule
ON vRule.RuleGuid = vDisplayStringRule.ElementGuid
AND vDisplayStringRule.LanguageCode = @LanguageCode
WHERE (vPerf.DateTime &gt;= DATEADD(hh, DATEPART(hh, @StartDate), convert(varchar(8), @StartDate, 112)))
AND (vPerf.DateTime &lt; DATEADD(hh, DATEPART(hh, @EndDate), convert(varchar(8), @EndDate, 112)))
ELSE

SELECT vPerf.DateTime, vPerf.SampleCount, (vPerf.AverageValue/@UnitScale) As AverageValue, (vPerf.MinValue/@UnitScale) As MinValue, (vPerf.MaxValue/@UnitScale) As MaxValue, (vPerf.StandardDeviation/@UnitScale) As StandardDeviation,
vPerformanceRuleInstance.RuleRowId, vPerformanceRuleInstance.InstanceName,
vManagedEntity.ManagedEntityRowId, vManagedEntity.ManagedEntityGuid, vManagedEntity.ManagedEntityDefaultName, vManagedEntity.Path,
ISNULL(vDisplayString.Name,vManagedEntityType.ManagedEntityTypeDefaultName) AS DisplayName,
vManagementGroup.ManagementGroupGuid, vManagementGroup.ManagementGroupDefaultName,
vRule.RuleGuid, ISNULL(vDisplayStringRule.Name,vRule.RuleDefaultName) AS RuleDisplayName, vPerformanceRule.MultiInstanceInd,
OptionList.[Group],
OptionList.GroupTitle, OptionList.Position, OptionList.ChartScale, OptionList.ChartType, OptionList.ChartColor, OptionList.OptionXml,
vManagedEntityTypeImage.Image
FROM Perf.vPerfHourly as vPerf INNER JOIN
vPerformanceRuleInstance ON vPerformanceRuleInstance.PerformanceRuleInstanceRowId = vPerf.PerformanceRuleInstanceRowId INNER JOIN
vManagedEntity ON vPerf.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId INNER JOIN
vRule ON vPerformanceRuleInstance.RuleRowId = vRule.RuleRowId INNER JOIN
vPerformanceRule ON vPerformanceRuleInstance.RuleRowId = vPerformanceRule.RuleRowId INNER JOIN
#InstanceList As InstanceList ON (vPerformanceRuleInstance.PerformanceRuleInstanceRowId = InstanceList.PerformanceRuleInstanceRowId)INNER JOIN
#OptionList As OptionList ON (InstanceList.Position = OptionList.Position) INNER JOIN
#ObjectList AS ObjectList ON (InstanceList.Position = ObjectList.Position) AND
(vManagedEntity.ManagedEntityRowId = ObjectList.ManagedEntityRowId) LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon' LEFT OUTER JOIN
vDisplayString ON vManagedEntityType.ManagedEntityTypeGuid = vDisplayString.ElementGuid AND
vDisplayString.LanguageCode = @LanguageCode LEFT OUTER JOIN
vDisplayString vDisplayStringRule ON vRule.RuleGuid = vDisplayStringRule.ElementGuid AND
vDisplayStringRule.LanguageCode = @LanguageCode
WHERE (vPerf.DateTime &gt;= DATEADD(hh, DATEPART(hh, @StartDate), convert(varchar(8), @StartDate, 112))) AND
(vPerf.DateTime &lt; DATEADD(hh, DATEPART(hh, @EndDate), convert(varchar(8), @EndDate, 112)))

SET @Error = @@ERROR

QuitError:
-- remove xml document if opened
IF @xmldoc IS NOT NULL EXEC sp_xml_removedocument @xmldoc
IF ((@Error = 0) AND (@ExecError &lt;&gt; 0)) SET @Error = @ExecError

DROP TABLE #OptionList
DROP TABLE #ObjectList
DROP TABLE #ContainmentObjectList
DROP TABLE #RelationshipType
DROP TABLE #InstanceList

RETURN @Error
END
GO

GRANT EXECUTE ON dbo.[Microsoft_SystemCenter_DataWarehouse_Report_CustomPerformanceDataGet] TO OpsMgrReader
GO

</Upgrade>
</DataWarehouseScript>