Microsoft.SystemCenter.OperationsManager.Reports.2007.Script.DataVolumesDetailsByWorkflowDataGet (DataWarehouseScript)

Element properties:

Install ScriptRes.Microsoft.SystemCenter.OperationsManager.Reports.2007.Script.DataVolumesDetailsByWorkflowDataGet.Install
Uninstall ScriptRes.Microsoft.SystemCenter.OperationsManager.Reports.2007.Script.DataVolumesDetailsByWorkflowDataGet.Uninstall
Upgrade ScriptRes.Microsoft.SystemCenter.OperationsManager.Reports.2007.Script.DataVolumesDetailsByWorkflowDataGet.Upgrade
Upgrade UnsupportedFalse
AccessibilityInternal

Source Code:

<DataWarehouseScript ID="Microsoft.SystemCenter.OperationsManager.Reports.2007.Script.DataVolumesDetailsByWorkflowDataGet" Accessibility="Internal">
<Install>
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Microsoft_SystemCenter_DataWarehouse_Report_DataVolumenDetailsByWrkDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Microsoft_SystemCenter_DataWarehouse_Report_DataVolumenDetailsByWrkDataGet] AS RETURN 1')
END
GO

ALTER PROCEDURE dbo.[Microsoft_SystemCenter_DataWarehouse_Report_DataVolumenDetailsByWrkDataGet]
@StartDate Datetime,
@EndDate Datetime,
@AdjHours int,
@MPXML xml,
@DTXML xml,
@MGPXML xml,
@TopN int,
@LanguageCode varchar(3)

AS
BEGIN
SET NOCOUNT ON

Declare @Error int,
@ShowAlerts bit,
@ShowEvents bit,
@ShowPerfs bit,
@ShowStates bit,
@ShowDiscs bit,
@TotVol bigint,
@DaysNumber bigint,
@SumX bigint,
@SumX2 bigint,
@APMDataExists bit

Set @DaysNumber = datediff(dd, @StartDate, @EndDate) +1

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

Create Table #TmpOpsWrk
(
OptionId int
)

Create Table #TmpMPsWk
(
ManagementPackRowId int,
ManagementPackSystemName nvarchar(512)
)

Create Table #TmpMGPWk
(
ManagementGroupRowId int,
ManagementGroupDefaultName nvarchar(512)
)

Create Table #TempFilterdMpsWrk
(
ManagementPackRowId int
)

Create Table #TmpDataCountsWrk
(
DataType int,
[Type] int,
ManagementPackRowId int,
WorkFlowId int,
WorkflowDisplay nvarchar(512),
Date datetime,
DataCount bigint
)

Create Table #TempDaysWrk
(
DayNumber bigint,
Date datetime
)

Create Table #TempTopCalWrk
(
WorkFlowId int,
CntDys bigint,
SumXY bigint,
SumY bigint,
SumX bigint
)

Create Table #TempBottomCalWrk
(
WorkFlowId int,
CntDys bigint,
SumX2 bigint,
SumXxSumX bigint
)

Create Table #TempCalByWrk
(
WorkFlowId int,
TopVal bigint,
BottomVal bigint,
Slope decimal(38,2)
)

Create Table #TmpFilCalDtsWrk
(
DateValue datetime
)

Create Table #TempTopNMpsWrk
(
ManagementPackRowId int
)
If @TopN &lt;= 0
BEGIN
Select 0 As RowNumber,
WorkFlowId,
WorkflowDisplay,
0.00 As PrcVol,
0.00 As Slope,
0.00 As CountByWorkflow
From #TmpDataCountsWrk
END
ELSE
BEGIN

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

--Options to Use
Insert into #TmpOpsWrk
Select OptList.OptionId.value('.','int') as OptionId
From @DTXML.nodes('/*/Value') As OptList(OptionId)
Order By OptionId

Select @APMDataExists = Case
When EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[apm].[EVENT]') AND type in (N'U')) Then 1
Else 0
End

Select @ShowDiscs = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 1

Select @ShowAlerts = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0

END
From #TmpOpsWrk where OptionId = 2

Select @ShowPerfs = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 3

Select @ShowEvents = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 4


Select @ShowStates = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 5

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


--Get Mp To Filter
Insert Into #TmpMPsWk
Select Mp.ManagementPackRowId,
Mp.ManagementPackSystemName
From @MPXML.nodes('/*/Value') As MpList(ManagementPackRowId)
Inner Join vManagementPack (NoLock) Mp
On Mp.ManagementPackRowId = MpList.ManagementPackRowId.value('.','int')
Order By ManagementPackRowId

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

--Get MANAGEMENT GROUPS To Filter
Insert Into #TmpMGPWk
Select Mgp.ManagementGroupRowId,
Mgp.ManagementGroupDefaultName
From @MGPXML.nodes('/*/Value') As MgpList(ManagementGroupGuid)
Inner Join vManagementGroup (NoLock) Mgp
On Mgp.ManagementGroupGuid = MgpList.ManagementGroupGuid.value('.','uniqueidentifier')
Order By ManagementGroupRowId

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

--Get Filtered ManagementPackIds
Insert into #TempFilterdMpsWrk
Select distinct Mpc.ManagementPackRowId
From #TmpMPsWk Mpc
Inner Join vManagementPackVersion Mpv
On Mpv.ManagementPackRowId = Mpc.ManagementPackRowId
Inner Join vManagementGroupManagementPackVersion Mgmpv
On Mgmpv.ManagementPackVersionRowId = Mpv.ManagementPackVersionRowId
Inner Join #TmpMGPWk (NoLock) Mgp
On Mgp.ManagementGroupRowId = Mgmpv.ManagementGroupRowId

--Filtered Dates from Calendar
Insert into #TmpFilCalDtsWrk
Select Dt.DateValue
From vDate Dt
Where CONVERT(VARCHAR(8), Dt.DateValue, 112) BETWEEN CONVERT(VARCHAR(8) , @StartDate, 112) AND CONVERT(VARCHAR(8) , @EndDate, 112)

If @ShowDiscs = 1
BEGIN
--Create Temp Table to Store Filtered Data
Create Table #TmpDisFilWrk
(
ManagedEntityTypeRowId int,
DateValue datetime,
DataCount bigint
)

