Report di riepilogo rilevamento del livello di servizio

Microsoft.SystemCenter.DataWarehouse.Report.ServiceLevelTrackingSummary (Report)

Knowledge Base article:

Riepilogo

Il report di riepilogo rilevamento del livello di servizio mostra, per i livelli di servizio selezionati, se gli obiettivi del livello di servizio (SLO) configurati sono stati raggiunti.

Descrizione:

Per una determinata serie di durate di report, quali "Da inizio settimana" o "Ultimo mese", e una serie di livelli di servizio, questo report mostra ogni livello di servizio con i relativi obiettivi (SLO) e le prestazioni di ogni SLO rispetto all'obiettivo configurato. È possibile configurare nel report varie durate per ottenere informazioni sull'andamento ed eseguire il drill-through al report dettagli SLO per analizzare le prestazioni di ogni istanza dello SLO.

Parametri:

Aggregazione dati: Il report può essere eseguito utilizzando le aggregazioni dati orarie o giornaliere.

Selezione data/ora: Consente di definire un periodo di tempo per il report con date relative o fisse. In fase di visualizzazione del report, Selezione data/ora è associato alla colonna di durata del report.

Orari di ufficio: Consente di definire un intervallo di orari e i giorni lavorativi a cui viene applicato. Se gli orari di ufficio sono definiti, i dati del report faranno riferimento a tale intervallo. Orari di ufficio funziona solo se è selezionata l'aggregazione oraria.

Livelli di servizio: Consente di selezionare i livelli di servizio utilizzando il selettore dei livelli di servizio. Il selettore consente di cercare i livelli di servizio in base al nome.

Intervalli di tempo aggiuntivi: Oltre alla colonna di durata del report, controllata da Selezione data/ora di cui sopra, è possibile aggiungere al report colonne supplementari per attività di confronto e di valutazione dell'andamento.

Colonne disponibili: (il report può ospitare un massimo di 7 colonne in totale)

Ultime 24 ore

Ultimi 7 giorni

Ultimi 30 giorni

Ultimi 60 giorni

Da inizio settimana

Settimana scorsa

Da inizio mese

Ultimo mese

Da inizio trimestre

Ultimo trimestre

Da inizio anno

Ultimo anno

Esempio di utilizzo:

Scenario: Creare un report su un unico livello di servizio denominato “Servizio finanziario” che mostri le prestazioni degli SLO da lunedì della settimana precedente a oggi e che confronti i risultati con quelli del mese precedente.

Istruzioni: (le selezioni dei parametri sono visualizzate in grassetto)

Output del report:

Intestazione di colonna >

Livello di servizio

Immagine

Obiettivo

Durata del report

Ultimo mese

Descrizione colonna >

Mostra il nome e la classe di destinazione del livello di servizio/SLO

Rappresentazione grafica della classe di destinazione

Per ogni SLO indica l'obiettivo configurato.

Mostra le prestazioni dello SLO nell'intervallo Lunedì della settimana precedente - oggi*

Mostra le prestazioni dello SLO per Ultimo mese

*Esclusivamente in questo scenario di esempio; cambia in base a Selezione data/ora

Element properties:

AccessibilityPublic
VisibleTrue

Report Localization:

R.AggregationLabelAggregazione dati
R.AggregationValue_0Ogni ora
R.AggregationValue_1Ogni giorno
R.BusinessTimeFormat{2} da {0} a {1}
R.StartEndTimeFormatDa {0} a {1}
R.DescriptionQuesto report mostra, per i livelli di servizio selezionati, se gli obiettivi del livello di servizio (SLO) configurati sono stati raggiunti
R.DescriptionTitleDescrizione
R.GeneratedTimeLabelOra del report
R.Interval.Last24HoursUltime 24 ore
R.Interval.Last30DaysUltimi 30 giorni
R.Interval.Last60DaysUltimi 60 giorni
R.Interval.Last7DaysUltimi 7 giorni
R.Interval.LastMonthUltimo mese
R.Interval.LastQuarterUltimo trimestre
R.Interval.LastWeekSettimana scorsa
R.Interval.LastYearUltimo anno
R.Interval.MonthtoDateDa inizio mese
R.Interval.QuartertoDateDa inizio trimestre
R.Interval.ReportDurationDurata del report
R.Interval.WeektoDateDa inizio settimana
R.Interval.YeartoDateDa inizio anno
R.PageFormatPagina {0} di {1}
R.SlaFormat{0} livelli di servizio compresi in questo report
R.SlaFormatLine1{0}
R.SlaFormatLine2{0}| {1}
R.SlaLabelLivello/i di servizio
R.StartEndTimeLabelDurata del report
R.TimeZoneFormatTutte le date e le ore sono visualizzate in {0}
R.TitleReport di riepilogo rilevamento del livello di servizio

Source Code:

