The Macrobond Data Web API feed

Overview

The Macrobond Data Web API feed gives access to the Macrobond database of time series and meta data. It is a REST Web API that uses JSON as the data format. OAuth2 is used for authentication and authorization.

The Macrobond Data Web API feed is a separately licensed solution.

This documentation refers to version 1 of the API and is subject to change.

References

Interactive documentation https://api.macrobondfinancial.com/swagger
Documentation of metadata https://help.macrobond.com/technical-information/common-metadata/
API URL https://api.macrobondfinancial.com
OpenAPI definition https://api.macrobondfinancial.com/swagger/v1/swagger.json
OAuth2 authentication https://apiauth.macrobondfinancial.com/mbauth
OAuth2 token endpoint https://apiauth.macrobondfinancial.com/mbauth/connect/token

Data+ license

With Data+ the only way to get the credentials for API's is by having the MB app installed in the same machine as the Python environment. See Technical information for the link.

Note that keyring or https://api.macrobondfinancial.com/swagger/index.html will only work with Web Api license credentials, it won't work if you have Data+.

Introduction

Entities and metadata

The Macrobond database contains objects called entities. Each entity has a set of metadata that describes the entity. There are different types of entities. The most common type is the time series. In
addition to the metadata, a time series also has a vector of values with corresponding dates. The Help page commonly used metadata also contains a useful introduction.

Each entity has a unique name. A name starts with one or more letters and can be followed by letters, digits and underscore. An entity can have more than one name. It can have a primary name and a list
of aliases. Any of these names can be used to reference the entity in, for example, a download operation.

The names do typically not have any special meaning. You should not infer any information from the name. For example, even though many names of time series begin with what looks like a country
code, like 'us', you should not use this to determine the country. Instead, you should use the metadata attribute called Region.

The metadata provides information about entities but can also be used as filters when search in the database.

Time series

A time series is an entity with a list of values and dates. The most important metadata of a time series are:

Frequency The highest frequency is daily and the lowest annual.
DayMask Used with daily series to tell what days of the week the series covers. It is a
bitmask where but 1 is Sunday, 2 is Monday, 3 is Tuesday etc.
FullDescription The title of the time series.
DisplayUnit A text that gives the unit of the series.
Currency The currency of the values
LastModifiedTimeStamp The time when this entity was last modified. This includes changes to metadata as well as values. This can be used in some API calls (series/fetchseries and series/fetchvintageseries) to conditionally retrieve data only if it has changed.

Note, this isn't available for calculated series because they are calculated on the fly when requested.

There is a date for each value in the time series. This date represents the period of the value and not when the value was sampled. For example, 2010-04-01 in a quarterly series represents 2010 Q2.

All dates indicated by the frequency are not always included. For example, for daily series January 1 might be missing since this was a public holiday.

A value might also be null, which indicates a missing value. Unlike the case when a date is missing, a missing value indicates that a value was expected for this date, but it is, for some reason, not available.

The API

The API is a REST based Web API over https that uses JSON as the data format. You can find detailed information about the parameters and data structures on the interactive documentation page.

Communication is made over https.

An Open API specification describes the API in a machine-readable format that can be used to generate stubs for most programming languages.

Authentication and authorization

The Macrobond Data Web API uses OAuth2 for authentication and authorization.

You use the Client credential grant flow to request an access token based on you client_id and client_secret. You need to specify a set scopes matching the API end-points you plan to use. In most
cases this includes 'macrobond_web_api.read_mb' to read time series and 'macrobond_web_api.search_mb' to be to search for series.

You can find information about the required scopes for each method in the documentation like this:
The access token is passed as a Bearer token in the Authorization http header in the subsequent API calls. The lifetime of a token is short (30-60 minutes). When you receive http status code 401 in the response from an API call, you need to request a new token and attempt the API call again. There are libraries for most programming platforms that helps with implementing OAuth2.

Note, the client_id and client_secrets are confidential information that must be stored in a safe way using best practices. It must not be shared.