--Counts By Date of Initial Discoveries base on Managed Entities
Insert into #TmpDisFilWrk
Select Me.ManagedEntityTypeRowId,
DateAdd(hh,@AdjHours,Memg.FromDateTime) as FromDateTime,
Count(Me.ManagedEntityRowId) as DataCount
From vManagedEntity Me
Inner Join vManagedEntityType Met
On Me.ManagedEntityTypeRowId = Met.ManagedEntityTypeRowId
Inner Join vManagedEntityManagementGroup Memg
On Me.ManagedEntityRowId = Memg.ManagedEntityRowId
And Me.ManagementGroupRowId in (Select ManagementGroupRowId From #TmpMGPWk)
Where DateAdd(hh,@AdjHours,Memg.FromDateTime) BETWEEN @StartDate AND @EndDate
Group By Me.ManagedEntityTypeRowId, Memg.FromDateTime

--Counts By Date of Initial Discoveries base on Type Managed Entities
Insert into #TmpDisFilWrk
Select Me.ManagedEntityTypeRowId,
DateAdd(hh,@AdjHours,Tmt.FromDateTime) as FromDateTime,
Count(Me.ManagedEntityRowId) as DataCount
From vManagedEntity Me
Inner Join vTypedManagedEntity Tmt
On Me.ManagedEntityTypeRowId = Tmt.ManagedEntityTypeRowId
And Me.ManagedEntityRowId = Tmt.ManagedEntityRowId
Inner Join vManagedEntityManagementGroup Memg
On Me.ManagedEntityRowId = Memg.ManagedEntityRowId
And Me.ManagementGroupRowId in (Select ManagementGroupRowId From #TmpMGPWk)
Where DateAdd(hh,@AdjHours,Tmt.FromDateTime) BETWEEN @StartDate AND @EndDate
Group By Me.ManagedEntityTypeRowId, Tmt.FromDateTime

--Counts By Date of Properties Changes Submission base on Managed Entities
Insert into #TmpDisFilWrk
Select Me.ManagedEntityTypeRowId,
DateAdd(hh,@AdjHours,Mep.FromDateTime) as FromDateTime,
Count(Mep.ManagedEntityRowId) as DataCount
From vManagedEntityProperty Mep
Inner Join vManagedEntity Me
On Mep.ManagedEntityRowId = Me.ManagedEntityRowId
And Me.ManagementGroupRowId in (Select ManagementGroupRowId From #TmpMGPWk)
Where DateAdd(hh,@AdjHours,Mep.FromDateTime) BETWEEN @StartDate AND @EndDate
Group By Me.ManagedEntityTypeRowId, Mep.FromDateTime

--Discovery Count By MP
Insert into #TmpDataCountsWrk
Select 1 as DataType,
1 as [Type],
Mpc.ManagementPackRowId,
Mtp.ManagedEntityTypeRowId as WorkFlowId,
COALESCE(Loc.Name,Mtp.ManagedEntityTypeDefaultName) as WorkFlowDisplay,
Dt.DateValue as [Date],
IsNull(SUM(Dis.DataCount),0) as DataCount
From #TmpDisFilWrk Dis
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Dis.DateValue, 112)
Inner Join vManagedEntityType Mtp
On Mtp.ManagedEntityTypeRowId = Dis.ManagedEntityTypeRowId
Inner Join #TempFilterdMpsWrk Mpc
On Mpc.ManagementPackRowId = Mtp.ManagementPackRowId
Left Outer Join vDisplayString Loc
On Loc.ElementGuid = Mtp.ManagedEntityTypeGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Mtp.ManagedEntityTypeRowId, Loc.Name, Mtp.ManagedEntityTypeDefaultName, Dt.DateValue

IF OBJECT_ID('tempdb..#TmpDisFilWrk') IS NOT NULL
BEGIN
drop table #TmpDisFilWrk
END
END

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

If @ShowAlerts = 1
BEGIN
--Alerts Count by WorkFlow
Insert into #TmpDataCountsWrk
Select 2 as DataType,
Case
When Rul.RuleRowId is not null Then 2
When Mon.MonitorRowId is not null Then 3
End as [Type],
Mpc.ManagementPackRowId,
COALESCE(Mon.MonitorRowId,Rul.RuleRowId) as WorkFlowId,
COALESCE(Loc.Name,COALESCE(Mon.MonitorDefaultName,Rul.RuleDefaultName)) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(Count(Distinct Alr.AlertGuid),0) as DataCount
From Alert.vAlert (NoLock) Alr
LEFT OUTER JOIN vMonitor (NoLock) Mon
ON Mon.MonitorRowId = Alr.WorkflowRowId
AND Alr.MonitorAlertInd = 1
LEFT OUTER JOIN vRule Rul
ON Rul.RuleRowId = Alr.WorkflowRowId
AND Alr.MonitorAlertInd = 0
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = Alr.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , DateAdd(hh,@AdjHours,Alr.RaisedDateTime), 112)
Inner Join #TempFilterdMpsWrk Mpc
On Mon.ManagementPackRowId = Mpc.ManagementPackRowId
Or Rul.ManagementPackRowId = Mpc.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = COALESCE(Mon.MonitorGuid, Rul.RuleGuid)
And Loc.LanguageCode = @LanguageCode
where DateAdd(hh,@AdjHours,Alr.RaisedDateTime) BETWEEN @StartDate AND @EndDate
Group By Mpc.ManagementPackRowId, Mon.MonitorRowId, Rul.RuleRowId, Mon.MonitorDefaultName, Rul.RuleDefaultName, Loc.Name, Dt.DateValue
END

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

If @ShowPerfs = 1
BEGIN
--Create Temp Filtered Perf Table
Create Table #TempPrfDtFilWrk
(
PerformanceRuleInstanceRowId int,
SampleCount bigint,
[DateTime] datetime
)

--Getting Filtered Perfs Data Count By Dates
Insert Into #TempPrfDtFilWrk
Select PerfCTE.PerformanceRuleInstanceRowId,
SUM(PerfCTE.SampleCount) As SampleCount,
DateAdd(hh,@AdjHours,PerfCTE.DateTime) as [DateTime]
From Perf.vPerfDaily PerfCTE
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = PerfCTE.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Where CONVERT(VARCHAR(8), DateAdd(hh,@AdjHours,PerfCTE.DateTime), 112) BETWEEN CONVERT(VARCHAR(8) , @StartDate, 112) AND CONVERT(VARCHAR(8) , @EndDate, 112)
Group By PerfCTE.PerformanceRuleInstanceRowId, PerfCTE.DateTime

--Perf Count By WorkFlow
Insert into #TmpDataCountsWrk
Select Distinct 3 as DataType,
2 as [Type],
Mpc.ManagementPackRowId,
Rul.RuleRowId as WorkFlowId,
COALESCE(Loc.Name,Rul.RuleDefaultName) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(SUM(Prf.SampleCount),0) as CountByDate
From #TempPrfDtFilWrk Prf
Inner Join vPerformanceRuleInstance (NoLock) Pri
On Prf.PerformanceRuleInstanceRowId = Pri.PerformanceRuleInstanceRowId
Inner Join vRule (NoLock) Rul
ON Pri.RuleRowId = Rul.RuleRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Prf.[DateTime], 112)
Inner Join #TempFilterdMpsWrk (NoLock) Mpc
On Mpc.ManagementPackRowId = Rul.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = Rul.RuleGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Rul.RuleRowId, Loc.Name, Rul.RuleDefaultName, Dt.DateValue