<Report ID="Microsoft.SystemCenter.DataWarehouse.Report.ServiceLevelTrackingSummary" Accessibility="Public" Visible="true">
<Dependencies>
<DataWarehouseScript>Microsoft.SystemCenter.DataWarehouse.ServiceLevel.Report.Script</DataWarehouseScript>
<ReportParameterControl>DataWarehouseReport!Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.BusinessRelativeDateTimePicker</ReportParameterControl>
<ReportParameterControl>DataWarehouseReport!Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.MonitoringSLAXmlPicker</ReportParameterControl>
<ReportParameterControl>DataWarehouseReport!Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.CheckedListBox</ReportParameterControl>
</Dependencies>
<ParameterBlock xmlns="http://schemas.microsoft.com/mom/reporting/2007/ReportParameterSettings" columns="4">
<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.MonitoringSLAXmlPicker" columnSpan="2" rowSpan="2">
<ReportParameters>
<ReportParameter name="ServiceLevelAgreementList">
<Prompt>Microsoft.SystemCenter.DataWarehouse.ServiceLevel.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.SLAList</Prompt>
</ReportParameter>
<ReportParameter name="ManagementGroupId" binding="GroupList"/>
</ReportParameters>
</Control>
<Control type="Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.CheckedListBox" rowSpan="2">
<ReportParameters>
<ReportParameter name="TimeInterval">
<Prompt>Microsoft.SystemCenter.DataWarehouse.ServiceLevel.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.SLAInterval</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="TimeInterval">
<DataType>String</DataType>
<DefaultValue>
<Values>
<Value/>
</Values>
</DefaultValue>
<AllowBlank>true</AllowBlank>
<Prompt>[TimeInterval]</Prompt>
<ValidValues>
<ParameterValues>
<ParameterValue>
<Value/>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.ReportDuration", "[ReportDuration]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.Last24Hours", "[Last24Hours]") + "&lt;/Title&gt;" +
" &lt;Start&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='Day'&gt;-1&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.Last24Hours", "[Last24Hours]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.Last7Days", "[Last7Days]") + "&lt;/Title&gt;" +
" &lt;Start&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='Day'&gt;-7&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.Last7Days", "[Last7Days]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.Last30Days", "[Last30Days]") + "&lt;/Title&gt;" +
" &lt;Start&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='Day'&gt;-30&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.Last30Days", "[Last30Days]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.Last60Days", "[Last60Days]") + "&lt;/Title&gt;" +
" &lt;Start&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='Day'&gt;-60&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.Last60Days", "[Last60Days]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.WeektoDate", "[WeektoDate]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayWeek&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.WeektoDate", "[WeektoDate]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.LastWeek", "[LastWeek]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayWeek&lt;/Base&gt;" +
" &lt;Offset Type='Week'&gt;-1&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayWeek&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.LastWeek", "[LastWeek]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.MonthtoDate", "[MonthtoDate]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayMonth&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.MonthtoDate", "[MonthtoDate]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.LastMonth", "[LastMonth]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayMonth&lt;/Base&gt;" +
" &lt;Offset Type='Month'&gt;-1&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayMonth&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.LastMonth", "[LastMonth]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.QuartertoDate", "[QuartertoDate]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayQuarter&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.QuartertoDate", "[QuartertoDate]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.LastQuarter", "[LastQuarter]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayQuarter&lt;/Base&gt;" +
" &lt;Offset Type='Quarter'&gt;-1&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayQuarter&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.LastQuarter", "[LastQuarter]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.YeartoDate", "[YeartoDate]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayYear&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End&gt;" +
" &lt;Base&gt;Present&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.YeartoDate", "[YeartoDate]")</Label>
</ParameterValue>
<ParameterValue>
<Value>="&lt;Interval&gt;" +
" &lt;Title&gt;" + Code.GetLocTable("LT_Report").GetString("R.Interval.LastYear", "[LastYear]") + "&lt;/Title&gt;" +
" &lt;Start Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayYear&lt;/Base&gt;" +
" &lt;Offset Type='Year'&gt;-1&lt;/Offset&gt;" +
" &lt;/Start&gt;" +
"&lt;End Time='00:00:00'&gt;" +
" &lt;Base&gt;FirstDayYear&lt;/Base&gt;" +
" &lt;Offset Type='None'&gt;0&lt;/Offset&gt;" +
" &lt;/End&gt;" +
"&lt;/Interval&gt;"</Value>
<Label>=Code.GetLocTable("LT_Report").GetString("R.Interval.LastYear", "[LastYear]")</Label>
</ParameterValue>
</ParameterValues>
</ValidValues>
<MultiValue>true</MultiValue>
</ReportParameter>
<ReportParameter Name="StartDate_BaseType">
<DataType>String</DataType>
<Prompt>[Start Date Base]</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate_BaseValue">
<DataType>DateTime</DataType>
<Prompt>[From]</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate_OffsetType">
<DataType>String</DataType>
<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>
<Prompt>[End Date Base]</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate_BaseValue">
<DataType>DateTime</DataType>
<Prompt>[To]</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate_OffsetType">
<DataType>String</DataType>
<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="ServiceLevelAgreementList">
<DataType>String</DataType>
<Prompt>[ServiceLevelAgreements]</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</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>
<PageWidth>11in</PageWidth>
<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.ServiceLevelTrackingSummary</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="SLASummaryMetaData">
<Fields>
<Field Name="ServiceLevelAgreementRowId">
<DataField>ServiceLevelAgreementRowId</DataField>
</Field>
<Field Name="ServiceLevelAgreementDisplayName">
<DataField>ServiceLevelAgreementDisplayName</DataField>
</Field>
<Field Name="ServiceLevelAgreementTargetManagedEntityTypeDisplayName">
<DataField>ServiceLevelAgreementTargetManagedEntityTypeDisplayName</DataField>
</Field>
<Field Name="ManagementGroupDisplayName">
<DataField>ManagementGroupDisplayName</DataField>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ServiceLevelAgreementParameterBlockDataGet</CommandText>
<QueryParameters>
<QueryParameter Name="@StartDate">
<Value>=Code.ToDbDate(Code.GetReportStartDate())</Value>
</QueryParameter>
<QueryParameter Name="@EndDate">
<Value>=Code.ToDbDate(Code.GetReportEndDate())</Value>
</QueryParameter>
<QueryParameter Name="@ServiceLevelAgreementXml">
<Value>=Parameters!ServiceLevelAgreementList.Value</Value>
</QueryParameter>
<QueryParameter Name="@LanguageCode">
<Value>=Code.GetReportLocLanguageCode()</Value>
</QueryParameter>
</QueryParameters>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</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

