- Interactive report name
- Reporting using one sector
- Sector variables
- Drilldown
- Position of totals
- Showing individual securities
- Order of sectors
- Number of sectors
- Interactive reports in CSV format
- Reporting using multiple sectors
- Report colums
- Default columns
- Portfolio, benchmark and active columns
- Customising report columns
- Using column codes
- Generating multiple interactive reports
- Names of interactive reports
- Sorting data
- Understanding totals in interactive reports
- Interactive reports
- Total level, any interval
- Any level, any interval
- Total level, single interval
- Comparing Brinson vs returns reports
- Total level, any interval
- Total level, single interval
- Total level, multiple intervals
- Discussion
- Ranked weights, returns and contributions
- Ranked attribution contributions
Unlike other reports in FIA, interactive reports can be configured in numerous different ways by passing parameters to the ReportSectors setting.
To turn interactive reports on, set
InteractiveAttributionReport = 1
Interactive report name
For XLS and CSV reports, the name of this report is of the form
where
portfolio name is the value in column 2 of the portfolio weights and returns file
benchmark name is the value in column 2 of the benchmark weights and returns file (only shown if file is supplied)
sector names are the sector names prodivded in the ReportSectors setting in the configuration file (can be left unset)
interval is specified in the configuration file (can be left unset)
batch_id is specified in the configuration file (can be left unset)
Reporting using one sector
To generate a report that decomposes results by industry and security, set
ReportSectors=Industry,Security
This will generate an Excel report that looks as follows:
Note that
- the sectors used in the report decomposition are shown in cell A7
- all quanities displayed (weights, returns, contributions, risks etc) are summarised for each sector, here in cells A9 and A14
- a portfolio-level summary is shown in the SUMMARY row, here row 8
Sector variables
All interactive reports can be decomposed using the following variables:
Currency, Credit, Curve, Maturity, Duration, Coupon, Security
These variables are always available as they are either set up for each security in the master file, or calculated internally.
In addition, any partition set up in the security master file can be used in an interactive report. However, if a value is not defined, it will be set to N/A on the report.
In this example, securities have been classified by Industry and Issuer, so the variables
Industry, Issuer
can also be used in the report.
In general, an interactive report is defined by assigning a comma-delimited list of sectors to ReportSectors. Spaces are ignored, as is the case of the sector name(s).
Drilldown
An attribution report can contain a very large amount of information, and it can be difficult to see what is going on without the ability to interact with, and 'slice and dice', the output.
FIA's interactive reports are designed to be modified and viewed in this way by the user.
The numbered grey boxes on the left hand side can be used to roll up the report. For instance, to roll the report up to the Industry level, click on the box labelled '2' just above row 1. The report will now look as follows:
Click on '3' to expand the report to the fullest amount, or '1' to roll the report up to the summary level.
In addition, the '+' and '-' boxes on the left axis can be used to open up or close individual sectors.
Position of totals
In these examples, totals are shown at the top of each interval. To show totals at the bottom of each interval, set
TotalsAtTop=0
in the configuration file.
Showing individual securities
If you want the interactive report to show individual securities, add Security to the end of the list of sectors. If you leave this off, the report will only be generated down to the level of the last sectors.
Order of sectors
Sectors should be shown in order of increasing detail. For instance, in this case Industry contains Issuer, which contains Security. You can use sectors in a different order, but the report will be difficult to interpret.
Number of sectors
Up to eight levels of sector can be displayed. This is a limitation imposed by Excel.
Interactive reports in CSV format
If you set CSVReport=1 when generating an interactive report, a CSV file containing the same data will be generated, including subtotal rows.
Reporting using multiple sectors
For more complex reports, you can decompose results by multiple sectors.
For instance, to see the above report decomposed by industry and issuer, set
ReportSectors=Industry, Issuer, Security
This will generate a report that looks as follows:
As before, the names of the sectors used are in cell A7. Here, there are subtotals at the issuer, industry and portfolio levels.
Report colums
Default columns
By default, FIA shows weights, attribution contributions and base currency returns on interactive reports.
Portfolio, benchmark and active columns
If FIA is run on a single portfolio, the interactive report shows data for that portfolio and each variable has data shown in one column.
If FIA is run on a portfolio and benchmark, in most cases the interactive report displays data for portfolio, benchmark and the active value. Each variable has data shown in three columns. Exceptions are when it only makes sense to display an active return, such as for asset allocation return, generated by mismatches between a portfolio and a benchmark sector allocations.
Customising report columns
To change the columns shown on an interactive report, select one or more column IDs from the list below, and add them in comma-delimited format to the InteractiveAttributionReport assignment, with the names of the sectors and the column IDs separated by a pipe ('|') symbol, preceeded by a COLUMNS = statment.
Column ID | Variable | Comments |
Weight | Total weight is always 100% | |
Base currency return | Sum of base contributions is total base return | |
FX currency contribution | Sum of FX contributions is total FX return | |
Local currency contribution | Sum of local contributions is total local return | |
Effective exposure | Measured in dollars | |
Effective exposure weight | Sum of effective exposure weights is always 100% | |
Modified duration | Modified duration at security, sector and portfolio level | |
Modified duration contribution | Sum of modified duration contributions is portfolio modified duration | |
Modified duration weight | Sum of MD weights is 100% | |
Local currency return management effect | Only available when benchmark supplied | |
Local currency contribution management effect | Only available when benchmark supplied | |
Base currency return management effect | Only available when benchmark supplied | |
Base currency contribution management effect | Only available when benchmark supplied | |
Market value | Measured in dollars | |
Attribution contributions | Sum of attribution contributions (including FX) equals base return | |
Base currency return | Return including FX (in base currency terms) | |
Local currency return | Return excluding FX (in local currency terms) | |
Tracking error | Tracking error in % | |
Tracking error decomposed by risk | Tracking error decomposed by source of risk | |
Average weight over interval | May not sum of 100% due to changes in exposure over calculation interval | |
Normalised weight | Only available when benchmark supplied |
For instance, to decompose a report by Industry and security, and to show weight, base return and local return, set
ReportSectors = Industry, Security | COLUMNS = AA, R_BASE, R_LOCAL
The interactive report will now look as follows:
Using column codes
Column codes can be supplied in any order. The interactive report will show the codes in the same order as they were supplied in the ReportSectors setting.
Any number of column codes may be used in a report. However, the report may be more usable if decomposed into two or more sub-reports. To do this, see the next section.
Generating multiple interactive reports
It is often useful to generate several interactive reports for the same portfolio, using different sector decompositions and variable lists.
To do this, FIA allows ReportSectors to be defined multiple times. A separate report is then generated for each setting.
For intance, to generate (i) a report that decomposes results by industry and issuer, and shows attributon contributions, and (ii) a report that decomposes results by issuer, and shows weights, set the following:
ReportSectors=Industry, Issuer, Security | COLUMNS=R_a
ReportSectors=Issuer, Security | COLUMNS = W
in the configuration file.
Names of interactive reports
The name of a report’s worksheet can be specified by adding
NAME=’sheetname’
to ReportSectors. For instance, set
ReportSectors = Industry, Issuer, Security | COLUMNS = AA, R | NAME = Weights and returns
The Excel worksheet generated by this command will then have the sheet name Weights and returns. A CSV or JSON file generated using the same settings will also have the same name.
Excel imposes a 31-character limit on the names of worksheets. FIA will therefore flag an error if a supplied worksheet name is longer than 31 characters.
Sorting data
Security-level data can be sorted by adding the option
SORT='sortvariable'
to ReportSectors. For instance, set
ReportSectors = Industry, Issuer, Security | SORT=R_BASE_A
to sort output by active base currency return.
If SORT is not set, security-level data is sorted by the name of the security, in ascending alphabetical order. Otherwise, SORT must be one (and only one) of the following values.
Valid options are as follows:
Sort code | Mnemonic |
AA_P | Portfolio weight |
AA_B | Benchmark weight |
AA_A | Active weight (difference between portfolio and benchmark weight) |
R_BASE_P | Portfolio base currency return |
R_BASE_B | Benchmark base currency return |
R_BASE_A | Active base currency return (difference between portfolio and benchmark base currency return) |
R_LOCAL_P | Portfolio local currency return |
R_LOCAL_B | Benchmark local currency return |
R_LOCAL_A | Active base currency return (difference between portfolio and benchmark base currency return) |
C_BASE_P | Portfolio base currency contribution |
C_BASE_B | Benchmark base currency contribution |
C_BASE_A | Active base currency contribution (difference between portfolio and benchmark base currency contribution) |
C_LOCAL_P | Portfolio local currency contribution |
C_LOCAL_B | Benchmark local currency contribution |
C_LOCAL_A | Active local currency contribution (difference between portfolio and benchmark local currency contribution) |
The order in which sectors are displayed is not modified by the value of SORT. For instance, credit buckets will continue to be shown in the order AAA, AA+, AA, AA- etc. However, security-level data within each sector will be ordered according to the value of SORT.
FIA can use a sorting order even when the variable on which the sort ie based is not displayed.
Understanding totals in interactive reports
Interactive reports
The following conditions always hold over any of FIA’s interactive reports, when returns and contributions data is shown:
Total level, any interval
- Active base return = Active base contribution
- Active base return = Base management return
- Active base return = Base management contribution
- Active local return = Local management return
Any level, any interval
- Active local contribution plus FX contribution = Base management contribution
- Sum of non-FX attribution contributions = Local management contribution
- Sum of all attribution contributions = Base management contribution
Total level, single interval
- Active local return = Active local contribution
- Active local return = active local management contribution
Comparing Brinson vs returns reports
Suppose we run two reports over the same portfolio and benchmark set, once generating Brinson attribution data, the other simply reporting on returns and contribution.
Total level, any interval
- Active base returns
- Active local returns
- Active base management contributions
- Active base management returns
will always match across the two reports.
Total level, single interval
- Active local contributions
- Active local management contributions
will always match across the two reports
Total level, multiple intervals
Active local contribution and active local management contribution may not match.
Discussion
The reader will note that the only quantities that may not match at an aggregate level are those that involve contributions. Returns data always matches.
The reason is that contributions are smoothed to ensure that they can be aggregated in a path-independent manner to sum up to the overall base returns of the portfolio. Since FX contribution is treated in the same way as other sources of contribution (such as asset allocation and stock selection return), it is also smoothed, and so FX and local contributions may be slightly distorted when aggregated over multiple intervals.
However, the sum of active local and active FX contributions will always equal the active base contribution, as shown above.
For this reason, summed active local contributions (which aggregate these distorted sources of contribution) may differ slightly from summed returns (for which there is no distortion).
This does not apply to calculations over a single interval, when smoothing does not affect contributions.
Ranked weights, returns and contributions
Ranked reports show the largest and smallest weights, returns and contributions of individual securities and sectors in the portfolio and benchmark, in ascending or descending order. If an interactive report is calculated using a given sector, ranked reports will show data for that sector in ranked order, as well as for individual securities.
The ranked report piggybacks off the values calculated in the interactive report, using the partitioned values calculated and displayed in the main report.
To generate a ranked report, add the ‘ranked=’ option to the ReportSectors setting, in the same way as for the ‘columns=’ and ‘name=’ options. As before, the ‘ranked=’ option must be separated from other options by a pipe (‘|’) symbol. Options can be provided in any order.
At present, there are four valid values for ‘ranked’, each corresponding to a particular type of report. These are
- AA: weights
- R_BASE: base currency returns
- C_BASE: base currency contributions
- R_A: attribution contributions
For example,
ReportSectors=Duration,Security|ranked=AA, R_BASE
will generate ranked reports for weights and base currency returns.
The new setting RankCount allows you to select how many ranked items are displayed. For instance, if RankCount=5 (the default), then the top 5 and bottom 5 of each of the above quantities are shown on the report.
Ranked attribution contributions
FIA also allows you to display ranked contributions from individual risks, shown in the same way as other ranked data. For instance, if the largest contribution to return was credit spread from BBB rated securities, then this will be the first item shown on the ranked attribution report. This information allows rapid interpretation of the attribution report, highlighting the main drivers of return.
Together with these ranked contributions, FIA also displays contextual information showing the context of these returns. In the above example, the top line will show the weight of BBB rated securities, the modified duration of that sector, and the change in yield of that sector. The product of the three quantities will be close to the given contribution.
This collated information is shown as contextual because, unless there is a very simple case, the relationship will not be exact. Weights, risks, and market drivers all change over time, and smoothing will adjust the contributions generated by the portfolio.
For this reason, the drivers shown are unlikely to combine exactly to the displayed contribution. However, they will be useful in interpreting the context (portfolio positioning, market conditions) in which gains or losses were made.