IF OBJECT_ID('tempdb..#TempPrfDtFilWrk') IS NOT NULL
BEGIN
drop table #TempPrfDtFilWrk
END
END

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

If @ShowEvents = 1
BEGIN
--Create Temp Filtered Events Table
Create Table #TempEvtDtFilWrk
(
RuleRowId int,
EventCount bigint,
[DateTime] datetime
)

--Getting APM Events If Exists Table
If @APMDataExists = 1
BEGIN
Insert Into #TempEvtDtFilWrk
SELECT RL.RuleRowId,
COUNT(EvtAPM.EventId),
DateAdd(hh,@AdjHours,EvtAPM.UTCEVENTDATE) as DateValue
FROM vRule RL
Inner Join vManagementPack MP
On RL.ManagementPackRowId = MP.ManagementPackRowId
And MP.ManagementPackSystemName = 'Microsoft.SystemCenter.Apm.Infrastructure'
And RL.RuleSystemName = 'Microsoft.SystemCenter.Apm.CollectApplicationDiagnosticsEvents'
Inner Join apm.EVENT EvtAPM
On RL.RuleRowId IS NOT NULL
Where DateAdd(hh,@AdjHours,EvtAPM.UTCEVENTDATE) BETWEEN @StartDate AND @EndDate
Group By RL.RuleRowId, EvtAPM.UTCEVENTDATE


Insert Into #TempEvtDtFilWrk
SELECT RL.RuleRowId,
COUNT(EvtAPM.CSEVENTID),
DateAdd(hh,@AdjHours,EvtAPM.UTCDATE) as DateValue
FROM vRule RL
Inner Join vManagementPack MP
On RL.ManagementPackRowId = MP.ManagementPackRowId
And MP.ManagementPackSystemName = 'Microsoft.SystemCenter.Apm.Infrastructure'
And RL.RuleSystemName = 'Microsoft.SystemCenter.Apm.CollectApplicationDiagnosticsEvents'
Inner Join apm.CSEVENT EvtAPM
On RL.RuleRowId IS NOT NULL
Where DateAdd(hh,@AdjHours,EvtAPM.UTCDATE) BETWEEN @StartDate AND @EndDate
Group By RL.RuleRowId, EvtAPM.UTCDATE

END

--Getting Filtered Events Data Count By Dates
Insert Into #TempEvtDtFilWrk
SELECT ErlCTE.RuleRowId,
COUNT(ErlCTE.EventOriginId),
DateAdd(hh,@AdjHours,EvtCTE.DateTime) as DateValue
FROM Event.vEvent EvtCTE
Inner Join Event.vEventRule ErlCTE
On EvtCTE.EventOriginId = ErlCTE.EventOriginId
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = ErlCTE.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Where DateAdd(hh,@AdjHours,EvtCTE.DateTime) BETWEEN @StartDate AND @EndDate
Group By ErlCTE.RuleRowId, EvtCTE.DateTime

Insert into #TmpDataCountsWrk
Select 4 as DataType,
2 as [Type],
Mpc.ManagementPackRowId,
Evt.RuleRowId as WorkFlowId,
COALESCE(Loc.Name,Rul.RuleSystemName) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(SUM(Evt.EventCount),0) as CountByDate
From #TempEvtDtFilWrk Evt
Inner Join vRule Rul
ON Evt.RuleRowId = Rul.RuleRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Evt.[DateTime], 112)
Inner Join #TempFilterdMpsWrk Mpc
On Mpc.ManagementPackRowId = Rul.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = Rul.RuleGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Evt.RuleRowId, Loc.Name, Rul.RuleSystemName, Dt.DateValue

IF OBJECT_ID('tempdb..#TempEvtDtFilWrk') IS NOT NULL
BEGIN
drop table #TempEvtDtFilWrk
END
END

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

If @ShowStates = 1
BEGIN
--Create Temp Filtered State Table
Create Table #TempSteDtFilWrk
(
MonitorRowId int,
[DateTime] datetime,
DataCount bigint
)

--Getting Filtered State changes Count By Dates
Insert Into #TempSteDtFilWrk
Select Mn.MonitorRowId,
DateAdd(hh,@AdjHours,SteCTE.DateTime) as DateValue,
Count(SteCTE.ManagedEntityMonitorRowId) as DataCount
From State.vStateRaw SteCTE
Inner Join vManagedEntityMonitor Mn
On Mn.ManagedEntityMonitorRowId = SteCTE.ManagedEntityMonitorRowId
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = Mn.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Where DateAdd(hh,@AdjHours,SteCTE.DateTime) BETWEEN @StartDate AND @EndDate
Group By Mn.MonitorRowId, SteCTE.DateTime

--States Count By WorkFlow
Insert into #TmpDataCountsWrk
Select 5 as DataType,
3 as [Type],
Mpc.ManagementPackRowId,
Ste.MonitorRowId as WorkFlowId,
COALESCE(Loc.Name,Mon.MonitorDefaultName) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(SUM(Ste.DataCount),0) as CountByDate
From #TempSteDtFilWrk Ste
Inner Join vMonitor Mon
On Mon.MonitorRowId = Ste.MonitorRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Ste.[DateTime], 112)
Inner Join #TempFilterdMpsWrk Mpc
On Mpc.ManagementPackRowId = Mon.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = Mon.MonitorGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Ste.MonitorRowId, Loc.Name, Mon.MonitorDefaultName, Dt.DateValue