Const TimeIntervalCount As Integer = 6
Const TimeIntervalParameterName As String = "TimeInterval"

Dim TimeIntervalTable(TimeIntervalCount - 1) As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval
Dim TimeIntervalParameterTable As System.Collections.Generic.List(Of String)
Dim SlaTable As System.Collections.Generic.Dictionary(Of SlaIdentity, System.Collections.Generic.Dictionary(Of Integer, SloValue))


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)

SlaTable = New System.Collections.Generic.Dictionary(Of SlaIdentity, System.Collections.Generic.Dictionary(Of Integer, SloValue))()
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) &gt; 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) &gt; 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

Public Function GetBdDataAggregationTypeId(ByVal aggregation As DataAggregationType) As Integer
Select Case aggregation
Case DataAggregationType.Hourly
Return 20
Case DataAggregationType.Daily
Return 30
Case Else
Return 0
End Select
End Function


REM ---------------------------------

Public Enum SloObjectiveType
Under = 0
Over = 1
End Enum

Public Class SloValue

Private CurrentValue As Double

Private RelatedValueTable() As Double = New Double() {}

Public ReadOnly Goal As Double

Public ReadOnly Objective As SloObjectiveType

Public Sub New(ByVal SloValue As Double, ByVal SloGoal As Double, ByVal SloObjective As SloObjectiveType)
CurrentValue = SloValue
Goal = SloGoal
Objective = SloObjective
End Sub

Public Sub New(ByVal SloValue As Double, ByVal SloGoal As Double, ByVal SloObjective As String)
CurrentValue = SloValue
Goal = SloGoal
Objective = [Enum].Parse(GetType(SloObjectiveType), SloObjective, True)
End Sub

Public ReadOnly Property Value() As Double
Get
Return CurrentValue
End Get
End Property

Public ReadOnly Property RelatedValues() As Double()
Get
Return RelatedValueTable
End Get
End Property

Public Function IsGoalMet() As Boolean
Return IIf(Objective = SloObjectiveType.Under, CurrentValue &lt;= Goal, CurrentValue &gt;= Goal)
End Function

Public Function IsRelatedGoalMet(ByVal Index As Integer) As Nullable(Of Boolean)
Dim RelatedValue As Double = RelatedValues(Index)
If Double.IsNaN(RelatedValue) Then
Return Nothing
Else
Return New Nullable(Of Boolean)(IIf(Objective = SloObjectiveType.Under, RelatedValue &lt;= Goal, RelatedValue &gt;= Goal))
End If
End Function

Public Sub CollectValue(ByVal NewValue As Double)
Select Case Objective

Case SloObjectiveType.Over
If (NewValue &lt; CurrentValue) Then
CurrentValue = NewValue
End If

Case SloObjectiveType.Under
If (NewValue &gt; CurrentValue) Then
CurrentValue = NewValue
End If

End Select
End Sub

Public Sub CollectRelatedValue(ByVal Index As Integer, ByVal NewValue As Double)
If Index &gt;= RelatedValues.Length Then
ReDim Preserve RelatedValueTable(Index)
RelatedValues(Index) = Double.NaN
End If

If Not Double.IsNaN(NewValue) Then
If Double.IsNaN(RelatedValues(Index)) Then

RelatedValues(Index) = NewValue
Else
Select Case Objective
Case SloObjectiveType.Over
If (NewValue &lt; RelatedValues(Index)) Then
RelatedValues(Index) = NewValue
End If

Case SloObjectiveType.Under
If (NewValue &gt; RelatedValues(Index)) Then
RelatedValues(Index) = NewValue
End If
End Select
End If
End If
End Sub

End Class

REM ---------------------------------

Public Class SlaIdentity
Implements IEquatable(Of SlaIdentity)

Public ReadOnly Id As Integer

Public ReadOnly GroupId As Integer

Public ReadOnly ObjectId As Integer

Public Sub New(ByVal ManagementGroupId As Integer, ByVal SlaId As Integer, ByVal SlaObjectId As Integer)
Id = SlaId
GroupId = ManagementGroupId
ObjectId = SlaObjectId
End Sub

Public Overloads Function Equals(ByVal other As SlaIdentity) As Boolean Implements System.IEquatable(Of SlaIdentity).Equals
Return Id = other.Id And ObjectId = other.ObjectId And GroupId = other.GroupId
End Function

Public Overrides Function GetHashCode() As Integer
Return (GroupId &lt;&lt; 25) Or (Id &lt;&lt; 14) Or ObjectId
End Function

End Class

REM ---------------------------------

Public Function AddSloValue(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer, ByVal Value As Double, ByVal Goal As Double, ByVal Objective As String) As Double
Dim CurrentValue As SloValue = Nothing
Dim SloTable As System.Collections.Generic.Dictionary(Of Integer, SloValue) = Nothing
Dim SlaId As SlaIdentity = New SlaIdentity(ManagementGroup, Sla, SlaObject)

If Not SlaTable.TryGetValue(SlaId, SloTable) Then
SloTable = New System.Collections.Generic.Dictionary(Of Integer, SloValue)()
SlaTable.Add(SlaId, SloTable)
End If