Using the interactive reference documentation

The interactive reference documentation documents the arguments and data formats of the API methods.

It also allows you to test the methods directly on the web page. For this to work, you need to authorize first using the Authorize button in the top right corner. Fill in client_id and client_secrets and check the first scope called 'macrobond_web_api.read_mb'.

Once authorized you can test the methods. When the token expires, you will receive status 401 and you have to log out and log in again to get a new token.

Please note that some methods that return large amount of data can be slow for the web browser to handle.

Python wrapper

We have created The Macrobond Data API for Python (Python wrapper). The purpose of the Python API is to make the Data Web API easier to use in Python. For example, you do not need to bother with authentication, HTTP, JSON etc. and you get time series directly as Pandas series.

For documentation see The Macrobond Data API for Python (Python wrapper).
Find our guide and examples in Jupyter notebooks on Github.

Examples and use cases

The examples do not include examples of all API methods. See the reference documentation for a complete list.

Note that we have created The Macrobond Data API for Python (Python wrapper) to make Data Web API easier to use in Python. For documentation see The Macrobond Data API for Python (Python wrapper). Find our guide and examples in Jupyter notebooks on Github.

Example of retrieving a time series in Python

This example uses the Python package requests_oauthlib that can be installed using 'pip install requests_oauthlib'. It retrieves one series called 'usgdp' and prints the retrieved JSON data.

from oauthlib.oauth2 import BackendApplicationClient
from requests_oauthlib import OAuth2Session
import json

# In a real-world case you should not include the credentials directly in the source code
client_id = user.test'
client_secret = 'somepassword'

token_url='https://apiauth.macrobondfinancial.com/mbauth/connect/token'
client = BackendApplicationClient(client_id=client_id, scope="macrobond_web_api.read_mb")
# To include access to methods for searching include an additional scope like
# scope="macrobond_web_api.read_mb macrobond_web_api.search_mb ")
mbapi = OAuth2Session(client=client)

# Helper method that will request new access token if required

def downloadMbApi(request):
  url = "https://api.macrobondfinancial.com/v1/" + request
  # This is typically the first time when we do not yet have a token
  if not mbapi.authorized:
    mbapi.fetch_token(token_url=token_url, client_id=client_id, client_secret=client_secret)
  r = mbapi.get(url)
  if r.status_code == 401:
    # If authorization failed, it is likely that the token has 
    expired. Get a new one and try again.
    mbapi.fetch_token(token_url=token_url, client_id=client_id, client_secret=client_secret)
    r = mbapi.get(url)
  r.raise_for_status()
  return r.content

# Use the helper method to access the API

d = downloadMbApi("series/fetchseries?n=usgdp")

jdata = json.loads(d)

print(jdata)

Loading time series and entities

GET series/fetchseries

Retrieve one or more time series.

The URL should not be longer than 2000 characters. Example:

Retrieve two time series.
series/fetchseries?n=usgdp&n=degdp
The result will be a list of series in the same order as requested.

POST series/fetchseries

Retrieve one or more time series.

The data is a list of series names to retrieve. Each name can optionally have a time stamp. If the series has not been modified since that time, the series will not be returned but instead there will be a status code indicating that it was not modified. The timestamp specified is typically the metadata LastModifiedTimeStamp from a previous response.

If you are retrieving many series, you might want to batch them into groups of 200 at a time for best efficiency. If your framework supports asynchronous requests, you might want to make two requests in parallel. Example:

To request two series, where one has a conditional timestamp.

[
  {
    "name": "usgdp",
    "ifModifiedSince": "2021-02-28T20:40:18.424Z"
  }
  {
    "name": "segdp"
  }
]

GET series/fetchentities

Retrieve one or more entities.

The URL should not be longer than 2000 characters. The result will be a list of sets of metadata in the same order as in the request. Example:

Get the metadata for a Release entity. The name of the Release was found as part of the metadata of the time series 'usgdp'. The metadata of the Release contains useful information such as the timestamp of the next expected release of new data.
series/fetchentities?n=rel_usbeana

GET seriestree/getleafseries

To get list of series from a particular location in the tree the path must be entered as found in the application, where each node is separated by a slash. Also, special characters should be encoded using RFC 2396. Example:

Retrieve series from Concept & Category/Prices/National Sources/Consumer Prices/Core CPI/Total/SA
seriestree/getleafseries?path=Concept%20%26%20Category%2FPrices%2FNational%20Sources%2FConsumer%20Prices%2FCore%20CPI%2FTotal%2FSA

Revision history series

For many series all changes to the values of the series are stored and they can be obtained as historical versions, or vintages, of the series. A change of an existing value or addition of a new value is regarded as a change of the series. With this information you can get older vintages of series, get point-in-time information when values where changed, get unrevised data or a specific revision. In the API there are several methods that allows you to obtain different views of this data.

GET series/getrevisioninfo

This method is used to find information related to revision history for one or more series:

  • if revision history is maintained by Macrobond for this series
  • how long history of revisions a series has
  • a list of timestamps when changes were made of the values of the series

GET series/fetchvintageseries

Get the series with the values it had at some point in time.

The metadata RevisionTimestamp will contain the timestamp when the revision was recorded. Example:

Get the version of the series 'usgdp' with the values it had 1 January 2020.
series/fetchvintageseries?t=2020-01-01T00%3A00%3A00.100Z&getTimesOfChange=true&n=usgdp

GET series/fetchallvintageseries

Get all historical revision stored for a series.

You can optionally include a timestamp as a parameter to retrieve the series conditionally. This timestamp is typically the value of the metadata LastModifiedTimeStamp obtained from the previous request.

Note, this can be a large amount of data and the interactive documentation page can struggle to show the result.

Searching for time series and entities

Search for time series and other entities by using a filter based on metadata and optional text searching. The most common case is to search for time series and this is the default of no other entity types are specified. By default, the result contains the metadata of the found entities, but if you do not need this you can specify not to include it which will make the result smaller and faster to load.

Generate search code in Macrobond main app

When you input a query into search field in Macrobond’s Search tab, you can then generate a ready-to-use code for search in Web API Call:

GET search/entities

Example:

A common and powerful use case for searching is to use the RegionKey attribute. This attribute defines classifications of data that is available across regions. By inspecting the series 'usgdp', we can see that this series has RegionKey=gdp_total.

To search for series that are the corresponding series in the regions us, gb and se, you can use the following query:
search/entities?noMetaData=true&RegionKey=gdp_total&Region=us&Region=gb&Region=se

Side note: in the interactive documentation, you specify the filter part for this example like this:

{
  "RegionKey": "gdp_total",
  "Region": ["us", "gb","se"]
}

You can search for all series of this type for all regions:
search/entities?RegionKey=gdp_total
By prefixing a condition with '!' you can exclude matching series. This query will return the GDP series identified by Macrobond, but excludes those where we only have annual data:
search/entities?RegionKey=gdp_total&!Frequency=annual

POST search/entities

This method offers the same search capabilities as the 'GET search/entities' described above, but adds the option of specifying several sets of filters. These filters will be linked together based on the entity type. Example:

This query will look for all entities of type Company with a specific classification. It will then find all entities of type Security associated with those companies that also have the attribute CompanyKey=main_equity. Finally, a match will be made with all TimeSeries, the default type, associated with those securities and that have DataType=close.

The result will be all series with the closing price of the equity of companies of the specific classification.

{
  "filters":
  [
    {
      "entityTypes": ["Company"],
      "mustHaveValues": { "IcbClassification":"icb_2713" }
    },
    {
      "entityTypes": ["Security"],
      "mustHaveValues": { "CompanyKey":"main_equity" }
    },
    {
      "mustHaveValues": { "DataType":"close" }
    }
  ]
}

