StatPro Revolution Web API


The interactive-statistics-analysis-query Link Relation


Overview

The interactive-statistics-analysis-query link relation identifies a link that targets the Interactive Statistics Analysis resource, which is accessed using the HTTP POST method. The Interactive Statistics Analysis resource is able to provide a variety of historical risk, performance and raw data measures that are calculated on-the-fly when a request is submitted. The body of the POSTed request must contain an XML document which a client application can configure which tables, rows and columns are to be returned in the resource.

The XML document submitted in the payload of the POST request must conform to a published schema document (XSD) in order for the request to be successful. The interactive-statistics-analysis-query link relation shares its basic behavior and grammar for tables, rows, columns, results and error messages with interactive-risk-analysis-query, differing only in the set of relevant measures and parameters.

There are various useful resources that are useful to be familiar with when formulating Interactive Statistics Analysis queries. These are:

  • The list of supported Interactive Statistics Analysis measures outlining all of the available measures that can be used within interactive statistics queries.
  • The list of supported Interactive Statistics Analysis periods outlining all of the available periods that can be used within interactive statistics queries.
  • The portfolio-return-definitions link relation, listing the return types that can be used for Ex-Post portfolio statistics.
  • The portfolio-share-classes link relation, listing the share classes that can be used for Ex-Post portfolio statistics.
  • The portfolios-query link relation, listing the portfolios that can be used to override the main or any other performer.
  • The benchmarks-query link relation, listing the benchmarks that can be used to override a benchmark or any other performer.
  • The riskfreerates-query link relation, listing the risk free rates that can be used to override the risk free rates or any other performer.

When an Interactive Statistics Analysis has been successfully submitted, and a response is received with status 200 (= OK) then the resource in the appropriate Json or XML representation is produced. For details of the response, refer to the Interactive Statistics Analysis resource page.

The interactive-statistics-analysis-query link relation shares its XML structure


Query Structure

An interactive statistics analysis query is composed of two main parts. The first part is optional and represents a set of global parameters to apply to all tables in the query. The second part represents the tables of data to extract in the query:

Figure 1 - Fragment of main query structure:

<interactiveStatisticsQuery xmlns="http://statpro.com/2012/Revolution">
  <parameters>...</parameters>   -- Optional parameters
  <tables>...</tables>
</interactiveStatisticsQuery>

If no parameters are supplied underneath the root interactiveStatisticsQuery element then the default values will be extracted from the associated portfolio analysis. These parameters represent the global parameters applied to all tables in the query. Most of these parameters can also be overridden at row level or column level. For further details of the available parameters and which can be overridden at row or column level refer to the Parameters section.

Tables

The tables element represents a collection of tables to extract in the query. There has to be at least one table defined in the tables collection. Here is an example of a single table which can exist within the tables element:

Figure 2: A Table Element:

<table name="ReturnsForStandardPeriods" type="PortfolioDrillDown">
  <rowNodes>
    <rowNode>
      <title>1 Year</title>
      <period baseId="1Y"/>
    </rowNode>
    <rowNode>
      <title>3 Years</title>
      <period baseId="3Y"/>
    </rowNode>
  </rowNodes>
  <columnNodes>
    <columnNode>
      <name>Portfolio Return</name>
      <measureId>Perf.ReturnOut</measureId>
    </columnNode>
    <columnNode>
      <name>Benchmark Return</name>
      <measureId>Perf.ReturnOut</measureId>
      <mainPerformerContext>Benchmark1</mainPerformerContext>
    </columnNode>
  </columnNodes>
</table>

A table must specify a user-defined name attribute which must be unique across all tables within the collection of tables. This name will be emitted in the results of the interactive statistics query. The table type attribute is mandatory and must be set to 'PortfolioDrillDown'.

Table Parameters

A table parameters section may be added if a globally defined parameters must be overriden for a table. In the following example, we set the entire table to Gross:

Figure 3 - Example of table parameters:

<table name="ReturnsForStandardPeriodsNet" type="PortfolioDrillDown">
  <parameters>
    <returnType>Gross</returnType>
  </parameters>
  <rowNodes>...</rowNodes>
  <columnNodes>...</columnNodes>
</table>

Row Nodes