If Not SloTable.TryGetValue(Slo, CurrentValue) Then
CurrentValue = New SloValue(Value, Goal, Objective)
SloTable.Add(Slo, CurrentValue)
Else
CurrentValue.CollectValue(Value)
End If

Return CurrentValue.Value
End Function

Public Function AddRelatedSloValue(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer, ByVal Value As Object, ByVal Index As Integer) As Double
Dim SloVal As SloValue = SlaTable(New SlaIdentity(ManagementGroup, Sla, SlaObject))(Slo)
SloVal.CollectRelatedValue(Index, IIf(IsNothing(Value), Double.NaN, CDbl(Value)))
Return SloVal.RelatedValues(Index)
End Function

Public Function GetSlo(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer) As SloValue
Dim SlaId As SlaIdentity = New SlaIdentity(ManagementGroup, Sla, SlaObject)
If SlaTable.ContainsKey(SlaId) Then
Dim Value As SloValue = Nothing
If SlaTable(SlaId).TryGetValue(Slo, Value) Then
Return Value
Else
Return Nothing
End If
Else
Return Nothing
End If
End Function

Public Function GetSloValue(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer) As Double
Dim Value As SloValue = GetSlo(ManagementGroup, Sla, SlaObject, Slo)
If IsNothing(Value) Then
Return Double.NaN
Else
Return Value.Value
End If
End Function

Public Function GetRelatedSloValue(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer, ByVal Index As Integer) As Double
Dim Value As SloValue = GetSlo(ManagementGroup, Sla, SlaObject, Slo)
If IsNothing(Value) Then
Return Double.NaN
Else
Return Value.RelatedValues(Index)
End If
End Function

Public Function GetSloCondition(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer) As Nullable(Of Boolean)
Dim Value As SloValue = GetSlo(ManagementGroup, Sla, SlaObject, Slo)
If IsNothing(Value) Then
Return Nothing
Else
Return Value.IsGoalMet()
End If
End Function

Public Function GetRelatedSloCondition(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer, ByVal Index As Integer) As Nullable(Of Boolean)
Dim Value As SloValue = GetSlo(ManagementGroup, Sla, SlaObject, Slo)
If IsNothing(Value) Then
Return Nothing
Else
Return Value.IsRelatedGoalMet(Index)
End If
End Function

Public Function GetSlaCondition(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer) As Nullable(Of Boolean)
Dim SlaId As SlaIdentity = New SlaIdentity(ManagementGroup, Sla, SlaObject)
Dim Result As Nullable(Of Boolean) = Nothing

If SlaTable.ContainsKey(SlaId) Then
For Each Value As SloValue In SlaTable(SlaId).Values
If (Not Value.IsGoalMet()) Then
Return False
Else
Result = True
End If
Next
End If

Return Result
End Function

Public Function GetRelatedSlaCondition(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Index As Integer) As Nullable(Of Boolean)
Dim SlaId As SlaIdentity = New SlaIdentity(ManagementGroup, Sla, SlaObject)
Dim Result As Nullable(Of Boolean) = Nothing

If SlaTable.ContainsKey(SlaId) Then
For Each Value As SloValue In SlaTable(SlaId).Values
If Not IsNothing(Value.IsRelatedGoalMet(Index)) Then
If (Not Value.IsRelatedGoalMet(Index).Value) Then
Return False
Else
Result = True
End If
End If
Next
End If

Return Result
End Function

Public Function GetMaxSloValue(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer) As Double
Dim Value As SloValue = GetSlo(ManagementGroup, Sla, SlaObject, Slo)
Dim Result As Double = Double.NaN

If Not IsNothing(Value) Then
Result = Value.Goal

If Value.Value &gt; Result Then
Result = Value.Value
End If

For Each RelatedValue As Double In Value.RelatedValues
If RelatedValue &gt; Result Then
Result = RelatedValue
End If
Next
End If

Return Result
End Function

Public Function GetMinSloValue(ByVal ManagementGroup As Integer, ByVal Sla As Integer, ByVal SlaObject As Integer, ByVal Slo As Integer) As Double
Dim Value As SloValue = GetSlo(ManagementGroup, Sla, SlaObject, Slo)
Dim Result As Double = 0

If Not IsNothing(Value) Then
If Value.Goal &lt; Result Then
Result = Value.Goal
End If

If Value.Value &lt; Result Then
Result = Value.Value
End If

For Each RelatedValue As Double In Value.RelatedValues
If RelatedValue &lt; Result Then
Result = RelatedValue
End If
Next
End If

Return Result
End Function

REM ---------------------------------

Public Function GetTimeIntervalParameterTable() As System.Collections.Generic.IList(Of String)
If IsNothing(TimeIntervalParameterTable) Then
TimeIntervalParameterTable = New System.Collections.Generic.List(Of String)()

For Each Value As String In Report.Parameters(TimeIntervalParameterName).Value
If Not IsNothing(Value) Then
If Not String.IsNullOrEmpty(Value.Trim()) Then
TimeIntervalParameterTable.Add(Value)
End If
End If
Next
End If

Return TimeIntervalParameterTable
End Function

Public Function GetTimeInterval(ByVal Index As Integer) As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval
Dim Value As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval = Nothing

If (Index &gt;= 0) And (Index &lt; TimeIntervalCount) Then
Value = TimeIntervalTable(Index)

If IsNothing(Value) Then
If GetTimeIntervalParameterTable().Count &gt; Index Then
Value = New Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval(GetReportEndDate(), GetTimeIntervalParameterTable()(Index), ReportCulture)
TimeIntervalTable(Index) = Value
End If
End If
End If