IF OBJECT_ID('tempdb..#TempSteDtFil') IS NOT NULL
BEGIN
drop table #TempSteDtFil
END
END

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

--Calculate Total Volume
Select @TotVol = IsNull(Sum(DataCount),0) From #TmpDataCountsWrk

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

--Calculate SumX
Insert into #TempDaysWrk
Select ROW_NUMBER() OVER(ORDER BY DateValue) AS DayNumber,
DateValue as Date
From #TmpFilCalDtsWrk (NoLock) Dt

Select @SumX = SUM(DayNumber) from #TempDaysWrk

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

--Calculate SumX2
Select @SumX2 = Sum(x0.DayNumber*x1.DayNumber)
From #TempDaysWrk x0
Inner Join #TempDaysWrk x1
On x0.DayNumber = x1.DayNumber

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

--Calculate Top Values for Equation by WorkFlow
Insert into #TempTopCalWrk
Select Tot.WorkFlowId,
@DaysNumber as CntDys,
Sum(Tot.SXY) as SumXY,
Sum(Tot.DataCount) as SumY,
@SumX as SumX
From
(
Select CnWk.WorkFlowId,
CnWk.Date,
Sum(CnDy.DayNumber*CnWk.DataCount) as SXY,
Sum(CnWk.DataCount) as DataCount
From #TmpDataCountsWrk CnWk
Inner Join #TempDaysWrk CnDy
On CnWk.Date = CnDy.Date
Group by CnWk.WorkFlowId, CnWk.Date
) as Tot
Group by Tot.WorkFlowId
Order by Tot.WorkFlowId

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

--Calculate Bottom Values for Equation by WorkFlow
Insert into #TempBottomCalWrk
Select WorkFlowId,
@DaysNumber as CntDys,
@SumX2 as SumX2,
@SumX * @SumX as SumXxSumX
From #TmpDataCountsWrk CnWk
Group by CnWk.WorkFlowId

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

--Calculate Final Result of Equation by WorkFlow
Insert into #TempCalByWrk
Select Tp.WorkFlowId,
((Tp.CntDys * Tp.SumXY)-(Tp.SumY * Tp.SumX)) as TopVal,
((Bt.CntDys * Bt.SumX2)-SumXxSumX) as BottomVal,
Case
When ((Bt.CntDys * Bt.SumX2)-SumXxSumX) &gt; 0 Then (CAST(((Tp.CntDys * Tp.SumXY)-(Tp.SumY * Tp.SumX)) as Decimal) / CAST(((Bt.CntDys * Bt.SumX2)-SumXxSumX) as Decimal))
Else 0.00
End As Slope
From #TempTopCalWrk Tp
Inner Join #TempBottomCalWrk Bt
On Tp.WorkFlowId = Bt.WorkFlowId
Order By Tp.WorkFlowId

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

Insert into #TempTopNMpsWrk
Select Top (@TopN) Mbv.ManagementPackRowId
From
(
Select
Mpc.ManagementPackRowId,
Case
When @TotVol = 0 Then 0
Else ( ( CAST( ( IsNull(Sum(Cnts.DataCount),0) ) AS decimal)/@TotVol ) * 100 )
End AS PrcVol
From #TempFilterdMpsWrk Mpc
Left Outer Join #TmpDataCountsWrk Cnts
On Mpc.ManagementPackRowId = Cnts.ManagementPackRowId
Group By Mpc.ManagementPackRowId
) As Mbv
Order By Mbv.PrcVol desc

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

--Final Results
Select Top (@TopN)
ROW_NUMBER() OVER(ORDER BY Cnts.PrcVol Desc) AS 'RowNumber',
Cnts.[Type],
Cnts.WorkFlowId,
Cnts.WorkFlowDisplay,
Cnts.PrcVol,
IsNull(Cl.Slope,0) as Slope,
Cnts.CountByWorkflow
From
(
Select
[Type],
WorkFlowId,
WorkFlowDisplay,
Case
When @TotVol = 0 Then 0
Else ((CAST(Sum(IsNull(DataCount,0)) AS decimal)/@TotVol)*100)
End AS PrcVol,
Sum(IsNull(DataCount,0)) as CountByWorkflow
From #TmpDataCountsWrk CntWk
Inner Join #TempTopNMpsWrk Mpv
On Mpv.ManagementPackRowId = IsNull(CntWk.ManagementPackRowId,Mpv.ManagementPackRowId)
Group By
[Type],
WorkFlowId,
WorkFlowDisplay

) As Cnts
Left Outer Join #TempCalByWrk Cl
On Cl.WorkFlowId = Cnts.WorkFlowId
Order by Cnts.PrcVol Desc

END

QuitError:
IF OBJECT_ID('tempdb..#TmpOpsWrk') IS NOT NULL
BEGIN
Drop Table #TmpOpsWrk
END

IF OBJECT_ID('tempdb..#TmpMPsWk') IS NOT NULL
BEGIN
Drop Table #TmpMPsWk
END

IF OBJECT_ID('tempdb..#TmpMGPWk') IS NOT NULL
BEGIN
Drop Table #TmpMGPWk
END

IF OBJECT_ID('tempdb..#TempFilterdMpsWrk') IS NOT NULL
BEGIN
Drop Table #TempFilterdMpsWrk
END

IF OBJECT_ID('tempdb..#TmpDataCountsWrk') IS NOT NULL
BEGIN
Drop Table #TmpDataCountsWrk
END

IF OBJECT_ID('tempdb..#TempDaysWrk') IS NOT NULL
BEGIN
Drop Table #TempDaysWrk
END

IF OBJECT_ID('tempdb..#TempTopCalWrk') IS NOT NULL
BEGIN
Drop Table #TempTopCalWrk
END

IF OBJECT_ID('tempdb..#TempBottomCalWrk') IS NOT NULL
BEGIN
Drop Table #TempBottomCalWrk
END

IF OBJECT_ID('tempdb..#TempCalByWrk') IS NOT NULL
BEGIN
Drop Table #TempCalByWrk
END

IF OBJECT_ID('tempdb..#TmpFilCalDtsWrk') IS NOT NULL
BEGIN
Drop Table #TmpFilCalDtsWrk
END

IF OBJECT_ID('tempdb..#TempTopNMpsWrk') IS NOT NULL
BEGIN
drop table #TempTopNMpsWrk
END

RETURN @Error

END
GO