Associated with any table is a single collection of rowNodes comprising at least one rowNode element. A single rowNode defines the parameters used for one or more rows of output. (e.g. Periods, Fee Types, Share Classes, Benchmarks). It allows optional overriding of the global or table parameters that may have been specified underneath the parameters element. (See figure 2 for an example). A single rowNode element is made up of an optional title element, and one or more other parameters. For further details of these please refer to the Parameters section. To define a table with a single row without overriding any parameters, an empty rowNode must be added:

Figure 4 - Example of a non-overridden row node:

<table name="A standard row" type="PortfolioDrillDown">
  <rowNodes>
    <rowNode />
  </rowNodes>
  <columnNodes>...</columnNodes>
</table>

A rowNode may be decorated with optional attributes filter, orderBy, skip and top. For documentation about these attributes, see interactive-risk-analysis-query Link Relation.

Column Nodes

After the rowNodes element a table must define a collection of columnNodes comprising at least one columnNode element. The set of columnNodes represents the set of columns to extract within the table. A single columnNode element is made up of a mandatory measureId element, an optional name element, an optional title element, and any optional parameter overrides to apply to the column. Each columnNode must have a measureId element corresponding to a value from the list of supported Interactive Statistics Analysis measures. Note that columnNode paramaters override parameter values set at any other level (i.e. column or table). Here is an example of a set of columnNodes:

Figure 5 - Example of column nodes:

  <columnNodes>
    <columnNode>
      <name>1 Year Return</name>
      <measureId>Perf.ReturnOut</measureId>
      <period baseId="1Y" />
    </columnNode>
    <columnNode>
      <measureId>AtEnd.MarketValueExternal</measureId>
    </columnNode>
  </columnNodes>

The first columnNode in the collection shows an example of a parameter being overridden in the columnNode; in this instance the period parameter signalling to the interactive statistics calculation to override whatever value has been specified in the rowNode or global parameters. For further details regarding overriding parameters refer to the Parameters section.

The second columnNode has no name element, and in such cases the column's measureId will be used as the column's field name. Thus, the example above would produce a set of results as follows:

Figure 6 - Example of output for query in Figure 5:

AtEnd.MarketValueExternal 1 Year
1385762846.12 6.26

Names and Titles

The output of a query is tabular, and meaning must be given to each row and column of output.

The name of a columnNode is static and thus analagous to a database field name or a JSON or XML element name. It is intended primarily for machine-use. The name element may be added to columnNode elements but not rowNode elements.

The title of a rowNode or columnNode is provided to make a table meaningful to a human reader. A title may contain embedded measures and/or text. A title might thus be dynamic. The measures that can be embedded are PeriodName, StartDate, EndDate, BenchmarkId and MainId. Use PeriodName to display names of months when generating a monthly series (e.g. "Jan 2016"), or names of years when generating a quarterly series.

Figure 7 - Example of title with measure:

<title><measureNode><measureId>PeriodName</measureId></measureNode></title>

Period, Start Date, End Date

The endDate, startDate and period parameters all have the same function of overriding the start and/or end dates. The period parameter is valid under table 'parameters', row nodes or column nodes. But the endDate and startDate parameters is only valid under global parameters. The XML schema for endDate and startDate are subsets of the XML schema for period. If no endDate or startDate are specified, the earliest and latest performance series dates are applied. The schemas are as follows:

Figure 8 - Basic structure of a period, startDate or endDate:

<period baseId="...">
    <startDate>...</startDate>
    <endDate>...</endDate>
    <shrink>...</shrink>
    <series>...</series>
</period>

<startDate baseId="...">
    <startDate>...</startDate>
    <shrink>...</shrink>
</startDate>

<endDate baseId="...">
    <endDate>...</endDate>
    <shrink>...</shrink>
</endDate>

Period 'baseId' Attribute

The baseId attribute is optional and is used to specify a standard period (e.g. Year to Date), start date (e.g. 1 Year) or end date. The baseId must be sourced from the 'Id' column of the resource 'Periods for use with Interactive Statistics Resource', while also filtering the 'Type' column for the correct type, which must be one of Period, StartDate or EndDate.

Figure 9 - Examples of baseId usage:

<startDate baseId="1Y">
<period baseId="YTD">

Period 'startDate' and 'endDate' child elements

The startDate and endDate must be specified in place of a baseId if a date literal or date measure is required.