Return Value
End Function

Public Function GetTimeIntervalTitle(ByVal Index As Integer) As String
Dim Interval As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval
Interval = GetTimeInterval(Index)
If IsNothing(Interval) Then
Return Nothing
Else
Return Interval.Title
End If
End Function

Public Function IsTimeIntervalContains(ByVal Index As Integer, ByVal Value As DateTime) As Boolean
Dim Interval As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval
Interval = GetTimeInterval(Index)
If IsNothing(Interval) Then
Return False
Else
Return Interval.Contains(Value)
End If
End Function

Public Function IsTimeIntervalHidden(ByVal Index As Integer) As Boolean
Dim Interval As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval
Interval = GetTimeInterval(Index)
Return IsNothing(Interval)
End Function

Public Function CalculateTimeIntervalValue(ByVal Index As Integer, ByVal IntervalDate As DateTime, ByVal Value As Object) As Object
If IsTimeIntervalContains(Index, IntervalDate) Then
Return Value
Else
Return System.DBNull.Value
End If
End Function

Public Function GetTimeIntervalStartDate(ByVal Index As Integer) As Date
Dim Interval As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval
Interval = GetTimeInterval(Index)
If IsNothing(Interval) Then
Return Nothing
Else
Return Interval.StartDate
End If
End Function

Public Function GetTimeIntervalEndDate(ByVal Index As Integer) As Date
Dim Interval As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval
Interval = GetTimeInterval(Index)
If IsNothing(Interval) Then
Return Nothing
Else
Return Interval.EndDate
End If
End Function

Public Function CalculateMinStartDate() As DateTime
Dim Index As Integer
Dim MinStartDate As DateTime = GetReportStartDate()
Dim Interval As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval

For Index = 0 To TimeIntervalCount - 1
Interval = GetTimeInterval(Index)
If (Not IsNothing(Interval)) Then
If (Interval.StartDate &lt; MinStartDate) Then
MinStartDate = Interval.StartDate
End If
End If
Next
Return MinStartDate
End Function

Public Function CalculateMaxEndDate() As DateTime
Dim Index As Integer
Dim MaxEndDate As DateTime = GetReportEndDate()
Dim Interval As Microsoft.EnterpriseManagement.Reporting.ParameterTimeInterval

For Index = 0 To TimeIntervalCount - 1
Interval = GetTimeInterval(Index)
If (Not IsNothing(Interval)) Then
If (Interval.EndDate &gt; MaxEndDate) Then
MaxEndDate = Interval.EndDate
End If
End If
Next
Return MaxEndDate
End Function

REM ---------------------------------

Public Enum SloValueType
Number = 0
Percent = 1
End Enum

Public Function FormatSloValue(ByVal Value As Object, ByVal ValueType As SloValueType) As String
If Double.IsNaN(Value) Then
Return String.Empty
Else
Select Case ValueType
Case SloValueType.Number
Return FormatNumber("G12", Value)

Case SloValueType.Percent
Return FormatNumber("P3", Value/100)
End Select
End If
End Function

Public Function GetSloImage(ByVal Value As Nullable(Of Boolean)) As String
If IsNothing(Value) Then
Return "NoDataSmall.gif"
Else
Return IIF(Value.Value, "TrueSmall.gif", "FalseSmall.gif")
End If
End Function

