Welcome to MSDN Blogs Sign in | Join | Help

Eugene Bykov

System Center Operations Manager Reporting
Operations Manager 2007 SP1 training videos

A set of SCOM 2007 SP1 specific training videos are now published on TechNet at http://technet.microsoft.com/en-us/opsmgr/bb986763.aspx. There are two videos out there I am doing on new reporting features in SCOM 2007 SP1. Here are the links:

Using the Microsoft Generic Report Library
This video demonstrates generic overrides report.
Running Time (minutes): 6:16

Using favorite reports and the report publishing feature
This video demonstrates favorite reports and report publishing features.
Running Time (minutes): 6:44

Enabling EnterpriseManagementChartControl in Visual Studio 2005

If you try editing some generic reports like Performance in Visual Studio you will get an error saying that EnterpriseManagementChartControl is not installed. The reason is that SCOM 2007 does not configure EnterpriseManagementChartControl development environment during normal install. If you like to use chart control designer in Visual Studio you would need to configure it manually. Here are the steps:

  1. Make sure SCOM 2007 Reporting is installed.
  2. Copy MicrosoftRSChart.dll and MicrosoftRSChartDesigner.dll from SSRS bin directory to Visual Studio private assemblies directory on your development machine.

    Location of SSRS bin directory depends on the way you install SQL Sever but usually the path looks like this: \Program Files\Microsoft SQL Server\MSSQL.N\Reporting Services\ReportServer\bin

    Visual Studio private assemblies directory usually could be found under \Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies
  3. Find RSReportDesigner.config file in the Visual Studio private assemblies directory and add the following records to it:

    <Configuration>
        <
    Extensions>
                ...
                ...


            <
    ReportItemDesigner>
                <
    ReportItem Name="EnterpriseManagementChartControl"
                       
    Type="Dundas.ReportingServices.DundasChartDesigner,
                                  MicrosoftRSChartDesigner
    " />
            </
    ReportItemDesigner>
            <
    ReportItems>
                <
    ReportItem Name="EnterpriseManagementChartControl"
                       
    Type="Dundas.ReportingServices.DundasChart,
                                  MicrosoftRSChart
    " />
            </
    ReportItems>
            <
    ReportItemConverter>
                <
    Converter Source="Chart" Target="EnterpriseManagementChartControl"
                       
    Type="Dundas.ReportingServices.RSChartConverter,
                                  MicrosoftDundasRSChartDesigner
    " />
            </
    ReportItemConverter>

        </
    Extensions>
    </
    Configuration>

  4. Restart Visual Studio.

Please note that these steps will only work with SCOM 2007 SP1 RC or later releases. The files mentioned here were not a part of SCOM 2007 RTM.

OpsMgr 2007 SP1 RC is released!

The Release Candidate of Service Pack 1 for Operations Manager 2007 is released and ready for download from http://connect.microsoft.com/systemcenter. This release is fully supported and it will be an upgrade form it to SP1 RTM.

SP1 RC is adding several interesting reporting features to the product. Here are some of them:

  • Ability to view favorite reports in the Web Console.
  • Report publishing functionality.
  • Brand new Overrides report.
  • Basic data warehouse capacity planning using data warehouse properties report.
  • Improved availability reporting by introducing new "Monitoring Available" state.
Performance "Top" linked reports

Generic performance reports are ones of the most powerful generic reports in SCOM 2007. I like to start from "Performance Top Objects" and "Performance Top Instances" reports. They are the easiest and creating linked reports for them could be quite useful in case where you like to simplify customer experience in searching for objects or instances that are "on top" for a specific performance rule. In most cases the way to simplify the experience is to hard-code the rule in the linked report so the customers won't need to search for it.

If you haven't done this already I highly recommend reading "Linked availability reports" and "Linked reports" posts before continue. They cover some theory behind linked reports authoring. Reading "Report parameters block" and "Report parameter controls" could also be useful in understanding RPDL part of the story.

RuleId, SortOrder and TopCount are parameters that are customizable for "Performance Top" reports. "Performance Top Objects" report also has an additional RuleInstance parameter. This parameter is not valid for "Performance Top Instance" report since the rule instance is the result of the report rather then a filter.

RuleId

This parameter defines the rule report operates on. If you look at the actual report code (RDL file) you find that this parameter is in fact GUID of a performance rule in SCOM management group installation. You may ask me how could I know a GUID of the rule in a particular management group at the time of management pack authoring? The answer is you can't. Instead you should use a special $MPElement syntax which allows referencing of management pack elements by a system name at authoring time. $MPElement reference is resolved and converted to GUID automatically at the time of report deployment. Here is an example:

<Parameter Name="RuleId">
 
<
Value>$MPElement[Name="SQL!Microsoft.SQLServer.2005.NumberDeadlocksPerSecond"]$</Value>
</
Parameter>

SortOrder

This parameter switches report algorithm. Here is the list of possible values:

Top N -1
Bottom N 1

TopCount

This is "N" value for the SortOrder parameter. Specify any positive number here but be reasonable. Setting the value too high can make the report chart unreadable.

RuleInstance

As I said before this parameter only valid for "Performance Top Objects report". It is used in cases where you know an instance or a set of rule instances you like to include in the report filter criteria.

<Parameter Name="RuleInstance">
 
<
Value>A</Value>
  <Value>B</Value>
  <Value>C</Value>
</
Parameter>

Now when we know all these parameters it is a snap to define the lined report. As usually you should not forget about parameter definition for the new report. To simplify the process just copy and paste context of the Microsoft.SystemCenter.DataWarehouse.Report.PerformanceTop.rpdl or Microsoft.SystemCenter.DataWarehouse.Report.PerformanceTopInstance.rpdl. In most cases however you can choose to remove some parameter controls from the block to disallow users changing the parameters you specified. The most common control to disable is the rule picker, but you can choose to remove TopCount and/or SortOrder as well. Here is the complete example:

<LinkedReport ID="Demo.Bottom10DeadlockedDatabases"

        Accessibility="Public" Visible="true" Base="Reporting!Microsoft.SystemCenter.DataWarehouse.Report.PerformanceTop">

   <ParameterBlock columns="2" xmlns="http://schemas.microsoft.com/mom/reporting/2007/ReportParameterSettings">
      <
Controls>
        <Control type="Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.RelativeDateTimePicker">
         
<
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" />

          </
ReportParameters>
       
</
Control>
        <
Control type="Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.ComboBox">
         
<
ReportParameters>
           
<
ReportParameter name="ManagementGroupId">
      
       <
Prompt>
Microsoft.SystemCenter.DataWarehouse.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.ManagementGroup
              </
Prompt>

           
</
ReportParameter>
          
</
ReportParameters>
        
</
Control>
     </
Controls>
   </
ParameterBlock>

  <Parameters>

    <Parameter Name="RuleId">

      <Value>$MPElement[Name="SQL!Microsoft.SQLServer.2005.NumberDeadlocksPerSecond"]$</Value>

    </Parameter>

    <Parameter Name="SortOrder">

      <Value>1</Value>

    </Parameter>

    <Parameter Name="TopCount">

      <Value>10</Value>

    </Parameter>

  </Parameters>

</LinkedReport>

Creating new Report Operator user role

The question keeps popping up so I decided to put this on my blog. SCOM 2007 console does not have an ability to create a new Report Operator user role. Part of the reason is that there is no UI to grant permissions to individual reports from SCOM console either. You can however grant permissions to reports using standard SSRS Report Manager interface as it described in the SCOM documentation (How to Set Permissions on a Report Using Command Shell in Operations Manager 2007). The one thing which is left unspecified is how to create a new Report Operator role so you can put users you like to grant or restrict access to into it.

So here is a script to create a new Report Operator user role using Command Shell:

$mg = (get-item .).ManagementGroup
$reportOperator = $mg.GetMonitoringProfiles() | where {$_.Name -eq "ReportOperator"}
$obj = new-object Microsoft.EnterpriseManagement.Monitoring.Security.MonitoringUserRole

$obj.Name = "TestReportOperatorRole"
$obj.DisplayName = "Test Report Operator Role"
$obj.Description = "Test Report Operator Role"
$obj.MonitoringProfile = $reportOperator

$mg.InsertMonitoringUserRole($obj)

After you execute this script “Test Report Operator Role” appears in UI and you would be able to add users to it using User Role Properties dialog.

Getting performance report chart data

Several customers asked us lately if there is a way of getting actual values the performance report charts are generated on in a tabular form. Even thought this is not possible in the Performance report it is in fact possible with the Performance Detail report.

Performance Detail report could be either run directly or as a drill down from the Performance report. The report shows detailed performance chart along with a summary table below. If you choose to display histogram in the parameter block a “Detail Table” link appears inside the summary table. The link allows you to see a value table the chart is based on.

Unfortunately in RTM version of SCOM the “Detail Table” link is disabled for non-histogram reports. However if you export this non-histogram report to Excel or XML format the value table will be exported as well and could be easily viewed or used in your custom application.

Linked availability reports

Availability report is one of the easiest reports to create links to. The report is based on the monitor state changes. There are not that many parameters to control besides list of monitoring objects, monitor states considered to be downtime and essentially the monitor.