Notes:

  • The startDate child element is not a valid child of the endDate parameter
  • The endDate child element is not a valid child of the startDate parameter
  • The series child element is not a valid child of the startDate or endDate parameters.
  • A date literal is specified via the seedDate attribute of a startDate or endDate child element.
  • A date measure is specified via the seedMeasure attribute of a startDate or endDate child element. The seedMeasure may currently be one of CreationDate, InceptionDate, FreezeDate, PublicOpeningDate, CloseDate, StartDateTable, or EndDateTable. The StartDateTable and EndDateTable measures are for advanced use only, used at column level to retrieve the value of the date at table level i.e. skipping row level.

Figure 10 - Example of Date Literal:

<endDate><endDate seedDate="2016-2-29"></endDate></endDate>

Figure 11 - Example of Date Measure:

<endDate><endDate seedMeasure="CloseDate"></endDate></endDate>

Period 'shrink' child element

The shrink element applies upper and lower boundary dates to the overall period. The baseId attribute is mandatory and must be sourced from the 'Id' column of the resource 'Periods for use with Interactive Statistics Resource', while also filtering the 'Type' column for the correct type, which must be one of 'Period', 'StartDate' or 'EndDate'.

Upon breaching a boundary date the specified action is triggered. The action may be one of Shrink, NotApplicableIfShrunken, HideIfShrunken or not specified, in which case Shrink is applied.

  • If Shrink is applied, the resulting period will be shortened in length according to the new boundary date.
  • If NotApplicableIfShrunken is applied, the period will be set to null (i.e. 'Not Applicable') upon breaching a boundary date. Thus all statistics calculated for this period will appear as null.
  • If HideIfShrunken is applied, the row or column will be hidden upon a boundary date breach.

In figure 12 below, the period has been configured such that the row (or column) will be removed if the overall period is shorter than 1 Year. This is useful for aesthetic reasons.

Figure 12 - Example of Shrunken Period:

<period baseId="1Y"><shrink baseId="FullPeriodTable" action="HideIfShrunken" /></period>

Period 'series' child element

If series is specified, defines the series to generate between the start and end dates.

Parameter to overrideDescriptionScopeType
frequency The frequency of periods to generate. May be one of Years, Semester, Quarters, Months, Weeks, OpenDays. Mandatory String
align The date to which the series is aligned and anchored. If omitted a value of Standard is applied. Allowed values are:

  • Standard: Use standard international calendar years, months, etc for alignment. E.g: 1999, 2000, 2001, etc or Q1, Q2, Q3.
  • FiscalPeriods: Years, Quarters, Months, and Weeks will all be aligned to the Fiscal Alignment parameters, while also depending on the frequency selected. Can be used to generate 'Fiscal Year' or 'Fiscal Day Of Week', e.g. Years ending end Jun, Weeks ending Wednesday
  • PeriodEnd: Align to the End Date
  • PeriodStart: Align to the Start Date
Optional String
stubPeriods What to do with the stub periods at either end of the series, i.e. 'year/quarter/month to date' and 'initial part year/quarter/month'. May be one of 'Include', 'Exclude', 'Extend'. If omitted the value 'Include' is applied. Optional String
type This is controls to the 'shape' of the generated series. If omitted a value of ContiguousPeriods is applied. Allowed values are:

  • ContiguousPeriods: A set of contiguous periods, e.g. Jan, Feb, March
  • ConsecutiveDates: A set of consecutive dates, e.g. 31st Jan, 28th Feb, 31st March. (i.e. for each period, both start and end date are identical). Used to plot a line chart with NAVs.
  • OverlappingPeriodsWithPinnedEnd: Whether to freeze the end date, used to create a cumulative set of periods.
  • OverlappingPeriodsWithPinnedStart: Whether to freeze the start date, used to create a cumulative set of periods.
  • OverlappingPeriodsWithPinnedStartIncStartingPoint: Use this to plot a line chart with returns starting at zero. (Needed because with OverlappingPeriodsWithPinnedStart, the starting period is missing as the number of periods = Number of dates - 1)
Optional String
order The order to generate. May be LatestToEarliest or EariestToLatest. If omitted then LatestToEarliest is applied. The value EarliestToLatest tends to be used with charts, while LatestToEarliest tends to be used with tables. Optional String

Period Hierarchy