Creating and updating in-house series

You can create and update a limited set of in-house series using the API just as you can do using the Macrobond application.

To be able to use the API methods related to uploading series, you must request the scope macrobond_web_api.write_ih as part of the authentication.

GET seriestree/getseriesstoragelocations

Each in-house series is identified with a prefix like “ih:mb:priv:” followed by a name that starts with a lower case letter followed by lower case letter, digits and underscore. The prefix identifies the storage location. You can list the storage locations and the corresponding prefixes by calling the API method seriestree/getseriesstoragelocations.
The storage location dictates who can access the series. The most common storage locations are "priv", for private series that can only be access using the account that uploads them, and "com" that can be accessed by the whole company.

POST series/uploadseries

To create or update a series, you call series/uploadseries and post a JSON structure containing values and metadata. At a minimum you need to specify the metadata attributes PrimName, Description, Region, IHCategory and Frequency.
For more information about metadata, see Entities and metadata.

You can either specify a list of one timestamp per value, or specify the StartDate metadata attribute. For daily series, the DayMask attribute must also be included.

Here is an example of a payload that creates or updates a private series called "test".

{
   "values": [12.23, 45.56],
   "dates": ["2021-09-23", "2021-10-21"],
   "metadata": {
      "PrimName": "ih:mb:priv:test",
      "Description": "A test series",
      "Region": "us",
      "IHCategory": "Test",
      "Frequency": "monthly"
   }
}

The dates must be in ascending order.

If your series contains one observation for each per period, you can specify the StartDate instead of the array of dates.

{
   "values": [12.23, 45.56],
   "metadata": {
      "PrimName": "ih:mb:priv:test",
      "Description": "A test series",
      "Region": "us",
      "IHCategory": "Test",
      "Frequency": "monthly"
      "StartDate": "2021-09-23"
   }
}

The attribute IHCategory can be set to any text. This will be used in the Macrobond application user interface when organizing the series into groups.

GET seriestree/getusedinhousecategories

You can get a list of previously used values of IHCategory by calling seriestree/getusedinhousecategories.

DELETE series/deleteseries

In-house series can be deleted with a call to series/deleteseries.

LinkedIn authorization cancelled

You've cancelled the authorization of Macrobond application to post on LinkedIn. You can initiate the process again from within the Macrobond application.

LinkedIn authorization successful

You have successfully authorized the Macrobond application post on LinkedIn. Please close this window and return to the Macrobond application

You can now post charts on your LinkedIn profile. See How to send a chart? for more information.

Note you can revoke the granted access at any time in the Apps section of your settings in LinkedIn.

Deploying the Macrobond application

Installation and packaging  

Macrobond application can be successfully installed either on single user machine or packaged and redistributed to all intended users with use Active Directory’s group policies or other deployment systems used by your organization. 

For single machine deployment, we recommend using installation program (also called Setup program).  

For packaging purposes, we provide two-part installation: 

  • MSI program to install base version, 
  • MSP to install the incremental update to newer version. 

MSI+MSP scripts can be downloaded for local deployment from our installation page. 

Main installation requires installation rights. Elevated privileges are needed during installation process to register Microsoft Office add-ins and DLLs. Once installed, users can be allowed to safely upgrade the application without elevated privileges using a feature in Windows called UAC patching.    

All the above methods along with installation files are described in detail at: Installation.

Requirements

Minimum software requirements

Operating system  64-bit versions of Windows. The Macrobond application is supported on the same versions of Windows that are supported by Microsoft. Currently these are:

  • Windows 10
  • Windows 11
Microsoft .NET Framework 
  • 4.7.2 or higher
Microsoft Office 
  • Office 2016
  • Office 2019
  • Office 2021
  • The Macrobond application supports both 32 and 64-bit Office, but 64-bit is recommended. 

Office 365 is a subscription plan that gives you the option to download and install the latest version  of the Office programs. The latest version is always supported.