GRANT EXECUTE ON dbo.[Microsoft_SystemCenter_DataWarehouse_Report_DataVolumenDetailsByWrkDataGet] TO OpsMgrReader
GO

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

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

ALTER PROCEDURE dbo.[Microsoft_SystemCenter_DataWarehouse_Report_DataVolumenDetailsByWrkDataGet]
@StartDate Datetime,
@EndDate Datetime,
@AdjHours int,
@MPXML xml,
@DTXML xml,
@MGPXML xml,
@TopN int,
@LanguageCode varchar(3)

AS
BEGIN
SET NOCOUNT ON

Declare @Error int,
@ShowAlerts bit,
@ShowEvents bit,
@ShowPerfs bit,
@ShowStates bit,
@ShowDiscs bit,
@TotVol bigint,
@DaysNumber bigint,
@SumX bigint,
@SumX2 bigint,
@APMDataExists bit

Set @DaysNumber = datediff(dd, @StartDate, @EndDate) +1

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

Create Table #TmpOpsWrk
(
OptionId int
)

Create Table #TmpMPsWk
(
ManagementPackRowId int,
ManagementPackSystemName nvarchar(512)
)

Create Table #TmpMGPWk
(
ManagementGroupRowId int,
ManagementGroupDefaultName nvarchar(512)
)

Create Table #TempFilterdMpsWrk
(
ManagementPackRowId int
)

Create Table #TmpDataCountsWrk
(
DataType int,
[Type] int,
ManagementPackRowId int,
WorkFlowId int,
WorkflowDisplay nvarchar(512),
Date datetime,
DataCount bigint
)

Create Table #TempDaysWrk
(
DayNumber bigint,
Date datetime
)

Create Table #TempTopCalWrk
(
WorkFlowId int,
CntDys bigint,
SumXY bigint,
SumY bigint,
SumX bigint
)

Create Table #TempBottomCalWrk
(
WorkFlowId int,
CntDys bigint,
SumX2 bigint,
SumXxSumX bigint
)

Create Table #TempCalByWrk
(
WorkFlowId int,
TopVal bigint,
BottomVal bigint,
Slope decimal(38,2)
)

Create Table #TmpFilCalDtsWrk
(
DateValue datetime
)

Create Table #TempTopNMpsWrk
(
ManagementPackRowId int
)
If @TopN &lt;= 0
BEGIN
Select 0 As RowNumber,
WorkFlowId,
WorkflowDisplay,
0.00 As PrcVol,
0.00 As Slope,
0.00 As CountByWorkflow
From #TmpDataCountsWrk
END
ELSE
BEGIN

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

--Options to Use
Insert into #TmpOpsWrk
Select OptList.OptionId.value('.','int') as OptionId
From @DTXML.nodes('/*/Value') As OptList(OptionId)
Order By OptionId

Select @APMDataExists = Case
When EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[apm].[EVENT]') AND type in (N'U')) Then 1
Else 0
End

Select @ShowDiscs = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 1

Select @ShowAlerts = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0

END
From #TmpOpsWrk where OptionId = 2

Select @ShowPerfs = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 3

Select @ShowEvents = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 4


Select @ShowStates = Case
When Count(OptionId) &gt; 0 Then 1
ELSE 0
END
From #TmpOpsWrk where OptionId = 5

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


--Get Mp To Filter
Insert Into #TmpMPsWk
Select Mp.ManagementPackRowId,
Mp.ManagementPackSystemName
From @MPXML.nodes('/*/Value') As MpList(ManagementPackRowId)
Inner Join vManagementPack (NoLock) Mp
On Mp.ManagementPackRowId = MpList.ManagementPackRowId.value('.','int')
Order By ManagementPackRowId

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

--Get MANAGEMENT GROUPS To Filter
Insert Into #TmpMGPWk
Select Mgp.ManagementGroupRowId,
Mgp.ManagementGroupDefaultName
From @MGPXML.nodes('/*/Value') As MgpList(ManagementGroupGuid)
Inner Join vManagementGroup (NoLock) Mgp
On Mgp.ManagementGroupGuid = MgpList.ManagementGroupGuid.value('.','uniqueidentifier')
Order By ManagementGroupRowId

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

--Get Filtered ManagementPackIds
Insert into #TempFilterdMpsWrk
Select distinct Mpc.ManagementPackRowId
From #TmpMPsWk Mpc
Inner Join vManagementPackVersion Mpv
On Mpv.ManagementPackRowId = Mpc.ManagementPackRowId
Inner Join vManagementGroupManagementPackVersion Mgmpv
On Mgmpv.ManagementPackVersionRowId = Mpv.ManagementPackVersionRowId
Inner Join #TmpMGPWk (NoLock) Mgp
On Mgp.ManagementGroupRowId = Mgmpv.ManagementGroupRowId

--Filtered Dates from Calendar
Insert into #TmpFilCalDtsWrk
Select Dt.DateValue
From vDate Dt
Where CONVERT(VARCHAR(8), Dt.DateValue, 112) BETWEEN CONVERT(VARCHAR(8) , @StartDate, 112) AND CONVERT(VARCHAR(8) , @EndDate, 112)

If @ShowDiscs = 1
BEGIN
--Create Temp Table to Store Filtered Data
Create Table #TmpDisFilWrk
(
ManagedEntityTypeRowId int,
DateValue datetime,
DataCount bigint
)