A period is interpreted within the context of the period at the next highest level in the parameter hierarchy. For example, a column period (e.g. 'Q1') is interpreted within the context of the current row (e.g. '2015'), a rowNode's period ('All Years') within the context of the current table (e.g. '10 Years'), and a table's period within the global startDate and endDate. A period thus simultaneously inherits from and overrides the level above it. The concept of parameter hierarchy is convered more generally in the Parameter Hierarchy section.


Parameters

The optional parameters section within the main interactiveStatisticsQuery node represent the global parameters for all tables in the query. Most of these parameters can additionally be defined at the table\parameters, rowNode and columnNode levels too. For further details of the rules employed when applying the parameters refer to the Parameter Hierarchy section.

It is important to note that if specifying parameters, the order they are specified is a strict order defined in the published schema document (XSD). If specifying parameter overrides within a rowNode or columnNode, the parameter elements must come before the elements specific to the rowNode or columnNode. This is because the schema is making use of inheritance to inherit the core base parameters and unfortunately XSD is restricted to only use 'xs:sequence' and doesn't support 'xs:all' when using type inheritance ('sequences' define a strict order of elements whereas 'all' allow any order of elements).

By omitting the global parameters section, the portfolio analysis's default set of settings are automatically applied at a global level.

Here is a full list of all of the available parameters that can be configured, in the order they follow one-another, and details their applicability in terms of where they can be used:

Parameter element nameDescriptionScopeType
mainPerformer Overrides the portfolio to analyse: Contains a portfolioPerformer element containing an id attribute with the portfolio to analyse, e.g. <mainPerformer><portfolioPerformer id="640dc93f-d9fe-4c87-a55a-a4932dc8418f" /></mainPerformer>, or a benchmarkPerformer element containing an id attribute with the benchmark to analyse. If not overriden, the analysis' portfolio is assumed. Global parameters Guid
benchmark1Performer Overrides the first benchmark: Contains a benchmarkPerformer element containing an id attribute with the benchmark to analyse, or a portfolioPerformer element containing an id attribute with the portfolio to analyse. If not specified, the portfolio's benchmark is assumed. Global parameters Guid
benchmark2Performer, benchmark3Performer, benchmark4Performer Specifies a second / third or fourth benchmark. Contains a benchmarkPerformer element containing an id attribute with the external id of the benchmark to analyse, or a portfolioPerformer element containing an id attribute with the portfolio to analyse. If not specified, no benchmark is assumed. Global parameters Guid
riskFreePerformer The external id of the risk free index to apply. If not specified, the default risk free index of the analysis is applied. Warning: The risk free index will be currency converted if the currencyIsoCode is overriden, so for correct results the riskFreePerformer must set to a risk free index corresponding to the new reporting currency. Global parameters Guid
peerGroupPerformers This option must be specified only if a peer group is needed to compare the main performer against, or against itself to produce a correlation or other matrix, or to report on a list of portfolios. Global parameters Xml
endDate, startDate If specified, overrides the start / end date with a date code, date literal or date measure. If not specified, the performance series start / end date is applied. Global parameters Xml
horizon The number of days into the future statistics is being projected. Minimum value is 1. If left unspecified then the default value for the analysis will be used. All Int
confidenceInterval The degree of confidence with which we are to compute statistics (e.g. 0.9 represents a 90% confidence interval). Acceptable values are between 0.9 and 0.9999 inclusive. If left unspecified then the default value for the analysis will be used. All Decimal
currencyIsoCode The currency ISO code corresponding to the currency with which to calculate statistics. If left unspecified then the default value for the analysis will be used. All String
title Provided to make the rows and columns of a table presentable to a human reader. A title may contain embedded measures and/or text. The measureIds that can be embedded are PeriodName, StartDate, EndDate, BenchmarkId and MainId. If not specified no title is returned for the rowNode or columnNode. If containing only free text, the title XML takes the form <title>Free Text</title>. If a measure, the title XML takes the form <title><measureNode><measureId>PeriodName</measureId></measureNode></title>. If a date measure is specified, a dateFormat may be specified; refer to published XSD schema. Row and Column Node Xml
name The name is static and thus analagous to a database field name or a JSON or XML element name. It is intended primarily for machine-use. If not set, the measureId of the current columnNode is applied. Column Node String
measureId The measureId is mandatory and must be a value from the list of supported Interactive Statistics Analysis measures. Column Node String
period Modifies the local start or end date. The baseId attribute is taken from the list of supported list of supported Interactive Statistics Analysis periods. It is interpreted within the context of the period at the next highest level in the parameter hierarchy. For example, a column period (e.g. 'Q1') is interpreted within the context of the current row (e.g. '2015'), a rowNode's period ('All Years') within the context of the current table (e.g. '10 Years'), and a table's period within the global startDate and endDate. Table, Row and Column Node Xml
transpose Whether to transpose the table's output. If not set a value of 'false' is assumed. Table Boolean
mainPerformerContext Overrides the context (e.g. portfolio or benchmark) under which to ExPost statistics are to be computed. If not overridden, a value of 'mainPerformer' is applied. Must be overriden to calculate the benchmark return or volatility. May be set to one of the following values: Main, Benchmark1, Benchmark2, Benchmark3, Benchmark4, Benchmarks, PeerGroupPerformers, GlobalBenchmark, RiskFree. All String
benchmarkPerformerContext Overrides the context under which to ExPost relative statistics are to be computed. If not overridden, a value of 'benchmarkPerformer' is applied. Must be overriden to calculate the benchmark return or volatility. May be set to one of the following values: Main, Benchmark1, Benchmark2, Benchmark3, Benchmark4, Benchmarks, PeerGroupPerformers, GlobalBenchmark, RiskFree. All String
annualizationMethodology Overrides the annualization methodology. May be one of DayCount, YearOrDayCount, or FrequencyIntervalOrDayCount. The default value is FrequencyIntervalOrDayCount. All String
frequency Overrides the frequency to use when computing Ex-Post risk statistics such as Standard Deviation, Tracking Error, etc. If not specified, the analysis frequency is applied. The value may be one of Quarterly, Monthly, Weekly or Daily. All String
fiscalDayOfMonth The day of the month to apply to Fiscal Periods, such as 'Fiscal Year to Date' or 'Fiscal Month to Date'. If not specified, a value of 31 (i.e. last day of month) is applied. All Int
fiscalDayOfWeek The day of the week to apply to Fiscal Weeks. May be one of the following values: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday or Sunday. If not specified, a value of Friday (i.e. last day of month) is applied. All String
fiscalMonthOfYear The month of the year to apply to Fiscal Periods, such as 'Fiscal Year to Date' or 'Fiscal Quarter to Date'. If not specied, a value of 12 (i.e. December) is applied. All Int
includePartialPeriods Controls the inclusion or not of the intial part week, month or quarter when computing a frequency dependent statistic such as Standard Deviation. If not specified, a value of 'Always' is assumed. The value may be one of the following: 'Never', 'Always', 'ReturnsOnly'. Under the value 'Never', Returns and Series statistics are taken from the start of the first full period. This option is not recommended as returns from the initial part week or month is are excluded from the total return. Under the value 'Always' , Returns and Series statistics always include the intial part week, month or quarter. This option is not recommended as series statistics will include a partial week or month in the weekly or monthly series. Under the value 'ReturnsOnly', Return statistics include the intial part week or month, but series statistics do not. All String
useLoggedReturns Overrides whether returns are logged for series-based risk statistics that support logged returns. If not specified, the default value for the analysis is applied. All Boolean
minResultsForStdDev Overrides the minimum number of quarterly, monthly or weekly results to require when computing risk statistics such as standard deviation. The value must be 2 or greater. If not specified, the default value for the analysis is applied. All Int
returnType Overrides the portfolio return type. If not specified, the default value for the analysis' portfolio is applied. The portfolio-return-definitions link relation, lists the return types that can be used for Ex-Post portfolio statistics. All String
search The search methodology to apply when searching for performance dates for the current startDate and endDate. The value may be one of PortfolioDatesBeforeOrEqual, CommonDatesBeforeOrEqual, CalendarBeforeOrEqual, CalendarExact, CalendarAfterOrEqual, CalendarNearest, or NoCalendarBeforeOrEqual. The days attribute of the search element must be specified, it is non-negative integer. If not specified, the following XML value is assumed: <search days="4">NoCalendarBeforeOrEqual</search>. All Xml
shareClassCode Overrides the portfolio share class. If not specified, the default value for the analysis is applied. The portfolio-share-classes link relation, lists the share classes that can be used for Ex-Post portfolio statistics. All String
useFullPopulation Overrides whether the full or sample population is used when computing risk statistics such as Std. Dev. If not specified, the default value for the analysis is applied. All Boolean


