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="https://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>