--Counts By Date of Initial Discoveries base on Managed Entities
Insert into #TmpDisFilWrk
Select Me.ManagedEntityTypeRowId,
DateAdd(hh,@AdjHours,Memg.FromDateTime) as FromDateTime,
Count(Me.ManagedEntityRowId) as DataCount
From vManagedEntity Me
Inner Join vManagedEntityType Met
On Me.ManagedEntityTypeRowId = Met.ManagedEntityTypeRowId
Inner Join vManagedEntityManagementGroup Memg
On Me.ManagedEntityRowId = Memg.ManagedEntityRowId
And Me.ManagementGroupRowId in (Select ManagementGroupRowId From #TmpMGPWk)
Where DateAdd(hh,@AdjHours,Memg.FromDateTime) BETWEEN @StartDate AND @EndDate
Group By Me.ManagedEntityTypeRowId, Memg.FromDateTime

--Counts By Date of Initial Discoveries base on Type Managed Entities
Insert into #TmpDisFilWrk
Select Me.ManagedEntityTypeRowId,
DateAdd(hh,@AdjHours,Tmt.FromDateTime) as FromDateTime,
Count(Me.ManagedEntityRowId) as DataCount
From vManagedEntity Me
Inner Join vTypedManagedEntity Tmt
On Me.ManagedEntityTypeRowId = Tmt.ManagedEntityTypeRowId
And Me.ManagedEntityRowId = Tmt.ManagedEntityRowId
Inner Join vManagedEntityManagementGroup Memg
On Me.ManagedEntityRowId = Memg.ManagedEntityRowId
And Me.ManagementGroupRowId in (Select ManagementGroupRowId From #TmpMGPWk)
Where DateAdd(hh,@AdjHours,Tmt.FromDateTime) BETWEEN @StartDate AND @EndDate
Group By Me.ManagedEntityTypeRowId, Tmt.FromDateTime

--Counts By Date of Properties Changes Submission base on Managed Entities
Insert into #TmpDisFilWrk
Select Me.ManagedEntityTypeRowId,
DateAdd(hh,@AdjHours,Mep.FromDateTime) as FromDateTime,
Count(Mep.ManagedEntityRowId) as DataCount
From vManagedEntityProperty Mep
Inner Join vManagedEntity Me
On Mep.ManagedEntityRowId = Me.ManagedEntityRowId
And Me.ManagementGroupRowId in (Select ManagementGroupRowId From #TmpMGPWk)
Where DateAdd(hh,@AdjHours,Mep.FromDateTime) BETWEEN @StartDate AND @EndDate
Group By Me.ManagedEntityTypeRowId, Mep.FromDateTime

--Discovery Count By MP
Insert into #TmpDataCountsWrk
Select 1 as DataType,
1 as [Type],
Mpc.ManagementPackRowId,
Mtp.ManagedEntityTypeRowId as WorkFlowId,
COALESCE(Loc.Name,Mtp.ManagedEntityTypeDefaultName) as WorkFlowDisplay,
Dt.DateValue as [Date],
IsNull(SUM(Dis.DataCount),0) as DataCount
From #TmpDisFilWrk Dis
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Dis.DateValue, 112)
Inner Join vManagedEntityType Mtp
On Mtp.ManagedEntityTypeRowId = Dis.ManagedEntityTypeRowId
Inner Join #TempFilterdMpsWrk Mpc
On Mpc.ManagementPackRowId = Mtp.ManagementPackRowId
Left Outer Join vDisplayString Loc
On Loc.ElementGuid = Mtp.ManagedEntityTypeGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Mtp.ManagedEntityTypeRowId, Loc.Name, Mtp.ManagedEntityTypeDefaultName, Dt.DateValue

IF OBJECT_ID('tempdb..#TmpDisFilWrk') IS NOT NULL
BEGIN
drop table #TmpDisFilWrk
END
END

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

If @ShowAlerts = 1
BEGIN
--Alerts Count by WorkFlow
Insert into #TmpDataCountsWrk
Select 2 as DataType,
Case
When Rul.RuleRowId is not null Then 2
When Mon.MonitorRowId is not null Then 3
End as [Type],
Mpc.ManagementPackRowId,
COALESCE(Mon.MonitorRowId,Rul.RuleRowId) as WorkFlowId,
COALESCE(Loc.Name,COALESCE(Mon.MonitorDefaultName,Rul.RuleDefaultName)) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(Count(Distinct Alr.AlertGuid),0) as DataCount
From Alert.vAlert (NoLock) Alr
LEFT OUTER JOIN vMonitor (NoLock) Mon
ON Mon.MonitorRowId = Alr.WorkflowRowId
AND Alr.MonitorAlertInd = 1
LEFT OUTER JOIN vRule Rul
ON Rul.RuleRowId = Alr.WorkflowRowId
AND Alr.MonitorAlertInd = 0
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = Alr.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , DateAdd(hh,@AdjHours,Alr.RaisedDateTime), 112)
Inner Join #TempFilterdMpsWrk Mpc
On Mon.ManagementPackRowId = Mpc.ManagementPackRowId
Or Rul.ManagementPackRowId = Mpc.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = COALESCE(Mon.MonitorGuid, Rul.RuleGuid)
And Loc.LanguageCode = @LanguageCode
where DateAdd(hh,@AdjHours,Alr.RaisedDateTime) BETWEEN @StartDate AND @EndDate
Group By Mpc.ManagementPackRowId, Mon.MonitorRowId, Rul.RuleRowId, Mon.MonitorDefaultName, Rul.RuleDefaultName, Loc.Name, Dt.DateValue
END

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

If @ShowPerfs = 1
BEGIN
--Create Temp Filtered Perf Table
Create Table #TempPrfDtFilWrk
(
PerformanceRuleInstanceRowId int,
SampleCount bigint,
[DateTime] datetime
)

--Getting Filtered Perfs Data Count By Dates
Insert Into #TempPrfDtFilWrk
Select PerfCTE.PerformanceRuleInstanceRowId,
SUM(PerfCTE.SampleCount) As SampleCount,
DateAdd(hh,@AdjHours,PerfCTE.DateTime) as [DateTime]
From Perf.vPerfDaily PerfCTE
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = PerfCTE.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Where CONVERT(VARCHAR(8), DateAdd(hh,@AdjHours,PerfCTE.DateTime), 112) BETWEEN CONVERT(VARCHAR(8) , @StartDate, 112) AND CONVERT(VARCHAR(8) , @EndDate, 112)
Group By PerfCTE.PerformanceRuleInstanceRowId, PerfCTE.DateTime

--Perf Count By WorkFlow
Insert into #TmpDataCountsWrk
Select Distinct 3 as DataType,
2 as [Type],
Mpc.ManagementPackRowId,
Rul.RuleRowId as WorkFlowId,
COALESCE(Loc.Name,Rul.RuleDefaultName) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(SUM(Prf.SampleCount),0) as CountByDate
From #TempPrfDtFilWrk Prf
Inner Join vPerformanceRuleInstance (NoLock) Pri
On Prf.PerformanceRuleInstanceRowId = Pri.PerformanceRuleInstanceRowId
Inner Join vRule (NoLock) Rul
ON Pri.RuleRowId = Rul.RuleRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Prf.[DateTime], 112)
Inner Join #TempFilterdMpsWrk (NoLock) Mpc
On Mpc.ManagementPackRowId = Rul.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = Rul.RuleGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Rul.RuleRowId, Loc.Name, Rul.RuleDefaultName, Dt.DateValue