*The levels element is always an empty element that has three mandatory values specified in the attributes (See the Row Nodes section for further details).

** The classifiers parameter is an optional Xml parameter that allows overriding the default classifiers associated with the portfolio analysis. If the classifiers parameter is specified, then the entirety of the classifier structure associated with the portfolio analysis will be overridden. For example, it is not possible just to override one of the classifiers associated with the portfolio analysis - only to completely re-specify the classifier structure. An example of how to specify this is in Figure 4 below. See full details in the published schema document (XSD) and refer to the st:Classifiers complex type for the other child elements that can be specified in this Xml parameter. In order to identify the classifier identifiers to submit in these classifier parameters refer to the id element of a classifier from the Classifiers resource.

Figure 4 - Example of overriding classifiers:

<interactiveStatisticsQuery xmlns="http://statpro.com/2012/Revolution">
  <parameters>
    <classifiers>
      <classifier1Id>7F6AF30F-A67D-438E-AD16-4D44E89E854C</classifier1Id>
      <classifier2Id>B0690B24-1845-40D4-83C6-C81EDCC25362</classifier2Id>
    </classifiers>
  </parameters>
  <tables>...</tables>
</interactiveStatisticsQuery>


Parameter Hierarchy

When the Web API applies parameters there is a hierarchy regarding how they are applied depending on what levels the parameters are defined. The hierarchy of how parameters are applied is as follows (1 = Highest precedent, 4 = Lowest precedent):

  1. Column Node - parameters defined at this level take the highest precedent.
  2. Row Node - parameters defined at this level can only be overridden by parameters specified at the columnNode level.
  3. Global Parameters - parameters defined at this level are the explicitly specified global defaults intended to be applied to all tables in the interactive statistics query. Overrides can be applied to these settings at the rowNode and columnNode levels.
  4. Portfolio Settings - these are the parameters defined in the portfolio settings and not actually specified in the interactive statistics query. These will be applied as global defaults should no global defaults be specified (or in the case of some settings which don't have corresponding portfolio settings, a suitable default is used).

Note: Not all parameters are applicable at each level in the hierarchy. Refer to the table of parameters above and refer to the 'Scope' column in the Parameters section for details of where parameters can be specified.


Fair Usage Policy Implications

Despite the relatively small size of its output resource representations (in XML or JSON), a very large amount of data extraction and data processing may be performed by the server to produce all of the Interactive Statistics Analysis numbers. For this reason, the Interactive Statistics Analysis resource is considered to be an exceptional case with respect to the Web API's Fair Usage Policy.

Whereas a request for most resources is counted as being just one request by the Fair Usage Policy, a single request for the Interactive Statistics Analysis resource may be counted as being more than one request. The actual number depends on the requested numbers of measures across all tables and the number of levels required to extract within each table. It is given by this formula:-

num_requests = ceiling(sum_across_all_tables((columns_per_table * levels_per_table)) / 500)

For example, if a query has three tables:

  • One table containing an 'ExpectedDistribution' table type with three columns (i.e. one level in total as Expected Distribution is a total level only table type).
  • One table containing a 'PortfolioDrillDown' table type with 100 measures at total level, 3 segment levels and security level (i.e. 5 levels in total).
  • One table containing a 'PortfolioDrillDown' table type with 60 measures at total level and up to the first segment level (i.e. 2 levels in total).

This would result in the following cost:-

ceiling((3 * 1) + (100 * 5) + (60 * 2)) / 100) = ceiling(1.246) = 2

which means that the single request for Interactive Statistics Analysis data would be counted as 2 requests by the Fair Usage Policy.



Sample Query

An Interactive Statistics Analysis query is expressed in XML form, and must be included in the entity body of the POSTed request to this link relation's identified URI. Here is an example of a sample XML query. Alternatively, it can be downloaded here :-