One important thing to understand in linked report authoring is that objects should never be used as a hard-coded parameters to your reports. Monitoring objects are specific to a particular SCOM management group installation and could not be known at the time the management pack is created.

Monitor and downtime states on the other hand are things that are well known at the authoring time. Hard-coding them could be quite useful in cases where you either want to look at the particular monitor or when your organization has some specific rules around downtime definition.

Let's say we like to create an availability report based on ping status assuming that device is not available when the monitor is in down or warning states. Here is a definition of such report:

<LinkedReport ID="Demo.ComputerPingHealth"

    Accessibility="Public" Visible="true" Base="Reporting! Microsoft.SystemCenter.DataWarehouse.Report.Availability">

  <Parameters>

    <Parameter Name="MonitorName">

      <Value>Microsoft.SystemCenter.Ping</Value>

    </Parameter>

    <Parameter Name="DownTime">

      <Value>2</Value>

    </Parameter>

  </Parameters>

</LinkedReport>

Notice that we put only value 2 for DownTime parameter even though I said we will consider both monitor down (red) and warning (yellow) states as downtime. This is because "monitor down" state is always considered as downtime regardless of what we specified it in the DownTime parameter.

Here is the list of  all possible values for the DownTime parameter:

Warning 2
Planned Maintenance 6
Unplanned Maintenance 5
Monitor disabled 4
Unmonitored 3

The last thing to do is to create parameter definition for the new report. To simplify the process just copy context of the Microsoft.SystemCenter.DataWarehouse.Report.Availability.rpdl there. Here is the result:

<LinkedReport ID="Demo.ComputerPingHealth"

        Accessibility="Public" Visible="true" Base="Reporting!Microsoft.SystemCenter.DataWarehouse.Report.Availability">

   <ParameterBlock columns="4" xmlns="http://schemas.microsoft.com/mom/reporting/2007/ReportParameterSettings">
      <
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.MonitoringObjectXmlPicker" columnSpan="2" rowSpan="2">
         
<
ReportParameters>
           
<
ReportParameter name="ObjectList">
             
<
Prompt>
Microsoft.SystemCenter.DataWarehouse.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.ObjectList
              </
Prompt>

           
</
ReportParameter>
           
<
ReportParameter name="ManagementGroupId" binding="GroupList"/>
         
</
ReportParameters>
        
</
Control>
        
<
Control type="Microsoft.SystemCenter.DataWarehouse.Report.ParameterControl.CheckedListBox" rowSpan="2">
         
<
ReportParameters>
           
<
ReportParameter name="DownTime">
              <Prompt>
Microsoft.SystemCenter.DataWarehouse.Report.Library!Microsoft.SystemCenter.DataWarehouse.Report.ParameterPrompt.AvailabilityDownTime
              </
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>

  <Parameters>

    <Parameter Name="MonitorName">

      <Value>Microsoft.SystemCenter.Ping</Value>

    </Parameter>

    <Parameter Name="DownTime">

      <Value>2</Value>

    </Parameter>

  </Parameters>

</LinkedReport>

Report parameter controls

Nearly any report requires you to fill some parameters before you run it. Most commonly you are asked to provide a date range, objects you are interested in and maybe some other parameters that drive report content.

"Report parameters block" is the place where all these parameters are entered. Report parameters block consist of a set of report parameter controls. Each parameter control defines a visual representation for one or more underlying report parameters.

Report parameter controls used for a particular report are defined in the RPDL file.
Here is the schema for them:

<xs:element name="Control" minOccurs="1" maxOccurs="unbounded">
    <
xs:complexType>
        <
xs:sequence>

            <xs:element name="ReportParameters" minOccurs="0" maxOccurs="1">
                <
xs:complexType>
                    <
xs:sequence>
                        <
xs:element name="ReportParameter" 
                                           minOccurs="1" maxOccurs="unbounded">
                            <
xs:complexType>
                                <
xs:sequence>
                                    <
xs:element name="Prompt" type="xs:string"
                                                      
minOccurs="0" maxOccurs="1" />
                                </
xs:sequence>
                                <
xs:attribute name="name" type="xs:token" use="required" />
                                <
xs:attribute name="binding" type="xs:token" use="optional" />
                            </
xs:complexType>
                        </
xs:element>
                    </
xs:sequence>
                </
xs:complexType>
            </
xs:element>

            <xs:element name="Properties" minOccurs="0" maxOccurs="1">
                <
xs:complexType>
                    <
xs:sequence>
                        <
xs:element name="Property"
                       &nb