IF OBJECT_ID('tempdb..#TempPrfDtFilWrk') IS NOT NULL
BEGIN
drop table #TempPrfDtFilWrk
END
END

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

If @ShowEvents = 1
BEGIN
--Create Temp Filtered Events Table
Create Table #TempEvtDtFilWrk
(
RuleRowId int,
EventCount bigint,
[DateTime] datetime
)

--Getting APM Events If Exists Table
If @APMDataExists = 1
BEGIN
Insert Into #TempEvtDtFilWrk
SELECT RL.RuleRowId,
COUNT(EvtAPM.EventId),
DateAdd(hh,@AdjHours,EvtAPM.UTCEVENTDATE) as DateValue
FROM vRule RL
Inner Join vManagementPack MP
On RL.ManagementPackRowId = MP.ManagementPackRowId
And MP.ManagementPackSystemName = 'Microsoft.SystemCenter.Apm.Infrastructure'
And RL.RuleSystemName = 'Microsoft.SystemCenter.Apm.CollectApplicationDiagnosticsEvents'
Inner Join apm.EVENT EvtAPM
On RL.RuleRowId IS NOT NULL
Where DateAdd(hh,@AdjHours,EvtAPM.UTCEVENTDATE) BETWEEN @StartDate AND @EndDate
Group By RL.RuleRowId, EvtAPM.UTCEVENTDATE


Insert Into #TempEvtDtFilWrk
SELECT RL.RuleRowId,
COUNT(EvtAPM.CSEVENTID),
DateAdd(hh,@AdjHours,EvtAPM.UTCDATE) as DateValue
FROM vRule RL
Inner Join vManagementPack MP
On RL.ManagementPackRowId = MP.ManagementPackRowId
And MP.ManagementPackSystemName = 'Microsoft.SystemCenter.Apm.Infrastructure'
And RL.RuleSystemName = 'Microsoft.SystemCenter.Apm.CollectApplicationDiagnosticsEvents'
Inner Join apm.CSEVENT EvtAPM
On RL.RuleRowId IS NOT NULL
Where DateAdd(hh,@AdjHours,EvtAPM.UTCDATE) BETWEEN @StartDate AND @EndDate
Group By RL.RuleRowId, EvtAPM.UTCDATE

END

--Getting Filtered Events Data Count By Dates
Insert Into #TempEvtDtFilWrk
SELECT ErlCTE.RuleRowId,
COUNT(ErlCTE.EventOriginId),
DateAdd(hh,@AdjHours,EvtCTE.DateTime) as DateValue
FROM Event.vEvent EvtCTE
Inner Join Event.vEventRule ErlCTE
On EvtCTE.EventOriginId = ErlCTE.EventOriginId
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = ErlCTE.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Where DateAdd(hh,@AdjHours,EvtCTE.DateTime) BETWEEN @StartDate AND @EndDate
Group By ErlCTE.RuleRowId, EvtCTE.DateTime

Insert into #TmpDataCountsWrk
Select 4 as DataType,
2 as [Type],
Mpc.ManagementPackRowId,
Evt.RuleRowId as WorkFlowId,
COALESCE(Loc.Name,Rul.RuleSystemName) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(SUM(Evt.EventCount),0) as CountByDate
From #TempEvtDtFilWrk Evt
Inner Join vRule Rul
ON Evt.RuleRowId = Rul.RuleRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Evt.[DateTime], 112)
Inner Join #TempFilterdMpsWrk Mpc
On Mpc.ManagementPackRowId = Rul.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = Rul.RuleGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Evt.RuleRowId, Loc.Name, Rul.RuleSystemName, Dt.DateValue

IF OBJECT_ID('tempdb..#TempEvtDtFilWrk') IS NOT NULL
BEGIN
drop table #TempEvtDtFilWrk
END
END

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

If @ShowStates = 1
BEGIN
--Create Temp Filtered State Table
Create Table #TempSteDtFilWrk
(
MonitorRowId int,
[DateTime] datetime,
DataCount bigint
)

--Getting Filtered State changes Count By Dates
Insert Into #TempSteDtFilWrk
Select Mn.MonitorRowId,
DateAdd(hh,@AdjHours,SteCTE.DateTime) as DateValue,
Count(SteCTE.ManagedEntityMonitorRowId) as DataCount
From State.vStateRaw SteCTE
Inner Join vManagedEntityMonitor Mn
On Mn.ManagedEntityMonitorRowId = SteCTE.ManagedEntityMonitorRowId
Inner Join vManagedEntity Met
On Met.ManagedEntityRowId = Mn.ManagedEntityRowId
Inner Join #TmpMGPWk Mg
On Met.ManagementGroupRowId = Mg.ManagementGroupRowId
Where DateAdd(hh,@AdjHours,SteCTE.DateTime) BETWEEN @StartDate AND @EndDate
Group By Mn.MonitorRowId, SteCTE.DateTime

--States Count By WorkFlow
Insert into #TmpDataCountsWrk
Select 5 as DataType,
3 as [Type],
Mpc.ManagementPackRowId,
Ste.MonitorRowId as WorkFlowId,
COALESCE(Loc.Name,Mon.MonitorDefaultName) as WorkFlowDisplay,
Dt.DateValue as Date,
IsNull(SUM(Ste.DataCount),0) as CountByDate
From #TempSteDtFilWrk Ste
Inner Join vMonitor Mon
On Mon.MonitorRowId = Ste.MonitorRowId
Inner Join #TmpFilCalDtsWrk Dt
On CONVERT(VARCHAR(8), Dt.DateValue, 112) = CONVERT(VARCHAR(8) , Ste.[DateTime], 112)
Inner Join #TempFilterdMpsWrk Mpc
On Mpc.ManagementPackRowId = Mon.ManagementPackRowId
Left Outer Join vDisplayString (NoLock) Loc
On Loc.ElementGuid = Mon.MonitorGuid
And Loc.LanguageCode = @LanguageCode
Group By Mpc.ManagementPackRowId, Ste.MonitorRowId, Loc.Name, Mon.MonitorDefaultName, Dt.DateValue

IF OBJECT_ID('tempdb..#TempSteDtFil') IS NOT NULL
BEGIN
drop table #TempSteDtFil
END
END

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

--Calculate Total Volume
Select @TotVol = IsNull(Sum(DataCount),0) From #TmpDataCountsWrk

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