<interactiveStatisticsQuery xmlns="http://statpro.com/2012/Revolution">
  <parameters>
    <frequency>Monthly</frequency>
  </parameters>
  <tables>
    <table name="CalendarYearsPlusStubs" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="CalendarYearsPlusStubs" />
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Portfolio</name>
          <measureId>Perf.ReturnOut</measureId>
        </columnNode>
        <columnNode>
          <name>Benchmark</name>
          <measureId>Perf.ReturnOut</measureId>
          <mainPerformerContext>Benchmark1</mainPerformerContext>
        </columnNode>
        <columnNode>
          <name>Relative</name>
          <measureId>Perf.XSTotalReturn</measureId>
        </columnNode>
      </columnNodes>
    </table>
    <table name="CalendarQuarters" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="FullPeriod">
            <series frequency="Quarters" align="Standard" stubPeriods="Extend" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Portfolio</name>
          <measureId>Perf.ReturnOut</measureId>
        </columnNode>
        <columnNode>
          <name>Benchmark</name>
          <measureId>Perf.ReturnOut</measureId>
          <mainPerformerContext>Benchmark1</mainPerformerContext>
        </columnNode>
        <columnNode>
          <name>Relative</name>
          <measureId>Perf.XSTotalReturn</measureId>
        </columnNode>
      </columnNodes>
    </table>
    <table name="CalendarMonths" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="FullPeriod">
            <series frequency="Months" align="Standard" stubPeriods="Extend" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Portfolio</name>
          <measureId>Perf.ReturnOut</measureId>
        </columnNode>
        <columnNode>
          <name>Benchmark</name>
          <measureId>Perf.ReturnOut</measureId>
          <mainPerformerContext>Benchmark1</mainPerformerContext>
        </columnNode>
        <columnNode>
          <name>Relative</name>
          <measureId>Perf.XSTotalReturn</measureId>
        </columnNode>
      </columnNodes>
    </table>
    <table name="FiscalYears" type="PortfolioDrillDown">
      <parameters>
        <fiscalDayOfMonth>29</fiscalDayOfMonth>
        <fiscalMonthOfYear>2</fiscalMonthOfYear>
      </parameters>
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="FullPeriod">
            <series frequency="Years" align="FiscalPeriods" stubPeriods="Include" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Portfolio</name>
          <measureId>Perf.ReturnOut</measureId>
        </columnNode>
        <columnNode>
          <name>Benchmark</name>
          <measureId>Perf.ReturnOut</measureId>
          <mainPerformerContext>Benchmark1</mainPerformerContext>
        </columnNode>
        <columnNode>
          <name>Relative</name>
          <measureId>Perf.XSTotalReturn</measureId>
        </columnNode>
      </columnNodes>
    </table>
    <table name="StandardPeriods" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title>1 Day</title>
          <period baseId="1D"/>
        </rowNode>
        <rowNode>
          <title>1 Week</title>
          <period baseId="1W"/>
        </rowNode>
        <rowNode>
          <title>1 Month</title>
          <period baseId="1M"/>
        </rowNode>
        <rowNode>
          <title>3 Months</title>
          <period baseId="3M"/>
        </rowNode>
        <rowNode>
          <title>6 Months</title>
          <period baseId="6M"/>
        </rowNode>
        <rowNode>
          <title>1 Year</title>
          <period baseId="1Y"/>
        </rowNode>
        <rowNode>
          <title>2 Years</title>
          <period baseId="2Y"/>
        </rowNode>
        <rowNode>
          <title>3 Years</title>
          <period baseId="3Y"/>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Portfolio</name>
          <measureId>Perf.ReturnOut</measureId>
        </columnNode>
        <columnNode>
          <name>Benchmark</name>
          <measureId>Perf.ReturnOut</measureId>
          <mainPerformerContext>Benchmark1</mainPerformerContext>
        </columnNode>
        <columnNode>
          <name>Relative</name>
          <measureId>Perf.XSTotalReturn</measureId>
        </columnNode>
      </columnNodes>
    </table>
    <table name="TriangleMatrix" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="10CY">
            <shrink baseId="FullPeriodTable" />
            <series frequency="Years" align="Standard" stubPeriods="Extend" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>1 Year</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="1Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>2 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="2Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>3 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="3Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>4 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="4Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>5 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="5Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>6 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="6Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>7 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="7Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>8 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="8Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>9 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="9Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
        <columnNode>
          <name>10 Years</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="10Y">
            <shrink baseId="FullPeriodTable" action="HideIfShrunken" />
          </period>
        </columnNode>
      </columnNodes>
    </table>
    <table name="CalendarQuarterMatrix" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="FullPeriodQuarterAligned">
            <series frequency="Years" align="Standard" stubPeriods="Exclude" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Q1</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="Q1"/>
        </columnNode>
        <columnNode>
          <name>Q2</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="Q2"/>
        </columnNode>
        <columnNode>
          <name>Q3</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="Q3"/>
        </columnNode>
        <columnNode>
          <name>Q4</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="Q4"/>
        </columnNode>
      </columnNodes>
    </table>
    <table name="CalendarMonthMatrix" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="FullPeriodMonthAligned">
            <series frequency="Years" align="Standard" stubPeriods="Exclude" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Jan</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M1"/>
        </columnNode>
        <columnNode>
          <name>Feb</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M2"/>
        </columnNode>
        <columnNode>
          <name>Mar</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M3"/>
        </columnNode>
        <columnNode>
          <name>Apr</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M4"/>
        </columnNode>
        <columnNode>
          <name>May</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M5"/>
        </columnNode>
        <columnNode>
          <name>Jun</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M6"/>
        </columnNode>
        <columnNode>
          <name>Jul</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M7"/>
        </columnNode>
        <columnNode>
          <name>Aug</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M8"/>
        </columnNode>
        <columnNode>
          <name>Sep</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M9"/>
        </columnNode>
        <columnNode>
          <name>Oct</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M10"/>
        </columnNode>
        <columnNode>
          <name>Nov</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M11"/>
        </columnNode>
        <columnNode>
          <name>Dec</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="M12"/>
        </columnNode>
      </columnNodes>
    </table>
    <table name="CumulativeReturnsForLineChart" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>EndDate</measureId></measureNode></title>
          <period baseId="FullPeriod">
            <series frequency="OpenDays" type="OverlappingPeriodsWithPinnedStartIncStartingPoint" order="EarliestToLatest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <name>Portfolio</name>
          <measureId>Perf.ReturnOut</measureId>
        </columnNode>
        <columnNode>
          <name>Benchmark</name>
          <measureId>Perf.ReturnOut</measureId>
          <mainPerformerContext>Benchmark1</mainPerformerContext>
        </columnNode>
        <columnNode>
          <name>Relative</name>
          <measureId>Perf.XSTotalReturn</measureId>
        </columnNode>
      </columnNodes>
    </table>
    <table name="ChildRowsAndChildColumns" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="4Y">
            <series frequency="Years" align="Standard" stubPeriods="Extend" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <title><measureNode><measureId>EndDate</measureId><dateFormat>Qq</dateFormat></measureNode></title>
          <measureId>PeriodName</measureId>
          <period>
            <series frequency="Quarters" align="Standard" stubPeriods="Extend" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </columnNode>
      </columnNodes>
    </table>
    <table name="ChildRowsAndChildColumnsWithStaggeredTitles" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <period baseId="4Y">
            <series frequency="Years" align="Standard" stubPeriods="Extend" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </rowNode>
      </rowNodes>
      <columnNodes>
        <columnNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <measureId>PeriodName</measureId>
          <period>
            <series frequency="Quarters" align="Standard" stubPeriods="Extend" type="ContiguousPeriods" order="LatestToEarliest" />
          </period>
        </columnNode>
      </columnNodes>
    </table>
    <table name="Titles" type="PortfolioDrillDown">
      <rowNodes>
        <rowNode />
      </rowNodes>
      <columnNodes>
        <columnNode>
          <title>YTD: <measureNode><measureId>PeriodName</measureId></measureNode></title>
          <name>Return YTD</name>
          <measureId>Perf.ReturnOut</measureId>
          <period baseId="YTD" />
        </columnNode>
        <columnNode>
          <title><measureNode><measureId>PeriodName</measureId></measureNode></title>
          <name>Return Since Incep.</name>
          <measureId>Perf.ReturnOut</measureId>
        </columnNode>
      </columnNodes>
    </table>
    <table name="Transpose" type="PortfolioDrillDown">
      <parameters>
        <period baseId="1Y" />
        <transpose>true</transpose>
      </parameters>
      <rowNodes>
        <rowNode />
      </rowNodes>
      <columnNodes>
        <columnNode>
          <measureId>PeriodName</measureId>
        </columnNode>
      </columnNodes>
    </table>
  </tables>
</interactiveStatisticsQuery>

See the schema document (XSD) for the query for further details.


Update history

  • Added rowNode attributes filter, orderby, skip and top - June 2017
  • Initial Version - December 2016


Last updated: December 2016


To Top