Browser for macrobond.net
  • Chromium based browsers (Chrome, Edge)
  • Safari on iOS/OS X issued 2021 and later

Minimum hardware requirements

Screen resolution  1280x768 pixels or higher at 96 DPI. For higher DPI, the required resolution is correspondingly higher. 
Processor and memory The Macrobond application has the same minimum requirements as Windows. For Windows 11 this is CPU 1 GHz dual core, 4 GB RAM and 64 GB storage.

For good performance when you also work with other applications on the same PC, we recommend at least a 4 core CPU and 8 GB RAM.

Connectivity and internet resources

Server IP Protocol Description
app1.macrobondfinancial.com 79.136.101.36,
2001:9b0:1:2100::36
https Main application server
app2.macrobondfinancial.com 142.4.206.172, 2607:5300:207:3200:0:0:0:12 https Secondary application server
app3.macrobondfinancial.com 51.79.136.241,
2402:1f00:8004:1f00::10
https Tertiary application server
app1.hk.macrobondfinancial.com 103.68.63.179 https Proxy server for users located in China
app3.hk.macrobondfinancial.com 182.16.101.227 https Proxy server for users located in China
sse.app1.macrobondfinancial.com 79.136.101.36, 2001:9b0:1:2101::36 https Real-time notifications server for the main application server
sse.app2.macrobondfinancial.com 142.4.206.172, 2607:5300:207:3200::12 https Real-time notifications server for the secondary application server
sse.app3.macrobondfinancial.com 51.79.136.241,
2402:1f00:8004:1f00::10
https Real-time notifications server for the tertiary application server
macrobond.net, download.macrobond.com 79.136.101.40, 2001:9b0:1:2100::40 https Application update files in the MSI/MSP format.
help.macrobond.com 79.136.101.45, 2001:9b0:1:2100::45 https For help files, documentation.
www.macrobond.com, redir.macrobond.com, techinfo.macrobond.com   https For help files, documentation, latest news etc.
r.macrobond.com 79.136.101.43, 2001:9b0:1:2100::43 https For redirects from http to links that point to data in the Macrobond application.
cdn.publish.macrobond.net   https For the web-publish feature of the Macrobond application.
*.vimeo.com,
*.vimeocdn.com,
*.akamaihd.net
  https For streaming video tutorials.
crl.globalsign.net   http  Server with certificate revocations list for the GlobalSign certificate authority. This server is contacted by Windows to verify the digital certificate of the installation.
api.twitter.com,
upload.twitter.com 
  https  This is needed only if you want to use the functionality to send charts to X (Twitter) from within the application.
api.linkedin.com   https  This is needed only if you want to use the functionality to send charts to LinkedIn from within the application.
apiauth.macrobondfinancial.com,
api.macrobondfinancial.com,
render.macrobond.net
https For macrobond.net website. apiauth.macrobondfinancial.com, api.macrobondfinancial.com are behind CDN and we cannot provide static IPv4/IPv6 addresses for them.
information-campaign.macrobond.com
79.136.101.43, 2001:9b0:1:2100::43 https Information campaigns and surveys displayed within the Macrobond application

Disclaimer: While our DNS <> IP are fairly static, we cannot guarantee that they’ll never change. 

Directories

Directory Description
%PROGRAMFILES%\Macrobond Financial\Macrobond All the program files. Created and populated by the installation program. Only read access is required when running.
%WINDIR%\System32

%USERPROFILE%\AppData\Local\MacroBond Financial

The Microsoft C++ Runtime is installed here by the installation program if they are not already installed. Only read access is required when running.
Application data that are not documents. The directory is created the first time the application is started.
%USERPROFILE%\My Documents\Macrobond Documents stored by the user in the My Computer location. The directory is created the first time it is needed by the application.
The name of the "My Documents" directory is dependent on the language of the Windows installation.
%TEMP% Application logs are saved here and may be useful for support to troubleshoot problems. Users will be asked to enable advanced application logging and provide us with result files that may include:

  • Abacus.Excel.log
  • Excel-AddIn.app.log
  • MacroBond.err.log