--Calculate SumX
Insert into #TempDaysWrk
Select ROW_NUMBER() OVER(ORDER BY DateValue) AS DayNumber,
DateValue as Date
From #TmpFilCalDtsWrk (NoLock) Dt

Select @SumX = SUM(DayNumber) from #TempDaysWrk

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

--Calculate SumX2
Select @SumX2 = Sum(x0.DayNumber*x1.DayNumber)
From #TempDaysWrk x0
Inner Join #TempDaysWrk x1
On x0.DayNumber = x1.DayNumber

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

--Calculate Top Values for Equation by WorkFlow
Insert into #TempTopCalWrk
Select Tot.WorkFlowId,
@DaysNumber as CntDys,
Sum(Tot.SXY) as SumXY,
Sum(Tot.DataCount) as SumY,
@SumX as SumX
From
(
Select CnWk.WorkFlowId,
CnWk.Date,
Sum(CnDy.DayNumber*CnWk.DataCount) as SXY,
Sum(CnWk.DataCount) as DataCount
From #TmpDataCountsWrk CnWk
Inner Join #TempDaysWrk CnDy
On CnWk.Date = CnDy.Date
Group by CnWk.WorkFlowId, CnWk.Date
) as Tot
Group by Tot.WorkFlowId
Order by Tot.WorkFlowId

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

--Calculate Bottom Values for Equation by WorkFlow
Insert into #TempBottomCalWrk
Select WorkFlowId,
@DaysNumber as CntDys,
@SumX2 as SumX2,
@SumX * @SumX as SumXxSumX
From #TmpDataCountsWrk CnWk
Group by CnWk.WorkFlowId

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

--Calculate Final Result of Equation by WorkFlow
Insert into #TempCalByWrk
Select Tp.WorkFlowId,
((Tp.CntDys * Tp.SumXY)-(Tp.SumY * Tp.SumX)) as TopVal,
((Bt.CntDys * Bt.SumX2)-SumXxSumX) as BottomVal,
Case
When ((Bt.CntDys * Bt.SumX2)-SumXxSumX) &gt; 0 Then (CAST(((Tp.CntDys * Tp.SumXY)-(Tp.SumY * Tp.SumX)) as Decimal) / CAST(((Bt.CntDys * Bt.SumX2)-SumXxSumX) as Decimal))
Else 0.00
End As Slope
From #TempTopCalWrk Tp
Inner Join #TempBottomCalWrk Bt
On Tp.WorkFlowId = Bt.WorkFlowId
Order By Tp.WorkFlowId

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

Insert into #TempTopNMpsWrk
Select Top (@TopN) Mbv.ManagementPackRowId
From
(
Select
Mpc.ManagementPackRowId,
Case
When @TotVol = 0 Then 0
Else ( ( CAST( ( IsNull(Sum(Cnts.DataCount),0) ) AS decimal)/@TotVol ) * 100 )
End AS PrcVol
From #TempFilterdMpsWrk Mpc
Left Outer Join #TmpDataCountsWrk Cnts
On Mpc.ManagementPackRowId = Cnts.ManagementPackRowId
Group By Mpc.ManagementPackRowId
) As Mbv
Order By Mbv.PrcVol desc

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

--Final Results
Select Top (@TopN)
ROW_NUMBER() OVER(ORDER BY Cnts.PrcVol Desc) AS 'RowNumber',
Cnts.[Type],
Cnts.WorkFlowId,
Cnts.WorkFlowDisplay,
Cnts.PrcVol,
IsNull(Cl.Slope,0) as Slope,
Cnts.CountByWorkflow
From
(
Select
[Type],
WorkFlowId,
WorkFlowDisplay,
Case
When @TotVol = 0 Then 0
Else ((CAST(Sum(IsNull(DataCount,0)) AS decimal)/@TotVol)*100)
End AS PrcVol,
Sum(IsNull(DataCount,0)) as CountByWorkflow
From #TmpDataCountsWrk CntWk
Inner Join #TempTopNMpsWrk Mpv
On Mpv.ManagementPackRowId = IsNull(CntWk.ManagementPackRowId,Mpv.ManagementPackRowId)
Group By
[Type],
WorkFlowId,
WorkFlowDisplay

) As Cnts
Left Outer Join #TempCalByWrk Cl
On Cl.WorkFlowId = Cnts.WorkFlowId
Order by Cnts.PrcVol Desc

END

QuitError:
IF OBJECT_ID('tempdb..#TmpOpsWrk') IS NOT NULL
BEGIN
Drop Table #TmpOpsWrk
END

IF OBJECT_ID('tempdb..#TmpMPsWk') IS NOT NULL
BEGIN
Drop Table #TmpMPsWk
END

IF OBJECT_ID('tempdb..#TmpMGPWk') IS NOT NULL
BEGIN
Drop Table #TmpMGPWk
END

IF OBJECT_ID('tempdb..#TempFilterdMpsWrk') IS NOT NULL
BEGIN
Drop Table #TempFilterdMpsWrk
END

IF OBJECT_ID('tempdb..#TmpDataCountsWrk') IS NOT NULL
BEGIN
Drop Table #TmpDataCountsWrk
END

IF OBJECT_ID('tempdb..#TempDaysWrk') IS NOT NULL
BEGIN
Drop Table #TempDaysWrk
END

IF OBJECT_ID('tempdb..#TempTopCalWrk') IS NOT NULL
BEGIN
Drop Table #TempTopCalWrk
END

IF OBJECT_ID('tempdb..#TempBottomCalWrk') IS NOT NULL
BEGIN
Drop Table #TempBottomCalWrk
END

IF OBJECT_ID('tempdb..#TempCalByWrk') IS NOT NULL
BEGIN
Drop Table #TempCalByWrk
END

IF OBJECT_ID('tempdb..#TmpFilCalDtsWrk') IS NOT NULL
BEGIN
Drop Table #TmpFilCalDtsWrk
END

IF OBJECT_ID('tempdb..#TempTopNMpsWrk') IS NOT NULL
BEGIN
drop table #TempTopNMpsWrk
END

RETURN @Error

END
GO

GRANT EXECUTE ON dbo.[Microsoft_SystemCenter_DataWarehouse_Report_DataVolumenDetailsByWrkDataGet] TO OpsMgrReader
GO

</Upgrade>
</DataWarehouseScript>