This report shows all instances of a configured service level objectives(SLO) and whether each instance met their respective goal
R.DescriptionTitle
Description
R.GeneratedTimeLabel
Report Time
R.PageFormat
Page {0} of {1}
R.SloFormatLine2
{0}
R.SloLabel
Service Level Objective
R.StartEndTimeLabel
Report Duration
R.TimeZoneFormat
All dates and times are shown in {0}
R.Title
Service Level Objective Detail
Source Code:
<Report ID="Microsoft.SystemCenter.DataWarehouse.Report.ServiceLevelObjectiveDetail" Accessibility="Public" Visible="false">
<Dependencies>
<DataWarehouseScript>Microsoft.SystemCenter.DataWarehouse.ServiceLevel.Report.Script</DataWarehouseScript>
</Dependencies>
<ParameterBlock xmlns="http://schemas.microsoft.com/mom/reporting/2007/ReportParameterSettings" columns="1">
<Controls>
<Control type="Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.ComboBox">
<ReportParameters>
<ReportParameter name="DataAggregation">
<Prompt>Microsoft.SystemCenter.DataWarehouse.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.DataAggregation</Prompt>
</ReportParameter>
</ReportParameters>
</Control>
<Control type="Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.BusinessRelativeDateTimePicker">
<ReportParameters>
<ReportParameter name="TimeZone" binding="TimeZone">
<Prompt>Microsoft.SystemCenter.DataWarehouse.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.TimeZone</Prompt>
</ReportParameter>
<ReportParameter name="TimeZoneName" binding="TimeZoneName"/>
<ReportParameter name="StartDate_BaseType" binding="StartDate_BaseType"/>
<ReportParameter name="StartDate_BaseValue" binding="StartDate_BaseValue">
<Prompt>Microsoft.SystemCenter.DataWarehouse.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.StartDateTime</Prompt>
</ReportParameter>
<ReportParameter name="StartDate_OffsetType" binding="StartDate_OffsetType"/>
<ReportParameter name="StartDate_OffsetValue" binding="StartDate_OffsetValue"/>
<ReportParameter name="EndDate_BaseType" binding="EndDate_BaseType"/>
<ReportParameter name="EndDate_BaseValue" binding="EndDate_BaseValue">
<Prompt>Microsoft.SystemCenter.DataWarehouse.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.EndDateTime</Prompt>
</ReportParameter>
<ReportParameter name="EndDate_OffsetType" binding="EndDate_OffsetType"/>
<ReportParameter name="EndDate_OffsetValue" binding="EndDate_OffsetValue"/>
<ReportParameter name="TimeType" binding="TimeType"/>
<ReportParameter name="TimeWeekMap" binding="TimeWeekMap"/>
</ReportParameters>
</Control>
</Controls>
</ParameterBlock>
<Definition>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DataWarehouseMain">
<rd:DataSourceID>e4235c51-407f-4065-8519-a1e57374bc45</rd:DataSourceID>
<DataSourceReference>Data Warehouse Main</DataSourceReference>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="StateDataSetType">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>StateDataSetType</DataSetName>
<ValueField>DatasetTypeId</ValueField>
</DataSetReference>
</DefaultValue>
<ValidValues>
<DataSetReference>
<DataSetName>StateDataSetType</DataSetName>
<ValueField>DatasetTypeId</ValueField>
<LabelField>DatasetTypeId</LabelField>
</DataSetReference>
</ValidValues>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="StateConnectionString">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>StateDateSetConnection</DataSetName>
<ValueField>ConnectionString</ValueField>
</DataSetReference>
</DefaultValue>
<ValidValues>
<DataSetReference>
<DataSetName>StateDateSetConnection</DataSetName>
<ValueField>ConnectionString</ValueField>
<LabelField>DatasetId</LabelField>
</DataSetReference>
</ValidValues>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="LT_Report">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>LT_Report_Query</DataSetName>
<ValueField>ValueXml</ValueField>
</DataSetReference>
</DefaultValue>
<ValidValues>
<DataSetReference>
<DataSetName>LT_Report_Query</DataSetName>
<ValueField>ValueXml</ValueField>
<LabelField>ValueName</LabelField>
</DataSetReference>
</ValidValues>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="ManagementGroupId">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>NeighborManagementGroups</DataSetName>
<ValueField>ManagementGroupGuid</ValueField>
</DataSetReference>
</DefaultValue>
<Prompt>[Management Group]</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>NeighborManagementGroups</DataSetName>
<ValueField>ManagementGroupGuid</ValueField>
<LabelField>ManagementGroupName</LabelField>
</DataSetReference>
</ValidValues>
<MultiValue>true</MultiValue>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="DataAggregation">
<DataType>Integer</DataType>
<DefaultValue>
<Values>
<Value>0</Value>
</Values>
</DefaultValue>
<Prompt>[Aggregation]</Prompt>
<ValidValues>
<ParameterValues>
<ParameterValue>
<Value>0</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.AggregationValue_0", "[Hourly]")</Label>
</ParameterValue>
<ParameterValue>
<Value>1</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.AggregationValue_1", "[Daily]")</Label>
</ParameterValue>
</ParameterValues>
</ValidValues>
</ReportParameter>
<ReportParameter Name="StartDate_BaseType">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[Start Date Base]</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate_BaseValue">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[From]</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate_OffsetType">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[Start Date Offset Type]</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate_OffsetValue">
<DataType>Integer</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[Start Date Offset]</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate_BaseType">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[End Date Base]</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate_BaseValue">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[To]</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate_OffsetType">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[End Date Offset Type]</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate_OffsetValue">
<DataType>Integer</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[End Date Offset]</Prompt>
</ReportParameter>
<ReportParameter Name="TimeType">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[Time Type]</Prompt>
</ReportParameter>
<ReportParameter Name="TimeWeekMap">
<DataType>String</DataType>
<Prompt>[Week Days]</Prompt>
<MultiValue>true</MultiValue>
</ReportParameter>
<ReportParameter Name="TimeZone">
<DataType>String</DataType>
<Prompt>[Time Zone]</Prompt>
</ReportParameter>
<ReportParameter Name="TimeZoneName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>[Time Zone Name]</Prompt>
</ReportParameter>
<ReportParameter Name="Interactive">
<DataType>Boolean</DataType>
<Nullable>true</Nullable>
<DefaultValue>
<Values>
<Value>=False</Value>
</Values>
</DefaultValue>
<Prompt>Interactive</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="DisplaySLO">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[SLO]</Prompt>
</ReportParameter>
<ReportParameter Name="SLAManagedEntityRowId">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>[SLAManagedEntityRowId]</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>true</rd:SnapToGrid>
<rd:ReportID>ab518a51-343d-46c4-b1f8-4ec65faafd95</rd:ReportID>
<CodeModules>
<CodeModule>Microsoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral</CodeModule>
</CodeModules>
<DataSets>
<DataSet Name="StateDateSetConnection">
<Fields>
<Field Name="DatasetId">
<DataField>DatasetId</DataField>
</Field>
<Field Name="ServerName">
<DataField>ServerName</DataField>
</Field>
<Field Name="DatabaseName">
<DataField>DatabaseName</DataField>
</Field>
<Field Name="ConnectionString">
<Value>="Data Source=" + Fields!ServerName.Value + ";Initial Catalog=" + Fields!DatabaseName.Value + ";Integrated Security=SSPI"</Value>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>DataRouteGet</CommandText>
<QueryParameters>
<QueryParameter Name="@ManagementGroupGuid">
<Value>=Code.GetCallingManagementGroupId()</Value>
</QueryParameter>
<QueryParameter Name="@DatasetTypeId">
<Value>=Parameters!StateDataSetType.Value</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
<DataSet Name="LT_Report_Query">
<Fields>
<Field Name="ValueXml">
<DataField>XML_F52E2B61-18A1-11d1-B105-00805F49916B</DataField>
</Field>
<Field Name="ValueName">
<Value>="LT"</Value>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ReportDisplayStringGet</CommandText>
<QueryParameters>
<QueryParameter Name="@ManagementGroupGuid">
<Value>=Code.GetCallingManagementGroupId()</Value>
</QueryParameter>
<QueryParameter Name="@ManagementPackSystemName">
<Value>Microsoft.SystemCenter.DataWarehouse.ServiceLevel.Report.Library</Value>
</QueryParameter>
<QueryParameter Name="@ReportSystemName">
<Value>Microsoft.SystemCenter.DataWarehouse.Report.ServiceLevelObjectiveDetail</Value>
</QueryParameter>
<QueryParameter Name="@LanguageCode">
<Value>=Code.GetReportLocLanguageCode()</Value>
</QueryParameter>
<QueryParameter Name="@Scope">
<Value>R.%</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
<DataSet Name="NeighborManagementGroups">
<Fields>
<Field Name="ManagementGroupGuid">
<DataField>ManagementGroupGuid</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="ManagementGroupName">
<DataField>ManagementGroupName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>DataRouteGetNeighbors</CommandText>
<QueryParameters>
<QueryParameter Name="@ManagementGroupGuid">
<Value>=Code.GetCallingManagementGroupId()</Value>
</QueryParameter>
<QueryParameter Name="@DatasetTypeId">
<Value>=Parameters!StateDataSetType.Value</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
<DataSet Name="StateDataSetType">
<Fields>
<Field Name="DatasetTypeId">
<DataField>DatasetTypeId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>DatasetTypeIdGet</CommandText>
<QueryParameters>
<QueryParameter Name="@ManagementPackSystemName">
<Value>Microsoft.SystemCenter.DataWarehouse.Library</Value>
</QueryParameter>
<QueryParameter Name="@DatasetTypeSystemName">
<Value>Microsoft.SystemCenter.DataWarehouse.Dataset.State</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
<DataSet Name="SLOMonitorData">
<Fields>
<Field Name="TargetManagedEntityTypeDisplayName">
<DataField>TargetManagedEntityTypeDisplayName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="MonitorServiceLevelObjectiveInd">
<DataField>MonitorServiceLevelObjectiveInd</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="ServiceLevelAgreementDisplayName">
<DataField>ServiceLevelAgreementDisplayName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PerformanceServiceLevelObjectiveInd">
<DataField>PerformanceServiceLevelObjectiveInd</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="MonitorGuid">
<DataField>MonitorGuid</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="MonitorSystemName">
<DataField>MonitorSystemName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="MonitorDisplayName">
<DataField>MonitorDisplayName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ServiceLevelObjectiveDisplayName">
<DataField>ServiceLevelObjectiveDisplayName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="RuleGuid">
<DataField>RuleGuid</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="RuleSystemName">
<DataField>RuleSystemName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="RuleDisplayName">
<DataField>RuleDisplayName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Goal">
<DataField>Goal</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
<Field Name="DesiredObjective">
<DataField>DesiredObjective</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="AggregationMethod">
<DataField>AggregationMethod</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ServiceLevelObjectiveRowId">
<DataField>ServiceLevelObjectiveRowId</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandText>SELECT ISNULL(met_ds.Name, met.ManagedEntityTypeDefaultName) AS TargetManagedEntityTypeDisplayName, slompv.MonitorServiceLevelObjectiveInd,
ISNULL(sla_ds.Name, sla.ServiceLevelAgreementDefaultName) AS ServiceLevelAgreementDisplayName, slompv.PerformanceServiceLevelObjectiveInd,
m.MonitorGuid, m.MonitorSystemName, ISNULL(m_ds.Name, m.MonitorDefaultName) AS MonitorDisplayName, ISNULL(slo_ds.Name,
slo.ServiceLevelObjectiveDefaultName) AS ServiceLevelObjectiveDisplayName, r.RuleGuid, r.RuleSystemName, ISNULL(r_ds.Name, r.RuleDefaultName)
AS RuleDisplayName,
CASE WHEN slompv.MonitorServiceLevelObjectiveInd = 1 THEN mslompv.Goal WHEN slompv.PerformanceServiceLevelObjectiveInd = 1 THEN pslompv.Threshold
END AS Goal,
CASE WHEN slompv.MonitorServiceLevelObjectiveInd = 1 THEN 'over' WHEN slompv.PerformanceServiceLevelObjectiveInd = 1 THEN pslompv.DesiredObjective
END AS DesiredObjective,
CASE WHEN slompv.MonitorServiceLevelObjectiveInd = 1 THEN 'avg' WHEN slompv.PerformanceServiceLevelObjectiveInd = 1 THEN pslompv.AggregationMethod
END AS AggregationMethod, slo.ServiceLevelObjectiveRowId
FROM vServiceLevelObjective AS slo INNER JOIN
vServiceLevelObjectiveManagementPackVersion AS slompv ON slompv.ServiceLevelObjectiveRowId = slo.ServiceLevelObjectiveRowId INNER JOIN
vManagedEntityType AS met ON slompv.TargetManagedEntityTypeRowId = met.ManagedEntityTypeRowId INNER JOIN
vServiceLevelAgreement AS sla ON sla.ServiceLevelAgreementRowId = slompv.ServiceLevelAgreementRowId LEFT OUTER JOIN
vMonitorServiceLevelObjectiveManagementPackVersion AS mslompv ON
mslompv.ServiceLevelObjectiveManagementPackVersionRowId = slompv.ServiceLevelObjectiveManagementPackVersionRowId LEFT OUTER JOIN
vPerformanceServiceLevelObjectiveManagementPackVersion AS pslompv ON
pslompv.ServiceLevelObjectiveManagementPackVersionRowId = slompv.ServiceLevelObjectiveManagementPackVersionRowId LEFT OUTER JOIN
vMonitor AS m ON mslompv.MonitorRowId = m.MonitorRowId LEFT OUTER JOIN
vRule AS r ON pslompv.RuleRowId = r.RuleRowId LEFT OUTER JOIN
vDisplayString AS m_ds ON m.MonitorGuid = m_ds.ElementGuid AND m_ds.LanguageCode = @LanguageCode LEFT OUTER JOIN
vDisplayString AS r_ds ON r.RuleGuid = r_ds.ElementGuid AND r_ds.LanguageCode = @LanguageCode LEFT OUTER JOIN
vDisplayString AS sla_ds ON sla.ServiceLevelAgreementGuid = sla_ds.ElementGuid AND sla_ds.LanguageCode = @LanguageCode LEFT OUTER JOIN
vDisplayString AS met_ds ON met.ManagedEntityTypeGuid = met_ds.ElementGuid AND met_ds.LanguageCode = @LanguageCode LEFT OUTER JOIN
vDisplayString AS slo_ds ON slo.ServiceLevelObjectiveGuid = slo_ds.ElementGuid AND slo_ds.LanguageCode = @LanguageCode
WHERE (slo.ServiceLevelObjectiveGuid = @ServiceLevelObjectiveGuid) AND (NOT EXISTS
(SELECT slompv_newer.ServiceLevelObjectiveManagementPackVersionRowId, slompv_newer.ServiceLevelObjectiveRowId,
slompv_newer.ManagementPackVersionRowId, slompv_newer.ServiceLevelAgreementRowId, slompv_newer.TargetManagedEntityTypeRowId,
slompv_newer.MonitorServiceLevelObjectiveInd, slompv_newer.PerformanceServiceLevelObjectiveInd,
mgmpv.ManagementGroupManagementPackVersionRowId, mgmpv.ManagementGroupRowId,
mgmpv.ManagementPackVersionRowId AS Expr1, mgmpv.InstalledDateTime, mgmpv.DeletedDateTime, mgmpv.UpgradedInd,
mgmpv.LatestVersionInd, mgmpv.DWCreatedDateTime, mgmpv.DWLastModifiedDateTime
FROM vServiceLevelObjectiveManagementPackVersion AS slompv_newer INNER JOIN
vManagementGroupManagementPackVersion AS mgmpv ON
slompv_newer.ManagementPackVersionRowId = mgmpv.ManagementPackVersionRowId
WHERE (slompv_newer.ServiceLevelObjectiveRowId = slo.ServiceLevelObjectiveRowId) AND (mgmpv.ManagementGroupRowId =
(SELECT ManagementGroupRowId
FROM vManagedEntity
WHERE (ManagedEntityRowId = @ServiceLevelAgreementManagedEntityRowId))) AND
(slompv_newer.ServiceLevelObjectiveManagementPackVersionRowId > slompv.ServiceLevelObjectiveManagementPackVersionRowId)))</CommandText>
<QueryParameters>
<QueryParameter Name="@LanguageCode">
<Value>=Code.GetReportLocLanguageCode()</Value>
</QueryParameter>
<QueryParameter Name="@ServiceLevelObjectiveGuid">
<Value>=Parameters!DisplaySLO.Value</Value>
</QueryParameter>
<QueryParameter Name="@ServiceLevelAgreementManagedEntityRowId">
<Value>=Parameters!SLAManagedEntityRowId.Value</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
</DataSets>
<Code><Script>
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = True
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Const DataAggregationParameterName As String = "DataAggregation"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Dim InitLock As New Object
Protected Overrides Sub OnInit()
LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
SyncLock InitLock
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End SyncLock
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
SyncLock InitLock
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
If (CInt(Report.Parameters(DataAggregationParameterName).Value) > 0) Then
ReportStartDate = ReportStartDate.Date
End If
End If
return ReportStartDate
End SyncLock
End Function
Public Function GetReportEndDate() As DateTime
SyncLock InitLock
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
If (CInt(Report.Parameters(DataAggregationParameterName).Value) > 0) Then
ReportEndDate = ReportEndDate.Date
End If
End If
return ReportEndDate
End SyncLock
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
SyncLock InitLock
If IsNothing(ReportTime) Then
If (CInt(Report.Parameters(DataAggregationParameterName).Value) = 0)
ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
Else
ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Regular, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
End if
End If
return ReportTime
End SyncLock
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
REM ---------------------------------
Public Enum DataAggregationType
Hourly = 0
Daily = 1
End Enum
REM ---------------------------------
Const DownTimeParameterName As String = "DownTime"
Dim DownTimeTable As System.Collections.Generic.List(Of Integer)
Public Enum StateIntervalType
Red = 0
Green = 1
Yellow = 2
White = 3
Gray = 4
Black = 5
Blue = 6
ServiceGray = 7
End Enum
Public Function IsDownTime(time As StateIntervalType)
Select Case time
Case StateIntervalType.Red
Return True
Case StateIntervalType.Green
Return False
Case Else
If IsNothing(DownTimeTable) Then
DownTimeTable = New System.Collections.Generic.List(Of Integer)()
Dim val As String
For Each val in Report.Parameters(DownTimeParameterName).Value
DownTimeTable.Add(CInt(val))
Next
End If
Return DownTimeTable.Contains(CInt(time))
End Select
End Function
REM ---------------------------------
Public Function FormatTimeInterval(ByVal TimeInSeconds As Integer) As String
Dim Hours, Minutes, Seconds As Integer
Hours = Math.Floor(TimeInSeconds / 3600)
Minutes = Math.Floor((TimeInSeconds Mod 3600) / 60)
Seconds = TimeInSeconds Mod 60
Return FormatString("{0}:{1}:{2}", Hours.ToString(), Minutes.ToString("00"), Seconds.ToString("00"))
End Function
REM ---------------------------------
Public Enum AggregationType
Hourly = 0
Daily = 1
Monthly = 2
End Enum
Public Function GetAggregationType(ByVal StartDate As DateTime, ByVal EndDate As DateTime) As AggregationType
Dim Result As AggregationType
Dim TimeDiff As TimeSpan