Public Function GetSlaImage(ByVal Value As Nullable(Of Boolean)) As String
If IsNothing(Value) Then
Return "NoDataLarge.gif"
Else
Return IIF(Value.Value, "TrueLarge.gif", "FalseLarge.gif")
End If
End Function
</Script></Code>
<Width>10.85in</Width>
<Body><Script>
<ReportItems>
<CustomReportItem Name="ForceYukonEngine">
<Type>ForceYukonEngine</Type>
<Top>0 mm</Top>
<Left>0 mm</Left>
<Height>0.01 mm</Height>
<Width>0.01 mm</Width>
<Visibility>
<Hidden>true</Hidden>
</Visibility>
<CustomData>
<DataSetName>SLASummaryMetaData</DataSetName>
<DataColumnGroupings>
<DataGroupings>
<DataGrouping>
<Static>true</Static>
</DataGrouping>
</DataGroupings>
</DataColumnGroupings>
<DataRowGroupings>
<DataGroupings>
<DataGrouping>
<Static>true</Static>
</DataGrouping>
</DataGroupings>
</DataRowGroupings>
<DataRows>
<DataRow>
<DataCell>
<DataValue>
<Value>1</Value>
</DataValue>
</DataCell>
</DataRow>
</DataRows>
</CustomData>
</CustomReportItem>
<Rectangle Name="rectangle5">
<Left>0.15in</Left>
<ZIndex>5</ZIndex>
<Top>1.41042in</Top>
<Width>10.55in</Width>
<Style></Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Default>DarkGray</Default>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
</Style>
<Height>0.05in</Height>
</Rectangle>
<Rectangle Name="rectangle4">
<Left>0.15in</Left>
<ZIndex>4</ZIndex>
<ReportItems>
<Textbox Name="reportDescriptionTitle">
<DataElementOutput>NoOutput</DataElementOutput>
<Top>0.31042in</Top>
<Width>10.5in</Width>
<Style></Style>
<Color>DimGray</Color>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Code.GetLocTable("LT_Report").GetString("R.DescriptionTitle", "[Report Description Title]")</Value>
</Textbox>
<Textbox Name="reportTitle">
<DataElementOutput>Output</DataElementOutput>
<Top>0.03959in</Top>
<Width>10.49792in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<CanGrow>true</CanGrow>
<DataElementName>Title</DataElementName>
<Height>0.25in</Height>
<Value>=Code.GetLocTable("LT_Report").GetString("R.Title", "[Report Title]")</Value>
</Textbox>
</ReportItems>
<Top>0.7in</Top>
<Width>10.55in</Width>
<Style></Style>
<BackgroundColor>Gainsboro</BackgroundColor>
</Style>
<Height>0.51042in</Height>
</Rectangle>
<Rectangle Name="rectangle3">
<Left>0.15in</Left>
<ZIndex>3</ZIndex>
<Visibility>
<Hidden>true</Hidden>
<ToggleItem>reportDescriptionTitle</ToggleItem>
</Visibility>
<ReportItems>
<Textbox Name="reportDescription">
<DataElementOutput>Output</DataElementOutput>
<Width>10.3in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<CanGrow>true</CanGrow>
<Left>0.2in</Left>
<DataElementName>Description</DataElementName>
<Value>=Code.GetLocTable("LT_Report").GetString("R.Description", "[Report Description]")</Value>
</Textbox>
</ReportItems>
<Top>1.21042in</Top>
<Width>10.55in</Width>
<Style></Style>
<BackgroundColor>Gainsboro</BackgroundColor>
</Style>
<Height>0.2in</Height>
</Rectangle>
<Rectangle Name="rectangle2">
<Left>0.15in</Left>
<ZIndex>2</ZIndex>
<ReportItems>
<Textbox Name="textbox14">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.8573in</Top>
<Width>8.48125in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.95625in</Left>
<Height>0.2in</Height>
<Value>=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.SlaFormat", "{0}"), Code.FormatNumber("G",CountDistinct(Fields!ServiceLevelAgreementRowId.Value, "SLASummaryMetaData")))</Value>
</Textbox>
<Textbox Name="textbox53">
<DataElementOutput>Output</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.25in</Top>
<Width>8.45in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.96042in</Left>
<DataElementName>Aggregation</DataElementName>
<Height>0.2in</Height>
<Value>=Code.GetLocTable("LT_Report").GetString("R.AggregationValue_" + Parameters!DataAggregation.Value.ToString(), "[" + Parameters!DataAggregation.Value.ToString() + "]")</Value>
</Textbox>
<Textbox Name="textbox54">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.25in</Top>
<Width>0.1in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.85in</Left>
<Height>0.2in</Height>
<Value>:</Value>
</Textbox>
<Textbox Name="textbox55">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.25in</Top>
<Width>1.65in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>15</ZIndex>
<CanGrow>true</CanGrow>
<Left>0.2in</Left>
<Height>0.2in</Height>
<Value>=Code.GetLocTable("LT_Report").GetString("R.AggregationLabel", "[Data Aggregation]")</Value>
</Textbox>
<Rectangle Name="rectangle6">
<Left>0.02083in</Left>
<ZIndex>14</ZIndex>
<Visibility>
<Hidden>true</Hidden>
<ToggleItem>objectsParameterTitle</ToggleItem>
</Visibility>
<ReportItems>
<List Name="list1">
<ZIndex>1</ZIndex>
<DataElementOutput>NoOutput</DataElementOutput>
<DataSetName>SLASummaryMetaData</DataSetName>
<ReportItems>
<Line Name="line1">
<Top>0.38282in</Top>
<Style></Style>
<BorderColor>
<Default>DimGray</Default>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
</Style>
<ZIndex>2</ZIndex>
<Left>1.89272in</Left>
</Line>
<Textbox Name="textbox68">
<Top>0.18229in</Top>
<Width>8.45833in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.90938in</Left>
<Height>0.17708in</Height>
<Value>=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.SlaFormatLine2", "{0}| {1}"), Fields!ManagementGroupDisplayName.Value, Fields!ServiceLevelAgreementTargetManagedEntityTypeDisplayName.Value)</Value>
</Textbox>
<Textbox Name="textbox67">
<rd:DefaultName>textbox67</rd:DefaultName>
<Width>8.45834in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Left>1.90938in</Left>
<Height>0.17708in</Height>
<Value>=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.SLAFormatLine1", "{0}"), Fields!ServiceLevelAgreementDisplayName.Value)</Value>
</Textbox>
</ReportItems>
<Top>0.05078in</Top>
<Style></Style>
<BackgroundColor>Gainsboro</BackgroundColor>
</Style>
<Grouping Name="list1_Details_Group">
<GroupExpressions>
<GroupExpression>=Fields!ServiceLevelAgreementRowId.Value</GroupExpression>
</GroupExpressions>
</Grouping>
<Height>0.38282in</Height>
</List>
<Line Name="line3">
<Top>0.04in</Top>
<Style></Style>
<BorderColor>
<Default>DimGray</Default>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
</Style>
<Left>1.92917in</Left>
<Height>0in</Height>
</Line>
</ReportItems>
<Top>1.07083in</Top>
<Width>10.37917in</Width>
<Style></Style>
<BackgroundColor>Gainsboro</BackgroundColor>
</Style>
<Height>0.51303in</Height>
</Rectangle>
<Textbox Name="textbox20">
<DataElementOutput>Output</DataElementOutput>
<Visibility>
<Hidden>true</Hidden>
</Visibility>
<CanShrink>true</CanShrink>
<Top>0.45in</Top>
<Width>0.05in</Width>
<Style></Style>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<ZIndex>13</ZIndex>
<CanGrow>true</CanGrow>
<Left>0.15in</Left>
<DataElementName>BusinessHours</DataElementName>
<Height>0.2in</Height>
<Value>=Code.FormatBusinessHours("{2} {0}-{1}", Code.GetReportTimeFilter())</Value>
</Textbox>
<Textbox Name="textbox17">
<DataElementOutput>Output</DataElementOutput>
<Visibility>
<Hidden>true</Hidden>
</Visibility>
<CanShrink>true</CanShrink>
<Top>0.45in</Top>
<Width>0.05in</Width>
<Style></Style>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<ZIndex>12</ZIndex>
<CanGrow>true</CanGrow>
<Left>0.1in</Left>
<DataElementName>TimeZone</DataElementName>
<Height>0.2in</Height>
<Value>=Parameters!TimeZoneName.Value</Value>
</Textbox>
<Textbox Name="textbox9">
<DataElementOutput>Output</DataElementOutput>
<Visibility>
<Hidden>true</Hidden>
</Visibility>
<CanShrink>true</CanShrink>
<Top>0.45in</Top>
<Width>0.05in</Width>
<Style></Style>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Left>0.05in</Left>
<DataElementName>EndDate</DataElementName>
<Height>0.2in</Height>
<Value>=Code.FormatDateTime("g", Code.GetReportEndDate())</Value>
</Textbox>
<Textbox Name="textbox27">
<DataElementOutput>NoOutput</DataElementOutput>
<Visibility>
<Hidden>=Not Code.IsBusinessHours(Code.GetReportTimeFilter())</Hidden>
</Visibility>
<CanShrink>true</CanShrink>
<Top>0.65in</Top>
<Width>8.45in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>10</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.96042in</Left>
<Height>0.2in</Height>
<Value>=Code.FormatBusinessHours(Code.GetLocTable("LT_Report").GetString("R.BusinessTimeFormat", "{2} {0} - {1}"), Code.GetReportTimeFilter())</Value>
</Textbox>
<Image Name="parameterBottomImage">
<Sizing>AutoSize</Sizing>
<Top>1.59375in</Top>
<MIMEType/>
<Source>External</Source>
<Style/>
<ZIndex>9</ZIndex>
<Height>0.05in</Height>
<Value>../gradient_landscape.gif</Value>
</Image>
<Textbox Name="textbox11">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.85in</Top>
<Width>0.1in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.85in</Left>
<Height>0.2in</Height>
<Value>:</Value>
</Textbox>
<Textbox Name="objectsParameterTitle">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.85in</Top>
<Width>1.85in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Height>0.2in</Height>
<Value>=Code.GetLocTable("LT_Report").GetString("R.SlaLabel", "[Report Service Levels Label]")</Value>
</Textbox>
<Textbox Name="ReportGeneratedTime">
<DataElementOutput>Output</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.05in</Top>
<Width>8.45in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.96042in</Left>
<DataElementName>Created</DataElementName>
<Height>0.2in</Height>
<Value>=Code.FormatDateTime("g", Code.ToReportDate(DateTime.UtcNow))</Value>
</Textbox>
<Textbox Name="textbox7">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.45in</Top>
<Width>0.1in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.85in</Left>
<Height>0.2in</Height>
<Value>:</Value>
</Textbox>
<Textbox Name="textbox2">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.05in</Top>
<Width>0.1in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.85in</Left>
<Height>0.2in</Height>
<Value>:</Value>
</Textbox>
<Textbox Name="textbox1">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.05in</Top>
<Width>1.65in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Left>0.2in</Left>
<Height>0.2in</Height>
<Value>=Code.GetLocTable("LT_Report").GetString("R.GeneratedTimeLabel", "[Report Generated Time Label]")</Value>
</Textbox>
<Textbox Name="textbox28">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.45in</Top>
<Width>8.45in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Left>1.95in</Left>
<Height>0.2in</Height>
<Value>=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.StartEndTimeFormat", "{0} - {1}"), Code.FormatDateTime(IIf(Code.IsBusinessHours(Code.GetReportTimeFilter()) Or (CInt(Parameters!DataAggregation.Value) &gt; 0), "d", "g"), Code.GetReportStartDate()), Code.FormatDateTime(IIf(Code.IsBusinessHours(Code.GetReportTimeFilter()) Or (CInt(Parameters!DataAggregation.Value) &gt; 0), "d", "g"), Code.GetReportEndDate()))</Value>
</Textbox>
<Textbox Name="textbox26">
<DataElementOutput>NoOutput</DataElementOutput>
<CanShrink>true</CanShrink>
<Top>0.45in</Top>
<Width>1.65in</Width>
<Style></Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Left>0.2in</Left>
<Height>0.2in</Height>
<Value>=Code.GetLocTable("LT_Report").GetString("R.StartEndTimeLabel", "[Report Start/End Time Label]")</Value>
</Textbox>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<DataElementOutput>Output</DataElementOutput>
<Visibility>
<Hidden>true</Hidden>
</Visibility>
<CanShrink>true</CanShrink>
<Top>0.45in</Top>
<Width>0.05in</Width>
<Style></Style>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<DataElementStyle>ElementNormal</DataElementStyle>
<CanGrow>true</CanGrow>
<DataElementName>StartDate</DataElementName>
<Height>0.2in</Height>
<Value>=Code.FormatDateTime("g", Code.GetReportStartDate())</Value>
</Textbox>
</ReportItems>
<Top>1.47083in</Top>
<Width>10.55in</Width>
<Height>1.65416in</Height>
</Rectangle>
<Image Name="banner_image">
<Sizing>AutoSize</Sizing>
<Top>0.11042in</Top>
<Width>10.55208in</Width>
<MIMEType/>
<Source>External</Source>
<Style/>
<ZIndex>1</ZIndex>
<Left>0.15in</Left>
<Height>0.58958in</Height>
<Value>../banner_landscape.jpg</Value>
</Image>
<Subreport Name="ServiceLevelTrackingSummaryDetail">
<Parameters>
<Parameter Name="StartDate_BaseType">
<Value>=Parameters!StartDate_BaseType.Value</Value>
</Parameter>
<Parameter Name="StartDate_BaseValue">
<Value>=Parameters!StartDate_BaseValue.Value</Value>
</Parameter>
<Parameter Name="StartDate_OffsetType">
<Value>=Parameters!StartDate_OffsetType.Value</Value>
</Parameter>
<Parameter Name="StartDate_OffsetValue">
<Value>=Parameters!StartDate_OffsetValue.Value</Value>
</Parameter>
<Parameter Name="EndDate_BaseType">
<Value>=Parameters!EndDate_BaseType.Value</Value>
</Parameter>
<Parameter Name="EndDate_BaseValue">
<Value>=Parameters!EndDate_BaseValue.Value</Value>
</Parameter>
<Parameter Name="EndDate_OffsetType">
<Value>=Parameters!EndDate_OffsetType.Value</Value>
</Parameter>
<Parameter Name="EndDate_OffsetValue">
<Value>=Parameters!EndDate_OffsetValue.Value</Value>
</Parameter>
<Parameter Name="TimeType">
<Value>=Parameters!TimeType.Value</Value>
</Parameter>
<Parameter Name="TimeWeekMap">
<Value>=Parameters!TimeWeekMap.Value</Value>
</Parameter>
<Parameter Name="TimeZone">
<Value>=Parameters!TimeZone.Value</Value>
</Parameter>
<Parameter Name="TimeZoneName">
<Value>=Parameters!TimeZoneName.Value</Value>
</Parameter>
<Parameter Name="Interactive">
<Value>=Parameters!Interactive.Value</Value>
</Parameter>
<Parameter Name="ManagementGroupId">
<Value>=Parameters!ManagementGroupId.Value</Value>
</Parameter>
<Parameter Name="DataAggregation">
<Value>=Parameters!DataAggregation.Value</Value>
</Parameter>
<Parameter Name="TimeInterval">
<Value>=Parameters!TimeInterval.Value</Value>
</Parameter>
<Parameter Name="ServiceLevelAgreementList">
<Value>=Parameters!ServiceLevelAgreementList.Value</Value>
</Parameter>
</Parameters>
<Top>3.125in</Top>
<ReportName>Microsoft.SystemCenter.DataWarehouse.Report.ServiceLevelTrackingSummary.Detail</ReportName>
<Width>10.55in</Width>
<Left>0.14583in</Left>
<Height>0.67708in</Height>
</Subreport>
</ReportItems>
<Height>4.05208in</Height>
</Script></Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox8">
<Top>0.1in</Top>
<Width>1.7in</Width>
<Style></Style>
<Color>DimGray</Color>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Left>8.95in</Left>
<Height>0.1875in</Height>
<Value>=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.PageFormat", "{0}/{1}"), Globals!PageNumber, Globals!TotalPages)</Value>
</Textbox>
<Textbox Name="textbox37">
<Top>0.1in</Top>
<Width>8.75in</Width>
<Style></Style>
<Color>DimGray</Color>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Left>0.15in</Left>
<Height>0.1875in</Height>
<Value>=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.TimeZoneFormat", "{0}"), Parameters!TimeZoneName.Value)</Value>
</Textbox>
</ReportItems>
<Height>0.35in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<PageHeight>8.5in</PageHeight>
</Report>
</Definition>
<ReportStrings>
<ReportString ID="R.Title"/>
<ReportString ID="R.Description"/>
<ReportString ID="R.DescriptionTitle"/>
<ReportString ID="R.GeneratedTimeLabel"/>
<ReportString ID="R.SlaFormatLine1"/>
<ReportString ID="R.SlaFormatLine2"/>
<ReportString ID="R.SlaLabel"/>
<ReportString ID="R.TimeZoneFormat"/>
<ReportString ID="R.PageFormat"/>
<ReportString ID="R.BusinessTimeFormat"/>
<ReportString ID="R.StartEndTimeFormat"/>
<ReportString ID="R.StartEndTimeLabel"/>
<ReportString ID="R.AggregationLabel"/>
<ReportString ID="R.AggregationValue_0"/>
<ReportString ID="R.AggregationValue_1"/>
<ReportString ID="R.SlaFormat"/>
<ReportString ID="R.Interval.ReportDuration"/>
<ReportString ID="R.Interval.Last24Hours"/>
<ReportString ID="R.Interval.Last7Days"/>
<ReportString ID="R.Interval.Last30Days"/>
<ReportString ID="R.Interval.Last60Days"/>
<ReportString ID="R.Interval.WeektoDate"/>
<ReportString ID="R.Interval.LastWeek"/>
<ReportString ID="R.Interval.MonthtoDate"/>
<ReportString ID="R.Interval.LastMonth"/>
<ReportString ID="R.Interval.QuartertoDate"/>
<ReportString ID="R.Interval.LastQuarter"/>
<ReportString ID="R.Interval.YeartoDate"/>
<ReportString ID="R.Interval.LastYear"/>
</ReportStrings>
</Report>