Registry settings  

In general settings can be either in HKLM or HKCU. HKCU has higher priority. 

Note! For HKLM when using the 64-bit installation the values must be written to both HKLM\Software\Macrobond Financial and HKLM\SOFTWARE\Wow6432Node\Macrobond Financial 

Security 

Installation files and Macrobond.exe are digitally signed and this can be used to verify the source and integrity of the downloaded files. 

Communication between client PCs and Macrobond’s backend is carried by default over HTTPS using standard Windows API. If the SSL certificate seen by the application is expired or invalid – application will not connect to the Macrobond’s backend. It is also possible to additionally activate a check on the client side of the certificate’s thumbprint in order to verify point-to-point encryption. This option is disabled by default. 

Macrobond passwords 

Macrobond Passwords are at least 13 characters long; they include letters, numbers and symbols. They are non-dictionary. There is no support for custom passwords policy. The user is asked to enter the password only during the first use of the Macrobond application. The credentials are encrypted symmetrically using Windows API and stored in the registry. 

Macrobond application transmits passwords via HTTPS – in an encrypted form. Macrobond client application stores end user's credentials in a symmetrically encrypted form. Macrobond’s backend stores only salted hashes of clients' credentials. Locking and unlocking an account are logged and archived. Successful and unsuccessful logon and logoff of all accounts are logged. 

Macrobond’s password should be treated more like a license key – user is asked about it only during the first application use, then the credentials are saved in symmetrically encrypted form in Windows' registry. There is no logout functionality as such. User will be always logged in unless they remove credentials. 

Additional information: How to change password?

IP address

It is possible to limit IP addresses range from which given Macrobond account can be used. It is also possible to limit from how many PCs given Macrobond account can be used – it is set by default to two, if needed – can be set to one.

Login attempts from another Windows profiles or different PCs will not be possible, you will need to contact Macrobond’s support to ‘reset’ the account to allow login from a different computer. 

Storing files  

Macrobond files can be stored on 4 types of accounts: 

  • Personal account - only given user has access to the files, including write rights. 
  • Department account - only members of given department have access to the files, including write rights. Information on membership in department is included in client’s account and is set by Account manager or Support team member. 
  • Company account - all users from your organization have access to the files, including write rights. 
  • Library account - only specified users with Library role set in their account can add and modify files, all users within organization can see them. Information on Library role and is set by Account manager or Support team member. 

All of the above files are stored on our servers. 

We also allow users store their own data on Macrobond servers. This includes: 

  • Macrobond documents 
  • Chart view sizes 
  • Fill ranges 
  • In-house series 
  • Style sheets 
  • Presentations 
  • User defined formulas 
  • Bookmarks, favorite series & data-tree branches 
  • Application configurations 

If your company policy does not allow storing data externally, files can be stored locally on the user’s computer or on a locally reachable network location. 

Similarly, a user’s in-house time series can be saved under the Company account or kept in local Excel files, when the Excel in-house feature is used. 

If needed, Macrobond can centrally disable the possibility of storing any in-house series or Macrobond Documents on Macrobond servers. Then users need to use their own file servers for storing Macrobond documents and Excel in-house, as an alternative to Account in-house. 

Backup/recovering files 

Macrobond backend servers are fully backed up every 24h, we also use continuous transaction archiving so in case of a disaster we can recover the data with point-in-time precision.  We keep online 1 month worth of transaction backups, 1 month worth of daily full backups, over 30 weeks' worth of weekly backups are kept offline.  

Client’s data stored on servers in Canada, Singapore , Sweden and Poland are kept in an encrypted form (we use full disk encryption mechanism called LUKS). Backups of all the data are stored in an encrypted form.  

Technical Q&A

Quick answers & simple, step-by-step solutions. For how-to-use application questions see Q&A.

Macrobond 1.24

 

We are pleased to present an updated version of our application. 

Highlights 

  1. Ability to create lists of series 
  2. Cross sampling analysis
  3. Conditional formatting in bar charts (Heat maps)
  4. Fresh look and feel 
  5. New chart settings and options 

Selection of new functionality

Lists of series

The highlight of all the new features of Macrobond 1.24 is the ability to organise large sets of series. Simply click on the new Lists tab, which you can find within Series

You can use the name of a list in a formula expression and the calculation will be applied on all the series of the list. For example, in the image above, you can use the ‘cpicomp’ list in a formula expression like this: cop(list:doc:cpicomp,1).This is easier to write, gives you a better overview and allows you to add more series to your list.

You can change the order of the series in a list and it will be retained and will not break any calculations.

In most analyses, such as Rate of change, you can set parameters for the whole list.

In most analyses, you can make exceptions at series level:

Lists can also be combined. This works in formulas and in the new Cross sampling analysis.

Combining lists works if the lists have a relationship (parent/child lists) or if they are organised by region using the List by region list type. Here is an example where several List by region lists have been created:

You can then use a formula expression like list:doc:gdp/list:doc:pop. The calculation will be applied pairwise to the series in the lists to generate a new list.

Read more here or by pressing F1 in the Series list analysis. 

Cross sampling analysis

Our new Cross sampling analysis is a successor to the Scalar analysis, with a new workflow that is especially tailored for lists.

Simply add the lists to the table on the right. In this example, the lists are of type List by region and automatically align.

In this next example, the output is sorted by population and the ten largest cities are presented in a bubble chart

Read more here or by pressing F1 in Cross sampling analysis. 

Conditional formatting in Bar charts (heatmaps)

You can set up conditional formatting in Bar chart in a similar way to Excel. This can be used for visualisations such as heatmaps to show negative values and highlight largest and smallest values and outliers.

In this table (bar chart), you can see that negative values are presented in red text, the two smallest values against a red background, and the two highest values against a green background.

You can set up the rules by pressing the Rules button in the Bar chart settings.

Here is an example that illustrates using rules to create a heatmap:

Read more here or by pressing F1 in the Rules dialog.

Fresh look and feel

We have updated the fonts and colour palette of the application and charting tools so they align with our our refreshed corporate brand. The new look is cleaner and less distracting, with fewer borders and gradients.  

Font size as pixels or points

In the Font dialog, you can now choose the unit of the font size as either pixel (as before) or point, which is more standard. You can enter one decimal digit.

A pixel in this context is 1/96” and a point 1/72”.

New chart settings and options

Patterns for filled graphs

For filled graph types (bars, stacked columns, area, stripe etc.) you can now select a pattern for the background. This can be useful to contrast or complement different colours.

This functionality may not achieve the same result when the charts are opened in Microsoft Office due to the software’s format limitations. However, images exported as bitmaps or SVG should be fine.

Graph area borders

The image below shows some of the new options you can choose from when creating borders for your graphs. There are now options for including only left and/or right sides for the graph area border.

Graph area margins

You now have more control over how margins are allocated around graph elements. 

Under the default setting, margins above and below the highest and lowest values are wide enough to accommodate line width, marker size and height of y-axis label texts inside the graph area.

Now you can set your margins as Graph margin outside, which allocates enough space outside the graph area to prevent any overlap with surrounding elements.

Take a look at the x-axis on these two charts.

In this example, the margin is set to inside.

In this example, the margin is set to outside.

Thousand separator 

You now have an optional Thousand separator setting for the axes in the charts, which adds a separator after every third digit for numbers larger than 1,000. You can find this in the language settings selected for the chart.

In addition to the Thousand separator for Observation labels and other places where dynamic text is used, you can choose additional formatting options from the drop-down list. 

New calculation method for Smoothing and Statistics 

We have added a new None as a way calculation method for Smoothing and Statistics analyses so you can include the original series without any calculations.