From 0cbb1468a560e5edca6ece9020a0662b57bb7110 Mon Sep 17 00:00:00 2001 From: Bjarte Mellemstrand <95030573+BjarteMell@users.noreply.github.com> Date: Tue, 12 May 2026 11:09:50 +0200 Subject: [PATCH 01/13] Enhance error codes descriptions in user guide Updated error codes section with detailed explanations for 400 and 404 responses. --- docs/PxWebApi/documentation/user-guide.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/PxWebApi/documentation/user-guide.md b/docs/PxWebApi/documentation/user-guide.md index 6661bf2..45b798b 100644 --- a/docs/PxWebApi/documentation/user-guide.md +++ b/docs/PxWebApi/documentation/user-guide.md @@ -1251,11 +1251,12 @@ should be in. Possible error codes if the query does not return a response: -- `400` – “Bad request” - errors in syntax of the query. -- `403` – Blocking when querying for large data sets. The API limit varies between - organizations cells. -- `404` – Resource not found. May be due to a misspelled URL or URL exceeding - the limit of approximately 2100 characters. +- `400` – Bad request, errors in parameters. Type and title will often explain this in more detail. Here are some examples: + - "Non-existent variable" means that the variable name your are asking for does not exist. + - "Non-existent value" means that the value code you are asking for does not exist. + - "Too many cells selected" means that you are requesting too large a dataset. The API limit varies between organizations. +- `404` – File or directory not found. May be due to a misspelled URL or URL exceeding the limit of approximately 2100 characters. + - "Non-existent table" means you are querying for a table number that does not exist. - `429` – Too many queries within a minute. The limit varies between organizations. Run large queries in sequence. Get the result of the first, before you run the next. From 5b1e57e76a5be91cf78510ebddbb31e834282935 Mon Sep 17 00:00:00 2001 From: Rune Johansen Date: Tue, 19 May 2026 10:39:56 +0200 Subject: [PATCH 02/13] docs: lint markdown and delete unused documents (#61) * check markdownlint and remove warnings * delete unused documents * bump year * rearrange navigation --- .markdownlint.json | 3 +- README.md | 9 +- docs/Other/changes-in-savedquery-usage.md | 24 +- docs/PxWeb2/documentation/customization.md | 129 +- docs/PxWeb2/documentation/docker.md | 2 +- .../getting-started/configuration.md | 14 - .../contribute/add-translations.md | 2 - .../contribute/help-us-write-the-docs.md | 2 - .../contribute/report-a-bug.md | 4 - .../documentation/installation-on-iis.md | 37 +- docs/PxWeb2/project/demo.md | 8 +- docs/PxWeb2/project/introduction.md | 58 +- docs/PxWeb2/project/plans.md | 91 +- docs/PxWeb2/project/process.md | 126 +- docs/PxWeb2/project/solution.md | 73 +- docs/PxWebApi/documentation/configuration.md | 8 +- docs/PxWebApi/documentation/installation.md | 59 +- docs/PxWebApi/documentation/user-guide.md | 80 +- docs/documentation/overview.md | 9 +- docs/px-file-format/px-2013.md | 1215 ----------------- docs/tools/pxweb.md | 12 - mkdocs.yml | 11 +- 22 files changed, 497 insertions(+), 1479 deletions(-) delete mode 100644 docs/PxWeb2/documentation/getting-started/configuration.md delete mode 100644 docs/PxWeb2/documentation/getting-started/contribute/add-translations.md delete mode 100644 docs/PxWeb2/documentation/getting-started/contribute/help-us-write-the-docs.md delete mode 100644 docs/PxWeb2/documentation/getting-started/contribute/report-a-bug.md delete mode 100644 docs/px-file-format/px-2013.md delete mode 100644 docs/tools/pxweb.md diff --git a/.markdownlint.json b/.markdownlint.json index e071cd3..e0efc9b 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,4 +1,5 @@ { "default": true, - "MD007": { "indent": 4 } + "MD007": { "indent": 4 }, + "MD046": false } diff --git a/README.md b/README.md index 6aea017..c21f925 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ This repo contain the MarkDown for [www.pxtools.net](https://www.pxtools.net/) -We use [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) for this site +We use [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) for +this site ## Preview documentation locally while writing @@ -15,3 +16,9 @@ docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-material ``` Browse + +## Lint as you write in Visual Studio Code + +Install [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) + +> Markdown/CommonMark linting and style checking for Visual Studio Code diff --git a/docs/Other/changes-in-savedquery-usage.md b/docs/Other/changes-in-savedquery-usage.md index d1c158e..74d713e 100644 --- a/docs/Other/changes-in-savedquery-usage.md +++ b/docs/Other/changes-in-savedquery-usage.md @@ -1,16 +1,24 @@ -### Saved queries in PxWeb2 and PxWebApi2. +# Changes in savedquery usage + +## Saved queries in PxWeb2 and PxWebApi2 + A saved query has an output format, which was selected when it was created. -If the output format is "Screen" you should get the table with your selections in the gui. -If the output is "Download" (e.g. excel) the browser should download the data in the chosen format. +If the output format is "Screen" you should get the table with your selections +in the gui. If the output is "Download" (e.g. excel) the browser should download +the data in the chosen format. -In the old classic version, the url of the gui was used for both "screen" and "download", and the output format "screen" got -you pxweb "as it was" when the query was created. If the output format was excel, you would not see the gui, the browser would just start to download a file. +In the old classic version, the url of the gui was used for both "screen" and +"download", and the output format "screen" got you pxweb "as it was" when the +query was created. If the output format was excel, you would not see the gui, +the browser would just start to download a file. In the new version, the responsibillity is sharded between the api and and gui: -The url to the gui is used to get pxweb "as it was", also for "download" output formats. -The url to the api is used to download the data of any savedquery. For the "sceen" output format will download jsonstat2 files. +The url to the gui is used to get pxweb "as it was", also for "download" output +formats. The url to the api is used to download the data of any savedquery. +For the "sceen" output format will download jsonstat2 files. `http://mysite/api/pxwebapi/v2/savedqueries/N/data` will download the file. -`http://mysite/api/pxwebapi/v2/savedqueries/N` will get you the definition of the savedquery. +`http://mysite/api/pxwebapi/v2/savedqueries/N` will get you the definition of +the savedquery. diff --git a/docs/PxWeb2/documentation/customization.md b/docs/PxWeb2/documentation/customization.md index 4b6981c..dfcf4a6 100644 --- a/docs/PxWeb2/documentation/customization.md +++ b/docs/PxWeb2/documentation/customization.md @@ -1,4 +1,4 @@ -# Customization +# Customize PxWeb 2 PxWeb comes prebuilt with configuration for tables in English, a set of fonts colors and icons. This guide help you customize PxWeb to your needs. @@ -164,31 +164,38 @@ maxDataCells: 500000 ### Table title configuration -The default behaviour when creating the table title is to use content text at table level followed by an enumeration of selected variable names. Example: +The default behaviour when creating the table title is to use content text at +table level followed by an enumeration of selected variable names. Example: -``` +```sh Content at table level by variable1, variable2 and variable3 ``` -For CNMM databases it is possible to configure an alternative way of creating the table title with the following behaviour: +For CNMM databases it is possible to configure an alternative way of creating +the table title with the following behaviour: -#### One content value selected: -``` +#### One content value selected + +```sh Alternative text for selected content by variable1, variable2 and variable3 ``` -#### Two or more content values selected: -``` + +#### Two or more content values selected + +```sh Content at table level by variable1, variable2 and variable3 ``` -If you want to use dynamic content texts in the table title, set `useDynamicContentInTitle` in `config/config.js` to `true`: +If you want to use dynamic content texts in the table title, set +`useDynamicContentInTitle` in `config/config.js` to `true`: ```js useDynamicContentInTitle: true ``` !!! note "Only for CNMM databases" - This setting can only be used for CNMM databases. If your database is a PX-file database, this setting should be set to `false`. + This setting can only be used for CNMM databases. If your database is a + PX-file database, this setting should be set to `false`. ### Change the default characters for missing values @@ -251,7 +258,8 @@ In `config/config.js`: }; ``` -- `supportedLanguages`: The active languages (must match those available in the API). +- `supportedLanguages`: The active languages (must match those available in the + API). - `defaultLanguage`: The primary language. - `fallbackLanguage`: Used if a translation key is missing for the active language. - `showDefaultLanguageInPath`: If `true`, URLs include the default language code. @@ -272,15 +280,21 @@ Replace the font files in the `fonts` directory. Keep file names. Make sure you have the proper license to self-host fonts. ### Change logo and favicon -The svg **must** include viewbox and width/height attributes for it to be rendered correctly. -To change the logo/favicon in PxWeb replace svgs in the image folder. The names must be the same. +The svg **must** include viewbox and width/height attributes for it to be +rendered correctly. + +To change the logo/favicon in PxWeb replace svgs in the image folder. The names +must be the same. For image replace `images/logo.svg` with your own logo. Replace `images/favicon.ico` / `images/favicon-darkmode.svg` with your own favicon. ### Change logo URL -By default you will come to the PxWeb start page when clicking the logo. However, it is possible to configure this. You can configure a new logo URL per language by editing `homePage` in `config/config.js`: + +By default you will come to the PxWeb start page when clicking the logo. +However, it is possible to configure this. You can configure a new logo URL per +language by editing `homePage` in `config/config.js`: ```js homePage: { @@ -290,6 +304,7 @@ By default you will come to the PxWeb start page when clicking the logo. However ``` ### Show breadcrumb on start page + You can set if breadcrumbs should be shown on start page Set `showBreadCrumbOnStartPage` in `config/config.js`. Example: @@ -319,17 +334,22 @@ Keys reflect where in the UI a string is used. Only modify values. ### Change date format in translation file Edit the relevant `locales//translation.json` file. -We have two date formats defined under `date` in translation files - `simple_date` and `simple_date_with_time`. +We have two date formats defined under `date` in translation files - +`simple_date` and `simple_date_with_time`. -Change the format options as needed. **PxWeb2** uses `Intl.DateTimeFormat` for date formatting. See documentation for options here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat +Change the format options as needed. **PxWeb2** uses `Intl.DateTimeFormat` for +date formatting. See documentation for options here: + Here is an examples configuration used for english and norwegian: ??? tip "english date formats" + ```json "date": { "simple_date": "{{value, datetime}}", - "simple_date_with_time": "{{value, datetime(year: 'numeric'; month: 'numeric'; day: 'numeric'; hour: 'numeric'; minute: 'numeric')}}" + "simple_date_with_time": "{{value, datetime(year: 'numeric'; + month: 'numeric'; day: 'numeric'; hour: 'numeric'; minute: 'numeric')}}" } ``` @@ -337,21 +357,27 @@ Example of how `simple_date_with_time` for english is displayed in PxWeb2 UI: `2/21/2025, 8:00 AM` ??? tip "norwegian date formats" + ```json "date": { - "simple_date": "{{value, datetime(day: '2-digit'; month: '2-digit'; year: 'numeric')}}", - "simple_date_with_time": "{{value, datetime(year: 'numeric'; month: '2-digit'; day: '2-digit'; hour: 'numeric'; minute: 'numeric')}}" + "simple_date": "{{value, datetime(day: '2-digit'; month: '2-digit'; + year: 'numeric')}}", + "simple_date_with_time": "{{value, datetime(year: 'numeric'; + month: '2-digit'; day: '2-digit'; hour: 'numeric'; minute: 'numeric')}}" } ``` -Example of how `simple_date_with_time` for norwegian is displayed with two digit configuration in PxWeb2 UI: -`21.02.2025, 08:00` +Example of how `simple_date_with_time` for norwegian is displayed with two digit +configuration in PxWeb2 UI: `21.02.2025, 08:00` ### Override separators in number formatting per language + Edit the relevant `locales//translation.json` file. -We have defined multiple number formatting rules under `number` in translation files. Here are some expamples of number formats that are used: +We have defined multiple number formatting rules under `number` in translation +files. Here are some expamples of number formats that are used: ??? tip "number formats" + ```json "number": { "simple_number": "{{value, pxNumber}}", @@ -366,22 +392,33 @@ We have defined multiple number formatting rules under `number` in translation f - `simple_number_with_one_decimal`: Number formatting with one decimal place. - `simple_number_with_two_decimals`: Number formatting with two decimal places. -The group and decimal separators are determined by the language locale. However, if you want to customize the number formatting further, you can add additional options to the `pxNumber` formatter. +The group and decimal separators are determined by the language locale. However, +if you want to customize the number formatting further, you can add additional +options to the `pxNumber` formatter. -To override decimal add `decimalSeparator` to the `number_format` object. Likewise, to override group separator add `thousandSeparator` to the `number_format` object. +To override decimal add `decimalSeparator` to the `number_format` object. +Likewise, to override group separator add `thousandSeparator` to the +`number_format` object. -If you need to add space as a group separator, you add the value `nbsp` for non-breaking space or `nnbsp` for narrow non-breaking space, e.g. `thousandSeparator: 'nbsp'`. +If you need to add space as a group separator, you add the value `nbsp` for +non-breaking space or `nnbsp` for narrow non-breaking space, e.g. +`thousandSeparator: 'nbsp'`. + +Here is an example of how to override both decimal and group separators for +simple_number_with_two_decimals. Use `,` as decimal separator and non-breaking +space as group separator: -Here is an example of how to override both decimal and group separators for simple_number_with_two_decimals. Use `,` as decimal separator and non-breaking space as group separator: ```json "number": { - "simple_number_with_two_decimals": "{{value, pxNumber(minimumFractionDigits: 2; maximumFractionDigits: 2; decimalSeparator: ','; thousandSeparator: 'nbsp';)}}", + "simple_number_with_two_decimals": "{{value, pxNumber(minimumFractionDigits: 2; + maximumFractionDigits: 2; decimalSeparator: ','; thousandSeparator: 'nbsp';)}}", } ``` ### Hide or show the default language in the URL Toggle: + ```js hl_lines="8" globalThis.PxWeb2Config = { language: { @@ -499,8 +536,9 @@ know the side effects (they are used for logical extremes). The `content.json` file defines customizable text and links that appear in **PxWeb’s user interface** This file allows you to configure localized UI -content: you can add a **detailsSection** after the ingress on the start page, update the **help section** on the table page, or update the -**footer** content for the application. +content: you can add a **detailsSection** after the ingress on the start page, +update the **help section** on the table page, or update the **footer** content +for the application. ```sh root/content @@ -531,7 +569,10 @@ root/content { "textBlock": { "header": "When to use this section", - "text": "This is an optional section that can be used for content that may be useful for some users, but is not essential for everyone. Key information that all users need to see should always appear in the lead paragraph." + "text": "This is an optional section that can be used for content + that may be useful for some users, but is not essential for + everyone. Key information that all users need to see should always + appear in the lead paragraph." } }, { @@ -556,7 +597,8 @@ root/content "enabled": true, "helpText": [ "Use *title:* to search only in the table name, for example *title:stockholm*.", - "You can add or remove items from this search help list to make it relevant for your specific database." + "You can add or remove items from this search help list to make it + relevant for your specific database." ] } }, @@ -577,7 +619,8 @@ root/content }, "tableViewer": { "helpSection": { - "description": "Help and guidance on how to use the PxWeb interface can be found on our help pages:", + "description": "Help and guidance on how to use the PxWeb interface can be + found on our help pages:", "links": [ { "text": "Example link 1", @@ -590,7 +633,8 @@ root/content ], "informationCard": { "enabled": true, - "text": "For questions about the figures and table content, see the “Information” button." + "text": "For questions about the figures and table content, see the + “Information” button." } } } @@ -607,15 +651,20 @@ root/content - **startPage.noResultSearchHelp** – Optional section displayed below the “no results” message when no tables match the search or filters. When `enabled` is `true`, each string in the `helpText` array is shown - as a separate list item under a help heading. The text will be rendered using a custom markdown renderer to allow *italic* formatting with asterisks. + as a separate list item under a help heading. The text will be rendered using + a custom markdown renderer to allow *italic* formatting with asterisks. - **footer** - One or more footer columns with `header` and list of `links`. If links have `external` set to `true`, they automatically will have the icon for external links and will open in a new tab. See example above. + One or more footer columns with `header` and list of `links`. If links have + `external` set to `true`, they automatically will have the icon for external + links and will open in a new tab. See example above. - **tableViewer.helpSection** – Optional help section on the table page. Contains a `description` string, a list of `links` (with `text` and `url`), and - an optional `informationCard` (with `enabled` boolean and `text`). Links will always be opened in a new tab. - When at least on the above is defined, the application renders the **`HelpSection` component**. + an optional `informationCard` (with `enabled` boolean and `text`). Links will + always be opened in a new tab. + When at least on the above is defined, the application renders the + **`HelpSection` component**. This setup allows administrators to adjust localized content (text and links) for each language without modifying the application code. @@ -629,9 +678,9 @@ Token categories: 1. Primitive (Base) Tokens: Raw color values (brand, accent, neutrals, semantic palettes). Example: `--px-color-brand-400`. -2. Semantic (System) Tokens: Contextual meaning-based tokens mapping to +2. Semantic (System) Tokens: Contextual meaning-based tokens mapping to primitives. Example: `--px-color-surface-default`, `--px-color-text-action`. -3. Component / Alias Tokens (if introduced later): Optional intermediary +3. Component / Alias Tokens (if introduced later): Optional intermediary re-mappings for specific components. Principles: @@ -789,7 +838,7 @@ Below is the mapping of primitive tokens to semantic tokens that consume them: ## Troubleshooting | Issue | Possible Cause | Fix | -|-------|----------------|-----| +| ----- | -------------- | --- | | Language not switching | Missing folder or translation key | Verify `locales//translation.json` exists and is valid JSON | | Icons not showing | File name mismatch | Ensure mapping file matches actual SVG names | | Colors look inconsistent | Edited semantic tokens directly | Revert semantic tokens; adjust primitives only | diff --git a/docs/PxWeb2/documentation/docker.md b/docs/PxWeb2/documentation/docker.md index eaf2c1a..3b79797 100644 --- a/docs/PxWeb2/documentation/docker.md +++ b/docs/PxWeb2/documentation/docker.md @@ -1,4 +1,4 @@ -# Docker +# Try PxWeb 2 with Docker This document describes how you can use [Docker Compose](https://docs.docker.com/compose/) to try out the new PxWeb 2.0 with your excisting database. The reason we need diff --git a/docs/PxWeb2/documentation/getting-started/configuration.md b/docs/PxWeb2/documentation/getting-started/configuration.md deleted file mode 100644 index 1a6deaf..0000000 --- a/docs/PxWeb2/documentation/getting-started/configuration.md +++ /dev/null @@ -1,14 +0,0 @@ -# Configuration - -## Application configuration settings - -### API end point -In order for PxWeb to display your statistics, you need to configure the URL to the root of PxWebApi 2.0 - -### Language settings -Is that fetched from the API? - -### TODO other settings - - -## Application configuration settings \ No newline at end of file diff --git a/docs/PxWeb2/documentation/getting-started/contribute/add-translations.md b/docs/PxWeb2/documentation/getting-started/contribute/add-translations.md deleted file mode 100644 index 22cb342..0000000 --- a/docs/PxWeb2/documentation/getting-started/contribute/add-translations.md +++ /dev/null @@ -1,2 +0,0 @@ -# Add translations -Help us out adding translations to PxWeb. \ No newline at end of file diff --git a/docs/PxWeb2/documentation/getting-started/contribute/help-us-write-the-docs.md b/docs/PxWeb2/documentation/getting-started/contribute/help-us-write-the-docs.md deleted file mode 100644 index 630e172..0000000 --- a/docs/PxWeb2/documentation/getting-started/contribute/help-us-write-the-docs.md +++ /dev/null @@ -1,2 +0,0 @@ -# Help us write the docs -With good documentation ... \ No newline at end of file diff --git a/docs/PxWeb2/documentation/getting-started/contribute/report-a-bug.md b/docs/PxWeb2/documentation/getting-started/contribute/report-a-bug.md deleted file mode 100644 index 816cc61..0000000 --- a/docs/PxWeb2/documentation/getting-started/contribute/report-a-bug.md +++ /dev/null @@ -1,4 +0,0 @@ -# Report a bug -TODO: Add link to GitHub issues. - -TODO: Security issues should be reported with GitHub ... diff --git a/docs/PxWeb2/documentation/installation-on-iis.md b/docs/PxWeb2/documentation/installation-on-iis.md index 2e3a757..3790c2e 100644 --- a/docs/PxWeb2/documentation/installation-on-iis.md +++ b/docs/PxWeb2/documentation/installation-on-iis.md @@ -5,16 +5,19 @@ This instruction guides you in how to install PxWeb 2 on IIS. ## Prerequisites - A supported Windows server with IIS installed. -- The [URL Rewrite module](https://www.iis.net/downloads/microsoft/url-rewrite) must be installed on your IIS. +- The [URL Rewrite module](https://www.iis.net/downloads/microsoft/url-rewrite) + must be installed on your IIS. - ApiUrl to your PxWebApi 2 installation. If your tables endpoint is at `https://your.api.server/PxWeb/api/v2/tables` - then your ApiUrl is `https://your.api.server/PxWeb/api/v2` (omit a trailing slash, one is added automatically) + then your ApiUrl is `https://your.api.server/PxWeb/api/v2` + (omit a trailing slash, one is added automatically) ## Installation steps -1. Download the [zip file for the latest release](https://github.com/pxtools/PxWeb2/releases/latest) from GitHub. - It is found inside the Asserts heading. - Make sure to _Unblock_ it if its block by right clicking on it in _File Explorer_ and check the `Unblock` checkbox. +1. Download the [zip file for the latest release](https://github.com/pxtools/PxWeb2/releases/latest) + from GitHub. It is found inside the Asserts heading. + Make sure to _Unblock_ it if its block by right clicking on it in + _File Explorer_ and check the `Unblock` checkbox. 2. Put the contents of the zip file to the location of your choice. E.g `C:\inetpub\wwwroot\pxweb2`. 3. Adjust `baseApplicationPath` and `apiUrl` in `config\config.js`: @@ -30,19 +33,25 @@ This instruction guides you in how to install PxWeb 2 on IIS. ``` -5. In `web.config`, adjust the `Content-Security-Policy` to allow calls to your PxWebApi 2 installation. Within the `Content-Security-Policy` replace the text `https://enter-your-api-domain-here` with the domain of your PxWebApi (for example https://api.scb.se): +5. In `web.config`, adjust the `Content-Security-Policy` to allow calls to your + PxWebApi 2 installation. Within the `Content-Security-Policy` replace the text + `https://enter-your-api-domain-here` with the domain of your PxWebApi + (for example ): ```html - + ``` -1. In IIS find the folder and convert it to an application. (Consider using a separate Application pool for this) +6. In IIS find the folder and convert it to an application. + (Consider using a separate Application pool for this) -1. Open "http(s)://"server adress"/pxweb2 . +7. Open "http(s)://"server adress"/pxweb2 . ## Security tips -You can use [HTTP Header Security Test - HTTP Observatory | MDN](https://developer.mozilla.org/en-US/observatory) for testing your security headers. +You can use [HTTP Header Security Test - HTTP Observatory | MDN](https://developer.mozilla.org/en-US/observatory) +for testing your security headers. ## Troubleshooting @@ -50,10 +59,12 @@ You can use [HTTP Header Security Test - HTTP Observatory | MDN](https://develop If you get an error message looking like this in the console of your browser: - ``` - Refused to connect to 'https://your-api-url' because it violates the following Content Security Policy directive: "connect-src 'self' https://enter-your-api-domain-here". + ```sh + Refused to connect to 'https://your-api-url' because it violates the following + Content Security Policy directive: "connect-src 'self' https://enter-your-api-domain-here". ``` #### Solution -You need to enter the domain of your PxWebApi in the Content Security Policy section in web.config, see step 5 of the installation steps above. +You need to enter the domain of your PxWebApi in the Content Security Policy +section in web.config, see step 5 of the installation steps above. diff --git a/docs/PxWeb2/project/demo.md b/docs/PxWeb2/project/demo.md index 36d6f91..bec03fb 100644 --- a/docs/PxWeb2/project/demo.md +++ b/docs/PxWeb2/project/demo.md @@ -1,14 +1,20 @@ # Demo ## Watch the latest version at Github (with data from Statistics Sweden) + - [The latest version](https://pxweb2.pages.dev/en/) ## PxWeb at Statistics Norway + - [Statbank Norway](https://www.ssb.no/statbank/) ## Try it with your own data -You are free to test PxWeb2 with your own data. It works both with px-files and cnmm database + +You are free to test PxWeb2 with your own data. It works both with px-files and +cnmm database + - [Read the documentation](https://www.pxtools.net/documentation/overview/) ## Follow the releases + - [Release versions](https://github.com/PxTools/PxWeb2/releases) diff --git a/docs/PxWeb2/project/introduction.md b/docs/PxWeb2/project/introduction.md index a79187a..2a0fed1 100644 --- a/docs/PxWeb2/project/introduction.md +++ b/docs/PxWeb2/project/introduction.md @@ -1,54 +1,86 @@ -# What is PxWeb? -PxWeb is an open-source software for publishing and browsing statistical tables online, developed by Statistics Sweden and Statistics Norway. -You can customize PxWeb so it match your organisation’s visual profile, including colours, fonts, logo and icons. +# What is PxWeb? + +PxWeb is an open-source software for publishing and browsing statistical tables +online, developed by Statistics Sweden and Statistics Norway. You can customize +PxWeb so it match your organisation’s visual profile, including colours, fonts, +logo and icons. Its popularity comes from being: + - open-source, no license fees - WCAG compliant - lightweight, high performance - mobile friendly -- designed specifically for statistics published by national statistical offices and other government agencies +- designed specifically for statistics published by national statistical offices + and other government agencies ## PxWeb offers + ### 1. A user centric approach to dissemination of statistics -PxWeb is developed with user needs at the forefront. We care about the professionals who uses PxWeb for work, but also more casual users who need statistics to make informed decisions in their daily lifes. + +PxWeb is developed with user needs at the forefront. We care about the +professionals who uses PxWeb for work, but also more casual users who need +statistics to make informed decisions in their daily lifes. + ### 2. A multidimensional table engine + PxWeb handles datasets with many variables (e.g. year × region × sex). Users can + - Select which variables to include - Filter or pivot data - Generate a custom table -### 3. A built-in API + +### 3. A built-in API + Every dataset published in PXWeb automatically gets an API endpoint, allowing; + - developers to access data programmatically - integration with R, Python, Power BI, etc. + ### 4. Standardised file format + PxWeb uses the px-file format, designed for statistical tables with: + - consistent metadata - classifications - variable hierarchies - units, footnotes and descriptions + ### 5. Support for two datasources + - Px-file database - SQL database (accordning to Common Nordic data Model) + ### 6. Multilingual support -Interfaces and metadata can be translated easily which is important for organisations serving multiple language groups. + +Interfaces and metadata can be translated easily which is important for +organisations serving multiple language groups. + ### 7. Easy maintenance + Users can update datasets by: + - replacing px-files - automating updates via scripts - integrating PxWeb with internal production systems + ### 8. Open-source complimentary applications -To facilitate the use of PxWeb, other organisations have developed complimentary open source Px-tools: -- PxWin - for browsing and editing px-files + +To facilitate the use of PxWeb, other organisations have developed complimentary +open source Px-tools: + +- PxWin - for browsing and editing px-files - PxEdit and PxJob - For producing px-files - PxGraph - For graphs and figures (requires a Highcharts lisence) -### More information about tools for px-files -Statistics Sweden: +### More information about tools for px-files + +Statistics Sweden: [Statistical programs for px-files](https://www.scb.se/en/services/statistical-programs-for-px-files/) -Statistics Finland: +Statistics Finland: [Px suite](https://stat.fi/tup/tilastotietokannat/px-tuoteperhe_en.html) -## Contact for questions and comments +## Contact for questions and comments + Please make an issue at Github with your question or comment about PxWeb [Issues](https://github.com/PxTools/PxWeb2/issues) diff --git a/docs/PxWeb2/project/plans.md b/docs/PxWeb2/project/plans.md index 76993e4..a96f63a 100644 --- a/docs/PxWeb2/project/plans.md +++ b/docs/PxWeb2/project/plans.md @@ -1,35 +1,40 @@ # Upcoming features 2026 -## Remaining to develop in PxWeb 2 +## Remaining to develop in PxWeb 2 ### Startpage - - filter for selecting regional levels - - improve search with more areas i.e. - - subject structure/path (Enables searching across the entire subject structure, including short names) - - maintable-id - - metaid - - show filter count for each category - - remove "other" from Time period - - improve the table card - + +- filter for selecting regional levels +- improve search with more areas i.e. + - subject structure/path (Enables searching across the entire subject + structure, including short names) + - maintable-id + - metaid +- show filter count for each category +- remove "other" from Time period +- improve the table card + ### Table page - - improve performance and layout - - sticky table head and first column - - hide empty rows - - manual pivoting - - search in beginning of words in variable list - - chose to show code or text - - select multile check boxes at once - - advances settings for file export - - additional file formats - - loading symbol - - rezisable navigation drawer - - improve back-button to start-page - + +- improve performance and layout +- sticky table head and first column +- hide empty rows +- manual pivoting +- search in beginning of words in variable list +- chose to show code or text +- select multile check boxes at once +- advances settings for file export +- additional file formats +- loading symbol +- rezisable navigation drawer +- improve back-button to start-page + ### Graph tool + - Implement [Apache Echarts](https://echarts.apache.org/en/index.html) - + ## Further plans for PxWeb 2.x + - Possibility for table bulk download - DCAT-AP format - Hierarchy @@ -38,13 +43,17 @@ - more... ## Functionality released after October 2025 + ### Release versions + - Latest releases: [Version history](https://github.com/PxTools/PxWeb2/releases) ### PxWeb 2 + - Open table card in new tab (right click) - Show PxWebApi 2 in PxWeb 2 -- Improved search at start page (search for variables, values and content in tables. Search for different symbols.) +- Improved search at start page (search for variables, values and content in + tables. Search for different symbols.) - Possibility for text and links in Help - Button to improve table layout - Possibility för own link in logo @@ -53,14 +62,18 @@ - Bug fixes ### PxWebApi v2 + - Sort in meny at level 4 and 5 at sort code - Search with AND -- When creating a saved query in the API the return type has changed to SavedQueryResponse instead of a SavedQuery. +- When creating a saved query in the API the return type has changed to + SavedQueryResponse instead of a SavedQuery. + +-------------------------------------------------------------------------------- + +## Releases in the project --------------------------------------------------------------------------------------------- -## Releases in the project +### PxWeb 2 Release October 2025 -### PxWeb 2 Release October 2025 - Startpage - Save to file - Saved query @@ -69,27 +82,31 @@ - Head and footer ### PxWebApi v2 Release September 2025 + - Follows JSON-stat2 format - Save to file - Saved query - Pivot -------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + ### PxWeb 2.0 testversion December 2024 -- Comprehensible table at first glance - Using an algorithm to show an understandable table the first time you look at it + +- Comprehensible table at first glance - Using an algorithm to show an + understandable table the first time you look at it - Search for codes in variables/contents - Change value-list in a variable/content - Opportunity to see main functionality, buttons and setup -- Possible to choose values in variables/contents and it will be updated in the table at once +- Possible to choose values in variables/contents and it will be updated in the + table at once - Number, decimal and updates in table - Using PxWebApi 2.0 to get information in PxWeb 2.0 -- The test version gets data from a test database in SCB – it shows Swedish and English texts +- The test version gets data from a test database in SCB – it shows Swedish and + English texts ### PxWeb 2.0 testversion June 2024 -- New PxWeb page with variablebox and table, getting data from API 2.0 + +- New PxWeb page with variablebox and table, getting data from API 2.0 - Language management - Algorithm for choosing the best result for displaying a table - Choose different values in variable and see changes in the table - - - diff --git a/docs/PxWeb2/project/process.md b/docs/PxWeb2/project/process.md index f6178b6..f44b870 100644 --- a/docs/PxWeb2/project/process.md +++ b/docs/PxWeb2/project/process.md @@ -1,17 +1,34 @@ # The project New interface for PxWeb (January 2024 - October 2025) ## Background -The user interface in old PxWeb (latest versionj PxWeb 2025v1) could no longer be effectively developed due to technological limitations, and users needs and expectations are constantly changing so Statistics Sweden and Statistics Norway jointly initiated a project in January 2024. The aim of the project was to create a new user interface based on PxWebApi 2 and was released in its first version in October 2025. -### Goals of the Project + +The user interface in old PxWeb (latest versionj PxWeb 2025v1) could no longer +be effectively developed due to technological limitations, and users needs and +expectations are constantly changing so Statistics Sweden and Statistics Norway +jointly initiated a project in January 2024. The aim of the project was to +create a new user interface based on PxWebApi 2 and was released in its first +version in October 2025. + +### Goals of the Project + The project had two goals -- A new user-friendly interface for PxWeb based on PxWebApi 2 -- Test and establish effective and sustainable collaboration processes between Statistics Sweden, SCB and Statistics Norway, SSB at both operational level and management level in the further development of PX-tools -## Organization + +- A new user-friendly interface for PxWeb based on PxWebApi 2 +- Test and establish effective and sustainable collaboration processes between + Statistics Sweden, SCB and Statistics Norway, SSB at both operational level + and management level in the further development of PX-tools + +## Organization + ### Steering group -The steering group consist of managers at Communication and IT in SCB and SSB. + +The steering group consist of managers at Communication and IT in SCB and SSB. + ### Project team + The team had participants from both Statistics Sweden and Statistics Norway. The team was set up with + - Project leader - Scrum master - Architects @@ -19,66 +36,95 @@ The team was set up with - Developers - Specialists - Technical lead -- Test leader -- Testers +- Test leader +- Testers + ## PxWeb 2 solution -In the project, we have made some choices about how we will work in the project across two countries, in order to create opportunities for other countries to contribute in the long term with both development and user testing of PxWeb 2. In addition, we have made some choices to find the best solution for installing PxWeb. All this to reach the main goal to create a user-friendly PxWeb. + +In the project, we have made some choices about how we will work in the project +across two countries, in order to create opportunities for other countries to +contribute in the long term with both development and user testing of PxWeb 2. +In addition, we have made some choices to find the best solution for installing +PxWeb. All this to reach the main goal to create a user-friendly PxWeb. + ### WCAG and Search Engine Optimization (SEO) + - The new interface will follow the rules for A and AA in [WCAG 2.1](https://www.w3.org/TR/WCAG21/) -- SEO is the use of methods that achieve better visibility or "ranking" on search engines result page. +- SEO is the use of methods that achieve better visibility or "ranking" on + search engines result page. + ### PxWeb 2.0 designsystem -We build a design system that can be used by all so the same components can be used for all px products so they get a common expression and be recognizable. + +We build a design system that can be used by all so the same components can be +used for all px products so they get a common expression and be recognizable. [Design system in Storybook](https://pxweb2.pages.dev/storybook/) + ### Options in PxWeb 2 -Each organization should easily be able to adapt the interface a little, but it should still be possible to see that it is a Px-product. -The changes will be possible to introduce both before and after installation of PxWeb 2. -It will be possible to change + +Each organization should easily be able to adapt the interface a little, but it +should still be possible to see that it is a Px-product. The changes will be +possible to introduce both before and after installation of PxWeb 2. It will be +possible to change + - colours - font - corner radius of the elements in the interface. - Change icons - Add languages - [Documentation of possible customization](https://www.pxtools.net/PxWeb2/documentation/customization/) + ### Open source at GitHub -The new interface is able to install directly from GitHub. Also documentation is found here. -[PxTools at GitHub](https://www.pxtools.net/documentation/overview/) + +The new interface is able to install directly from GitHub. Also documentation is +found here. [PxTools at GitHub](https://www.pxtools.net/documentation/overview/) + ### Usertest + We have been following following the UX design process in this project. ![The Ux design process](https://github.com/PxTools/PxWeb2/assets/81364833/8534bfdb-1d0c-49ef-8f2b-5b59357a37bf) -All the choices we made are based on user insigth. -The main focus has been navigation, understand the main fuctionaility in PxWeb and how the most used task should work. -We have several usertests during the project, both on desktop and mobile. +All the choices we made are based on user insigth. The main focus has been +navigation, understand the main fuctionaility in PxWeb and how the most used +task should work. We have several usertests during the project, both on desktop +and mobile. + ### Possibility for connection -In the PxWeb 2.0 interface, it is easy to connect other tools such as Highcharts, Tableau, Power BI and other AI products. This can be connected both by using saved queries from PxWeb 2.0 or by connecting directly to PxWebApi 2.0. -## Process in the project +In the PxWeb 2.0 interface, it is easy to connect other tools such as Highcharts, +Tableau, Power BI and other AI products. This can be connected both by using +saved queries from PxWeb 2.0 or by connecting directly to PxWebApi 2.0. + +## Process in the project + - The project group worked in sprints of three weeks. -- The group follow the scrum rituals with sprintplanning, refinement, retro and daily stand-up. -- The sprints end with a demo (sprint review) on Monday every third week at twelve o'clock. +- The group follow the scrum rituals with sprintplanning, refinement, retro and + daily stand-up. +- The sprints end with a demo (sprint review) on Monday every third week at + twelve o'clock. - Developers have an open Teams-link where they cooperate daily. - The project group meet physically once a quarter. ## Test tools + | Type of test | Testing tools | | --- | ----------- | -|Unit and integration tests | Vitest/Jest | -| |Stories in Storybook | -|Static code analysis | CodeQL (in GitHub) | -| Thirdparty code | Dependabot security and version updates, | +| Unit and integration tests | Vitest/Jest | +| | Stories in Storybook | +| Static code analysis | CodeQL (in GitHub) | +| Thirdparty code | Dependabot security and version updates, | | | Dependabot alerts | -| | Use Snyk Advisor to check development and maintenance health of libraries | -| Automated end-to-end tests | Mabl| +| | Use Snyk Advisor to check development and maintenance health of libraries | +| Automated end-to-end tests | Mabl | | Acceptancetests | Mabl, Chromatic: UI Review (Manual test) | -| Regressiontests | Mabl | -| |Chromatic: UI Test | -| Accessibility testing | @storybook/addon-a11ly Shows relevant results automatically in Storybook, | -| | Axe browser extension | -| |Lighthouse| -| |Mabl with Axe| -| |Valid HTML5 (W3C validator) | -| Security tests | [http://securityheaders.io/](http://securityheaders.io/)| -| |Dynamic analysis: | -| |Detectify | -| |Nessus | +| Regressiontests | Mabl | +| | Chromatic: UI Test | +| Accessibility testing | @storybook/addon-a11ly Shows relevant results automatically in Storybook, | +| | Axe browser extension | +| | Lighthouse | +| | Mabl with Axe | +| | Valid HTML5 (W3C validator) | +| Security tests | [http://securityheaders.io/](http://securityheaders.io/) | +| | Dynamic analysis | +| | Detectify | +| | Nessus | | Performance tests | JMeter | | Container security | Trivy? | diff --git a/docs/PxWeb2/project/solution.md b/docs/PxWeb2/project/solution.md index 4c81711..c3fb79f 100644 --- a/docs/PxWeb2/project/solution.md +++ b/docs/PxWeb2/project/solution.md @@ -1,51 +1,94 @@ # Is PxWeb right for you? -PxWeb is open source and can be downloaded and customized without charge. However, this installation requires IT-skills. Also, to publish statistics in PxWeb you need to create px-files, either by technically integrating with your own IT environment using Python, R or similar, or by manually producing the files using the tool [PxEdit](https://stat.fi/tup/tilastotietokannat/px-tuoteperhe_en.html) Another solution is to use an SQL database, but this also requires in-house technical support. -## PxWeb might be right for your organisation if: +PxWeb is open source and can be downloaded and customized without charge. +However, this installation requires IT-skills. Also, to publish statistics in +PxWeb you need to create px-files, either by technically integrating with your +own IT environment using Python, R or similar, or by manually producing the +files using the tool [PxEdit](https://stat.fi/tup/tilastotietokannat/px-tuoteperhe_en.html) +Another solution is to use an SQL database, but this also requires in-house +technical support. + +## PxWeb might be right for your organisation if + ### 1. Your tables are multidimensional + Unlike most open source data tools, PxWeb is custom made to deal with: + - multidimensional tables - official metadata - classifications and hierarchies - table building -PxWeb is specially designed for disseminating official statistics and handles this without the need for adaptations. + +PxWeb is specially designed for disseminating official statistics and handles +this without the need for adaptations. ### 2. You want an analytical tool and not just static tables + Your users can among other things: + - Filter variables - Pivot the table - Make their own extractions - Compare categories + Many open source tools only give the user static tables You want an automatic, metadata rich, built-in API for all your tables and datasets -Every time you publish a table in PxWeb, you also get an API. This is one of the main reasons economists, researchers, data scientists and financial journalists like PxWeb. +Every time you publish a table in PxWeb, you also get an API. This is one of the +main reasons economists, researchers, data scientists and financial journalists +like PxWeb. ### 3. You want mobile friendly data dissemination -Many argue that accessing official statistics and other multidimensional tables requires expert knowledge and a computer. We beg to differ. PxWeb provides users with an easy way to look up tables and data on the go using their mobile devices. + +Many argue that accessing official statistics and other multidimensional tables +requires expert knowledge and a computer. We beg to differ. PxWeb provides users +with an easy way to look up tables and data on the go using their mobile devices. ### 4. You want a format which is tailor made for statistics -[The Px-format](https://www.scb.se/en/services/statistical-programs-for-px-files/px-file-format/) is: + +[The Px-format](https://github.com/PxTools/PxFileFormat/blob/main/px-file-format.md) +is: + - Structured for statistics - Easy to version - Rich on metadata - Stable over time -- High perfomance. Px-files usually offer better performance than other, more complex, data formats such as SDMX. -Other solutions often require conversion to CSV/JSON without metadata, or complex data models. The px-format is what many described as developer friendly. It should be noted that for extremely large datasets, the px-format might be limited and you will need to establish another solution for that dataset. +- High perfomance + +Px-files usually offer better performance than other, more complex, data formats +such as SDMX. Other solutions often require conversion to CSV/JSON without +metadata, or complex data models. The px-format is what many described as +developer friendly. It should be noted that for extremely large datasets, the +px-format might be limited and you will need to establish another solution for +that dataset. ### 5. You want a stable, easy and low maintenance application -Pxweb is: + +Pxweb is: + - Easy to install - Easy to run - Lightweight and requires limited server capacity - Good performance -However, if you have a high number of datasets, manually producing it in PxEdit can be time consuming. To integrate with internal systems and to automate px-file production will require an IT investment. + +However, if you have a high number of datasets, manually producing it in PxEdit +can be time consuming. To integrate with internal systems and to automate +px-file production will require an IT investment. ### 6. You want open source code, no licence fees and a chance to influence further development -- PxWeb is open source and several public organisations such as Statistics Sweden and Statistics Norway are collaborating in its continual development. This ensures longevity and predictability. -- Through our web community you can track what new features and changes are coming in the next release. You can also discuss technical issues you might have and propose new features. You can also attend our annual international Px-meeting. -- The metadata rich PxWebApi makes it easy for you to develop customized applications if you have specific needs. -### 7. If you need a multilanguage dissemination system -Many public institutions and statistical agencies are required to support several languages. PxWeb supports this out of the box, whereas a lot of other applications requires more manual work, adaptations in existing publishing solutions etc. +- PxWeb is open source and several public organisations such as Statistics + Sweden and Statistics Norway are collaborating in its continual development. + This ensures longevity and predictability. +- Through our web community you can track what new features and changes are + coming in the next release. You can also discuss technical issues you might + have and propose new features. You can also attend our annual international Px-meeting. +- The metadata rich PxWebApi makes it easy for you to develop customized + applications if you have specific needs. + +### 7. If you need a multilanguage dissemination system +Many public institutions and statistical agencies are required to support +several languages. PxWeb supports this out of the box, whereas a lot of other +applications requires more manual work, adaptations in existing publishing +solutions etc. diff --git a/docs/PxWebApi/documentation/configuration.md b/docs/PxWebApi/documentation/configuration.md index 21cf47a..53fb2b1 100644 --- a/docs/PxWebApi/documentation/configuration.md +++ b/docs/PxWebApi/documentation/configuration.md @@ -1,4 +1,4 @@ -# Configuring PxWebApi 2 +# Customize PxWebApi 2 The configuration is split into several different files, each with a specific purpose. The main file you will need to modify is `appsettings.json`. @@ -202,7 +202,7 @@ Notes: ### Rate limiting API rate limiting settings are found under `IpRateLimiting`. You can read more -about the options [here](https://github.com/stefanprodan/aspnetcoreratelimit/wiki/ipratelimitmiddleware). +about the options in [IpRateLimitMiddleware](https://github.com/stefanprodan/aspnetcoreratelimit/wiki/ipratelimitmiddleware). The most important settings are `IpRateLimiting.GeneralRules.Period` and `IpRateLimiting.GeneralRules.Limit`, which control the time window and the number of calls allowed during that period. @@ -245,8 +245,8 @@ only have one database specified. The `log4net.config` file manages how PxWebApi 2.0 creates and stores logs. By default, logs are saved in the `/logs` directory. PxWebApi 2.0 relies on log4net for logging, which allows you to customize log levels, formats, and destinations. -For more information on how to configure log4net, please refer to the official -documentation [here](https://logging.apache.org/log4net/manual/configuration.html). +For more information on how to configure log4net, please refer to the [official +documentation](https://logging.apache.org/log4net/manual/configuration.html). ## Default selection diff --git a/docs/PxWebApi/documentation/installation.md b/docs/PxWebApi/documentation/installation.md index f624b68..d6b68bc 100644 --- a/docs/PxWebApi/documentation/installation.md +++ b/docs/PxWebApi/documentation/installation.md @@ -1,32 +1,52 @@ # Install PxWebApi 2 on your IIS server -This instruction guides you in how to install PxWebApi 2.0 on a clean install of IIS in the root of the _Default Web Site_ with PX file database. + +This instruction guides you in how to install PxWebApi 2.0 on a clean install of +IIS in the root of the _Default Web Site_ with PX file database. ## Prerequisites -- A supported Windows server with IIS installed you might want to enable _Dynamic Content Compression_ service for IIS to save some bandwidth. -- Have .NET 8 installed on the web server. It is recommended to install the [Windows Hosting Bundle Installer](https://dotnet.microsoft.com/en-us/download/dotnet/8.0). + +- A supported Windows server with IIS installed you might want to enable +_Dynamic Content Compression_ service for IIS to save some bandwidth. +- Have .NET 8 installed on the web server. It is recommended to install the +[Windows Hosting Bundle Installer](https://dotnet.microsoft.com/en-us/download/dotnet/8.0). ## Installation steps -- Download the [zip file for the latest release](https://github.com/pxtools/PxWebApi/releases/latest) from GitHub. Make sure to _Unblock_ it if its block by right clicking on it in _File Explorer_ and check the `Unblock` checkbox. + +- Download the [zip file for the latest release](https://github.com/pxtools/PxWebApi/releases/latest) + from GitHub. Make sure to _Unblock_ it if its block by right clicking on it in + _File Explorer_ and check the `Unblock` checkbox. - Extract the zip file to the location of your choice. - Copy the content of the `release` folder that you just extracted to `C:\inetpub\wwwroot`. -- Give the user `IIS APPPOOL\DefaultAppPool` `Modify` and `Write` permissions to the folder `C:\inetpub\wwwroot\wwwroot\ControllerStates`. -- Create a folder called `sq` under `C:\inetpub\wwwroot\wwwroot` and place you data in that folder. And give the user `IIS APPPOOL\DefaultAppPool` `Modify` and `Write` permissions. -- Create a folder called `Database` under `C:\inetpub\wwwroot\wwwroot` and place you data in that folder. And give the user `IIS APPPOOL\DefaultAppPool` `Modify` and `Write` permissions. +- Give the user `IIS APPPOOL\DefaultAppPool` `Modify` and `Write` permissions to + the folder `C:\inetpub\wwwroot\wwwroot\ControllerStates`. +- Create a folder called `sq` under `C:\inetpub\wwwroot\wwwroot` and place you + data in that folder. And give the user `IIS APPPOOL\DefaultAppPool` `Modify` + and `Write` permissions. +- Create a folder called `Database` under `C:\inetpub\wwwroot\wwwroot` and place + you data in that folder. And give the user `IIS APPPOOL\DefaultAppPool` + `Modify` and `Write` permissions. !!! info - If you do not have any data of your own you can download the - [tiny demo database](https://github.com/PxTools/PxWebApi/raw/refs/heads/main/docker/pxwebapi/Database/tinydatabase.zip) + If you do not have any data of your own you can download the + [tiny demo database](https://github.com/PxTools/PxWebApi/raw/refs/heads/main/docker/pxwebapi/Database/tinydatabase.zip) and use that as your database to test things out. - Generate the `Menu.xml` file with the following PowerShell command. + ```powershell Invoke-WebRequest -Uri 'http://localhost/api/v2/admin/database' -Method Put -Headers @{'API_ADMIN_KEY' = 'test'} ``` -- Wait for the `Menu.xml` file to be created. It can take some time depending on the size of your database. You can run the following PowerShell command to see if the file has been created. + +- Wait for the `Menu.xml` file to be created. It can take some time depending on + the size of your database. You can run the following PowerShell command to see + if the file has been created. + ```powershell Invoke-WebRequest -Uri 'http://localhost/api/v2/admin/database' -Method Get -Headers @{'API_ADMIN_KEY' = 'test'} | Select-Object -Expand Content ``` + You will get a JSON result. Look for a _Finished at_ `Message` + ```json { "State": "finished", @@ -51,15 +71,25 @@ This instruction guides you in how to install PxWebApi 2.0 on a clean install of ] } ``` -- Generate the search index. The search index is used by the API to answer questions about the content in the database. Generate it by running the following PowerShell command. + +- Generate the search index. The search index is used by the API to answer + questions about the content in the database. Generate it by running the + following PowerShell command. + ```powershell Invoke-WebRequest -Uri 'http://localhost/api/v2/admin/searchindex' -Method POST -Headers @{'API_ADMIN_KEY' = 'test'} ``` -- Wait for the search index to be created. It can take some time depending on the size of your database. You can run the following PowerShell command to see if the search index has been created. + +- Wait for the search index to be created. It can take some time depending on + the size of your database. You can run the following PowerShell command to see + if the search index has been created. + ```powershell Invoke-WebRequest -Uri 'http://localhost/api/v2/admin/searchindex' -Method Get -Headers @{'API_ADMIN_KEY' = 'test'} | Select-Object -Expand Content ``` + You will get a JSON result. Look for a _Finished at_ `Message` + ```json { "State": "finished", @@ -76,4 +106,7 @@ This instruction guides you in how to install PxWebApi 2.0 on a clean install of ] } ``` -- Verify that the api is running by opening up a browser on the web server and go to [http://localhost/api/v2/tables](http://localhost/api/v2/tables). This will result in a JSON response listing the contents of your database. + +- Verify that the api is running by opening up a browser on the web server and + go to [http://localhost/api/v2/tables](http://localhost/api/v2/tables). + This will result in a JSON response listing the contents of your database. diff --git a/docs/PxWebApi/documentation/user-guide.md b/docs/PxWebApi/documentation/user-guide.md index 45b798b..0cc1e03 100644 --- a/docs/PxWebApi/documentation/user-guide.md +++ b/docs/PxWebApi/documentation/user-guide.md @@ -1,4 +1,4 @@ -# PxWebApi 2 user guide +# PxWebApi 2 User Guide This guide describes how the PxWebApi works in general. Note that each organization that installs PxWebApi to make their database accessible can @@ -120,7 +120,8 @@ This will return the following response "tables": [ { "id": "13760", - "label": "13760: Labour force, employment, unemployment and man-weeks worked, by sex and age. Break and seasonally adjusted figures 2006M01-2025M09", + "label": "13760: Labour force, employment, unemployment and man-weeks + worked, by sex and age. Break and seasonally adjusted figures 2006M01-2025M09", "description": "", "updated": "2025-10-23T06:00:00Z", "firstPeriod": "2006M01", @@ -205,7 +206,8 @@ This will return the following response }, { "id": "14483", - "label": "14483: Population, by labour force status, age and sex. Break and seasonally adjusted figures 2009K1-2025K3", + "label": "14483: Population, by labour force status, age and sex. + Break and seasonally adjusted figures 2009K1-2025K3", "description": "", "updated": "2025-11-06T07:00:00Z", "firstPeriod": "2009K1", @@ -290,7 +292,8 @@ This will return the following response }, { "id": "13618", - "label": "13618: Population, by labour force status, age and sex. Break adjusted figures 2009-2024", + "label": "13618: Population, by labour force status, age and sex. + Break adjusted figures 2009-2024", "description": "", "updated": "2025-02-10T07:00:00Z", "firstPeriod": "2009", @@ -414,7 +417,8 @@ select a specific slice of the resulting list of tables: - `query` an query string that can filter out tables. - `pastDays` filters out tables in the result so only tables updated since the number of `pastDays`. -- `includeDiscontinued` if discontinued tables should be included or not in the result. +- `includeDiscontinued` if discontinued tables should be included or not in the + result. - `pageSize` All tables might not be included in the response depending on how many tables there is in the result and the `pageSize` sets how many tables are returned in the response. The default value might be changed by the organization. @@ -542,8 +546,8 @@ This would give us the following result Here you can see among other things the table title (`label`), the first and latest period in the time series (`firstPeriod` and `lastPeriod`), and which -variables are included (`variableNames`). `Paths` shows the table's location(s) in -the subject structure. +variables are included (`variableNames`). `Paths` shows the table's location(s) +in the subject structure. ## Metadata for the table @@ -568,7 +572,8 @@ This would result in the following response. "source": "Statistics Norway", "updated": "2025-02-25T07:00:00Z", "note": [ - "Until 1990 the figures correspond per 31 Desember. As from 1995 the figures correspond per 1 January." + "Until 1990 the figures correspond per 31 Desember. As from 1995 the + figures correspond per 1 January." ], "role": { "time": [ @@ -789,10 +794,12 @@ This would result in the following response. }, "note": { "1845": [ - "The sum of age groups or the sum of sexes can not be added up to the total for the years 1845 and 1855." + "The sum of age groups or the sum of sexes can not be + added up to the total for the years 1845 and 1855." ], "1855": [ - "The sum of age groups or the sum of sexes can not be added up to the total for the years 1845 and 1855." + "The sum of age groups or the sum of sexes can not be + added up to the total for the years 1845 and 1855." ] } }, @@ -909,7 +916,7 @@ selection expressions. To specify variable and values, use the following syntax: -``` +```sh valueCodes[variable-id]=value-code1, value-code2 ``` @@ -924,8 +931,8 @@ are given in the metadata response. In these cases, you need to add the paramter in `valueCodes` are the value codes in the selected codelist. You select the codelist in the following syntax -``` -codelist[variable-id]=codelist-id. +```sh +codelist[variable-id]=codelist-id ``` You can also specify the format you want the data in. See Output formats bellow. @@ -1010,7 +1017,7 @@ as specified in the metadata. The syntax of the experssion is: -``` +```sh top(numberOfValues, offset) ``` @@ -1028,7 +1035,7 @@ as specified in the metadata. The syntax of the experssion is: -``` +```sh bottom(numberOfValues, offset) ``` @@ -1046,7 +1053,7 @@ in the metadata. The syntax is in the form -``` +```sh range(value-code1, value-code2) ``` @@ -1059,7 +1066,7 @@ This expression selects all value code from the specified value code. The syntax is in the form -``` +```sh from(value-code1) ``` @@ -1073,7 +1080,7 @@ This expression selects all value code the bottom to the specified value code. The syntax is in the form -``` +```sh to(value-code1) ``` @@ -1104,6 +1111,7 @@ The API can provide the result in 7 main formats: You select the format you want the response to be in by setting the parameter `outputFormat`. ??? info "About JSON-stat v2" + JSON-stat is a format specifically developed to display statistical tables, that is, datasets with many dimensions. JSON-stat represents the values in the data cubes as a flat array (row-major order). It shows a tree structure, @@ -1111,11 +1119,11 @@ You select the format you want the response to be in by setting the parameter `o addition, contents variables, geographical variables, and time are assigned their own roles ('role') for easy access. - JSON-stat is used by many statistical agencies, as well as the APIs of - Eurostat and the World Bank. There are also ready-made libraries for, among - others: Javascript, Python, R, and Java. + JSON-stat is used by many statistical agencies, as well as the APIs of + Eurostat and the World Bank. There are also ready-made libraries for, among + others: Javascript, Python, R, and Java. - JSON-stat Toolkit is useful, especially for JavaScript. To understand the + JSON-stat Toolkit is useful, especially for JavaScript. To understand the structure of JSON-stat, it is recommended to try out the JSON-stat explorer. The toolkit also includes JSON-stat Command Line Conversion Tools. These flexible conversion tools such as jsonstat2csv provide a better-customized @@ -1130,14 +1138,14 @@ You select the format you want the response to be in by setting the parameter `o - `jsonstat2objarr` converts JSON-stat into an object of column-oriented arrays - `jsonstat2object` converts JSON-stat into a Google DataTable object - `jsonstatdice` creates JSON-stat from JSON-stat - - `sdmx2jsonstat` converts SDMX(JSON) into JSON-stat - convert OECD, UN and - IMF API-data to JSON-stat + - `sdmx2jsonstat` converts SDMX(JSON) into JSON-stat - convert OECD, UN and + IMF API-data to JSON-stat For JSON-stat examples in Javascript, see: - - - - - - . + - + - + - ### Additionally parameters @@ -1251,12 +1259,18 @@ should be in. Possible error codes if the query does not return a response: -- `400` – Bad request, errors in parameters. Type and title will often explain this in more detail. Here are some examples: - - "Non-existent variable" means that the variable name your are asking for does not exist. - - "Non-existent value" means that the value code you are asking for does not exist. - - "Too many cells selected" means that you are requesting too large a dataset. The API limit varies between organizations. -- `404` – File or directory not found. May be due to a misspelled URL or URL exceeding the limit of approximately 2100 characters. - - "Non-existent table" means you are querying for a table number that does not exist. +- `400` – Bad request, errors in parameters. Type and title will often explain + this in more detail. Here are some examples: + - "Non-existent variable" means that the variable name your are asking for + does not exist. + - "Non-existent value" means that the value code you are asking for + does not exist. + - "Too many cells selected" means that you are requesting too large a + dataset. The API limit varies between organizations. +- `404` – File or directory not found. May be due to a misspelled URL or URL + exceeding the limit of approximately 2100 characters. + - "Non-existent table" means you are querying for a table number that + does not exist. - `429` – Too many queries within a minute. The limit varies between organizations. Run large queries in sequence. Get the result of the first, before you run the next. diff --git a/docs/documentation/overview.md b/docs/documentation/overview.md index f590f3f..4a46523 100644 --- a/docs/documentation/overview.md +++ b/docs/documentation/overview.md @@ -1,8 +1,13 @@ # Overview -To set up the PxTools ecosystem, you must first install and configure PxWebApi 2.0. This API acts as the backend service for data access and management. Once PxWebApi 2.0 is running and properly configured, you can proceed to install PxWeb 2.0. During the configuration of PxWeb 2.0, you need to connect it to your PxWebApi instance and make any additional customizations required for your environment. +To set up the PxTools ecosystem, you must first install and configure PxWebApi +2.0. This API acts as the backend service for data access and management. Once +PxWebApi 2.0 is running and properly configured, you can proceed to install +PxWeb 2.0. During the configuration of PxWeb 2.0, you need to connect it to your +PxWebApi instance and make any additional customizations required for your environment. -The installation and configuration steps for both PxWebApi and PxWeb are described in detail in their respective documentation sections. +The installation and configuration steps for both PxWebApi and PxWeb are +described in detail in their respective documentation sections. ## PxWeb «Classic» vs 2.0 diff --git a/docs/px-file-format/px-2013.md b/docs/px-file-format/px-2013.md deleted file mode 100644 index e4200f4..0000000 --- a/docs/px-file-format/px-2013.md +++ /dev/null @@ -1,1215 +0,0 @@ -# PX file format 2013 -## Readers guide -### What this instruction covers -This manual describes how a PC-Axis PX file is constructed. -The manual is intended for people that wants to get a introduction of how to -use and to extend the Core part of the PC-Axis SDK. -The reader are not required have any type of PC-Axis experience to -understand the content but it helps. - -### How this guide is organized -The document is divided into two part. The first part defines how the PX file -structure works. The second part defined all keywords used in the PC-Axis -File Format. - -### Related documents -Earlier versions of the PC-Axis file format. - -## Getting started -We must first try to explain the basic structure of the PX-file. PX-files -consist of keywords that describes the contents or the data cube. Some -keywords are mandatory while some are optional. -Some keywords have an language option and some keywords have a sub key -and there is always at least one value specified for a keyword. -Some basic rules for how keywords are written -- The keyword is mandatory. -- Language is optional. -- Language is always written within square brackets. -- Language is always written immediately after the keyword. -- The sub key is optional. -- The sub key is always written within parentheses. -- The sub key is written is written after language if present otherwise it is written after the keyword. -- Value(s) are mandatory. -- Value(s) are always written after the equal sign. -- If there are multiple values each value is written within quotation marks and are separated by a comma sign. -- If there is only one value then it can be written without any quotation marks. -- Values(s) are delimited with quotation marks which means that a value itself cannot contain a quotation mark. -- The end of values (and the beginning of a new keyword) is always -marked with a semicolon. -- Longer texts are divided into several records (except for value text orvariable names which must in one line when in parentheses after a keyword). - -``` -KEYWORD[LANGUAGE](SUB-KEY)="VALUE_1","VALUE_2", …; -KEYWORD[LANGUAGE](SUB-KEY)=VALUE_1; -KEYWORD[LANGUAGE]="VALUE_1","VALUE_2", …; -KEYWORD (SUB-KEY)="VALUE_1","VALUE_2", …; -KEYWORD[LANGUAGE]=VALUE_1; -KEYWORD(SUB-KEY)=VALUE_1; -``` -The file itself is divided into two parts one metadata part and the data part. -The data part starts after the keyword `DATA`. -If the keyword `CHARSET` is missing it means that all texts are in DOS text -format, so that the same files can be used both in the DOS and the Windows -version of PC-Axis. -Starting with version 2005 it is possible to have more than one language in a -PX file. The second language is repeated for all necessary keywords. -`CONTENTS="Population";`, `CONTENTS[sv]=”Befolkning”;` etc. Which -languages are available are given in the keyword `LANGUAGES`. - -## Keywords -### Alphabetical list of keywords - -|Keyword |Mandatory|Multiplicity|Language dependent|Default value | -|-------------------|---------|------------|------------------|--------------| -|AGGREGALLOWED |No |0-1 |No |YES | -|ATTRIBUTE-ID |No |0-1 |No | | -|ATTRIBUTE-TEXT |No |0-1 |Yes | | -|ATTRIBUTES |No |0-? |No | | -|AUTOPEN |No |0-1 |No |NO | -|AXIS-VERSION |No |0-1 |No | | -|BASEPERIOD |No |0-? |Yes | | -|CELLNOTE |No |0-? |Yes | | -|CELLNOTEX |No |0-? |Yes | | -|CFPRICES |No |0-? |No | | -|CHARSET |No |0-1 |No | | -|CODEPAGE |No |0-1 |No |iso-8859-1 | -|CODES |Yes |0-16 |No | | -|CONFIDENTIAL |No |0-1 |No |0 | -|CONTACT |No |0-? |Yes | | -|CONTENTS |Yes |1 |Yes | | -|CONTVARIABLE |Yes |0-1 |Yes | | -|COPYRIGHT |No |0-1 |No |NO | -|CREATION-DATE |Yes |0-1 |No | | -|DATA |Yes |1 |No | | -|DATABASE |No |0-1 |Yes | | -|DATANOTE |No |0-? |Yes | | -|DATANOTECELL |No |0-1 |Yes | | -|DATANOTESUM |No |0-1 |Yes | | -|DATASYMBOL1 |No |0-1 |Yes |. | -|DATASYMBOL2 |No |0-1 |Yes |.. | -|DATASYMBOL3 |No |0-1 |Yes |... | -|DATASYMBOL4 |No |0-1 |Yes |.... | -|DATASYMBOL5 |No |0-1 |Yes |..... | -|DATASYMBOL6 |No |0-1 |Yes |...... | -|DATASYMBOLNIL |No |0-1 |Yes |- | -|DATASYMBOLSUM |No |0-1 |Yes | | -|DAYADJ |0-1 |0-? |Yes |NO | -|DECIMALS |Yes |1 |No | | -|DEFAULT-GRAPH |No |0-1 |No | | -|DESCRIPTION |No |0-1 |Yes | | -|DESCRIPTIONDEFAULT |No |0-1 |No | | -|DIRECTORY-PATH |No |0-1 |No | | -|DOMAIN |No |0-16 |No | | -|DOUBLECOLUMN |No |0-16 |Yes |NO | -|ELIMINATION |No |0-16 |Yes |NO | -|FIRST-PUBLISHED |No |0-1 |No | | -|HEADING |Yes |(0)-1 |Yes | | -|HIERARCHIES |No |0-1 |Yes | | -|HIERARCHYLEVELS |No |0-1 |Yes | | -|HIERARCHYLEVELSOPEN|No |0-1 |Yes | | -|HIERARCHYNAMES |No |0-1 |Yes | | -|INFO |No |0-1 |Yes | | -|INFOFILE |No |0-1 |Yes | | -|KEYS |No |0-16 |Yes | | -|LANGUAGE |Yes |1 |No | | -|LANGUAGES |No |0-1 |No | | -|LAST-UPDATED |No |0-1 |No | | -|LINK |No |0-1 |Yes | | -|MAP |No |0-1 |Yes | | -|MATRIX |Yes |1 |No | | -|META-ID |No |0-? |Yes | | -|NEXT-UPDATE |No |0-1 |No | | -|NOTE |No |0-? |Yes | | -|NOTEX |No |0-? |Yes | | -|OFFICIAL-STATISTICS|No |0-1 |No |NO | -|PARTITIONED |No |0-16 |Yes | | -|PRECISION |No |0-? |Yes | | -|PRESTEXT |No |0-16 |No |1 | -|PX-SERVER |No |0-1 |No | | -|REFPERIOD |No |0-1/0-? |Yes | | -|ROUNDING |No |0-1 |No | | -|SEASADJ |No |0-? |No |NO | -|SHOWDECIMALS |No |0-1 |No | | -|SOURCE |No |0-1 |Yes | | -|STOCKFA |No |0-? |Yes | | -|STUB |Yes |0-1 |Yes | | -|SUBJECT-AREA |Yes |1 |Yes | | -|SUBJECT-CODE |Yes |1 |No | | -|SURVEY |No |0-1 |Yes | | -|SYNONYMS |No |0-1 |No | | -|TABLEID |No |0-1 |No | | -|TIMEVAL |No |0-1 |Yes | | -|TITLE |Yes | 1 |Yes | | -|UNITS |Yes |1-? |Yes | | -|UPDATE-FREQUENCY |No |0-1 |No | | -|VALUENOTE |No |0-? |Yes | | -|VALUENOTEX |No |0-? |Yes | | -|VALUES |Yes |1-16 |Yes | | -|VARIABLE-TYPE |No |0-16 |No | | - - -### Mandatory keywords -These keywords are compulsory. The text (the contents belonging to the key -word) should be written on the same line as the keyword or on a line of its -own, always within quotation marks. -#### CONTENTS -**Type:** Text -**Length:** 256 characters -**Multiline:** No - -Information about the contents, which makes up the first part of a title -created when retrieving tables from PC-Axis. The text must not exceed 256 -characters (before 2002 only 100 chars). - -#### DATA -**Type:** integer/text -**Length:** N/A -**Multiline:** Yes - -The keyword `DATA` must be placed at the end of the file, followed by all the -data cells or if `KEYS` are used the variable values and all data cells that differ -from `0`. - -##### File without `KEYS` -After the key word follows all data cells that belong to the table. -In most cases the cells are written with one record per line in the table. The -number of records will thus be determined by the number of values in the -stub. The length of the records depends upon the number of values in the -heading, and also upon the size of figures. -Table cells that contain a dash, one, two, three, four, five or six dots should -be within quotation marks. -For data without keys it is possible to write all cells in just one record, -terminated by a semicolon. -PC-Axis accepts the delimiters comma, space, semicolon, tabulator. The -different delimiters are synonyms and can be mixed in the file. -Recommended delimiter is space. - -##### Files with `KEYS` -For every variable in the stub is indicated the value for the variable within -quotation marks, comma separated, followed by all data cells for that row -(no quotation marks, space separated). - -Whether the text from `VALUES` or from `CODES` are used for a variable is -indicated by the keyword `KEYS(”var”)=CODES` or -`KEYS(”var”)=VALUES`. It is possible to use `VALUES` from one variable -and `CODES` for another in the same file. -Rows that only contain 0 (zeros) are excluded from the file -One - six dots -Data that is missing is stored as one, two, three, four, five or six dots. -It is not possible to get a dot or two dots by excluding a value. Thus, you -cannot write `1,,2,3` in order to get `1,".",3,4` -For PC-Axis version prior to 2005 a dash is presented as 0 and saved as 0. -Thus, you cannot afterwards find out if the original value was - or 0. Starting -with 2005 PC-Axis keeps track on which cells are – and the keyword -`DATASYMBOLNIL` can be used to show something else in the table. -How the dots are shown on screen is determined by the keywords -`DATASYMBOL1`, etc. If these keywords are missing the presentation is -taken from PC-Axis language files. - -##### Number of decimals when a file is saved -The keyword `DECIMALS` determines the number of decimals to be saved. If -the file also contains the key word `PRECISION`, PC-AXIS saves as many -decimals as corresponds to the largest number specified by `DECIMALS` or -`PRECISION`. All cells are stored with the same number of decimals. - -#### DECIMALS -**Type:** integer [0, 15] -**Length:** Lines of 256 characters -**Multiline:** No - -The number of decimals in the table cells. 0 - 15. (0-6 if `SHOWDECIMALS` -is not included). Indicates how many decimals will be saved in the PC-Axis -file. Written without quotation marks. Compare `SHOWDECIMALS`. - -#### DESCRIPTION -**Type:** text -**Length:** N/A -**Multiline:** Yes - -If a file contains `DESCRIPTION`, when fetching from a disk, this text is used -to show the contents of the disk. C.f. `TITLE`. -If the user wants to save a file in PC-AXIS and writes a text that describes -the file, this text will be saved as `DESCRIPTION`. The text will be used to -show the contents of tables in the SUBJECT AREA. The text is not -presented as a note nor in any other way when the table is presented on the -screen unless the keyword `DESCRIPTIONDEFAULT` is used. In this case -the description is shown instead of the title. - -#### HEADING -***Type:*** text -***Length:*** 256 character per value -***Multiline:*** Yes - -At least one of the keywords `STUB` or `HEADING` must be included. Usually -both are included, as you choose one or several variables for the stub and the -heading, respectively. The keywords are followed by a list with the chosen -variables. The variables are within quotation marks and separated by -commas. If the list with the variables has to be divided up into several lines, -this should be done after a comma and not within the variable name. - -#### MATRIX -**Type:** text -**Length:** 20 -**Multiline:** No - -The name of the matrix. Is suggested as file name when the file is fetched. -(new length 2008). - -#### STUB -**Type:** text -**Length:** 256 characters per value -**Multiline:** Yes - -At least one of the keywords `STUB` or `HEADING` must be included. Usually -both are included, as you choose one or several variables for the stub and the -heading, respectively. The keywords are followed by a list with the chosen -variables. The variables are within quotation marks and separated by -commas. If the list with the variables has to be divided up into several lines, -this should be done after a comma and not within the variable name. - -#### SUBJECT-AREA -**Type:** text -**Length:** 256 characters -**Multiline:** No - -The name of the subject area in plain text, as shown in the menu "Select -subject area". The text must not exceed 256 characters (new length in 2008). - -#### SUBJECT-CODE -**Type:** text -**Length:** 20 characters -**Multiline:** No - -Subject area code. It is used to create files with tables available in PC-Axis. -The text must not exceed 20 characters (new length 2008). - -#### TITLE -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -The title of the table, reflecting its contents and variables. Is not needed if the -file contains `DESCRIPTION`, in that case the text belonging to description is -used. How the heading of a table will look depends on which variables the -user chooses; the heading thus created will then be saved as `TITLE`. -(Compare also `DESCRIPTIONDEFAULT`) -If the file contains `DESCRIPTION` the text for this key word will be used. - -#### UNITS -**Type:** text -**Length:** 256 characters -**Multiline:** No - -Unit text, e.g. ton, index. The text must not exceed 256 characters (new -length 2008). Compare `UNITS` for `CONTVARIABLE`. -When there is a `CONTVARIABLE` the keyword `UNITS` takes an index and -is repeated for every value for the contents variable. `UNITS("value")="tons"`. - -#### VALUES -**Type:** text -**Length:** 256 characters per value -**Multiline:** Yes - -The keyword `VALUES` occurs once for each variable in the table, and is -followed by the variable name in parentheses, within quotation marks. The -values will be in the same order as in the stub and heading, respectively. -They are within quotation marks and separated by commas. Each value name -must not exceed 256 characters. If the values have to be divided up into -several lines, this should be done after a comma and not within the value -name. See also the keyword `TIMEVAL` below. - -### Optional keywords -#### AGGREGALLOWED -**Type:** {YES,NO} -**Length:** N/A -**Multiline:** No - -If the contents of the table cannot be aggregated, contains for instance index -and average, the keyword `AGGREGALLOWED=NO;` is used to stop the -user from making a sum. If the keyword is missing aggregations are allowed - -#### ATTRIBUTE-ID -**Type:** text -**Length:** 256 characters per value -**Multiline:** Yes - -This keyword list the identities of all attributes. Indirectly it also specifies the -number of attributes. -Each attribute id is separate with a comma sign and it is written within -quotes. -The `ATTRIBUTE-ID` keyword must be written before the `ATTRIBUTES` -keyword and must exist if the `ATTRIBUTES` keyword is present. -The `ATTRIBUTE-ID` keyword is multilingual, that is you do not have to -specify it for each language. - -**Example** -``` -ATTRIBUTE-ID="ObsStatus","ObsConf"; -``` - -#### ATTRIBUTE-TEXT -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -This keyword specifies a textual representation of the attribute for -presentational purpose and it is optional. -Each attribute text is separate with a comma sign and written within quotes. -The `ATTRIBUTE-TEXT` keyword must occur after the `ATTRIBUTE-ID` -and it is also language dependent. The order of the texts should be the same -as for the order of the ids. - -**Example** -``` -ATTRIBUTE-TEXT="Observation status","Observation confidence"; -ATTRIBUTE-TEXT["sv"]="Status","Tillit"; -``` - -#### ATTRIBUTES -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -This keyword specifies all attributes for as single observation value. Each -attribute value is separated with a comma sign and written within quotes. The -attribute values must appear in the same order as they appeared in the -`ATTRIBUTE-ID` keyword. -The `ATTRIBUTES` keyword must be written after `ATTRIBUTE-ID` and the -`CODES` keyword. Which observation it refers to is given by the key which is -written within parenthesis after the keyword and before the equal sign. -The format of the key is one value code for each variable in the order -indicated by `STUB` and `HEADING` starting with the variables in the `STUB`. -If the attribute key is missing then this will indicate the default values for the -attributes for all measures that do not have any `ATTRIBUTES` specified. -This is also referred to as the default attributes. The default attributes should -always be specified in order to save space and unnecessary repetition. - -**Example** -``` -ATTRIBUTES("01","A01","2005")="A","P"; -ATTRIBUTES="A","F"; -``` - -#### AUTOPEN -**Type:** {YES,NO} -**Length:** N/A -**Multiline:** No -**Default value:** NO - -If the file is published on the Internet and the user selects a number of -variables and values it is possible to remove the windows “Select variables -and values” in PC-Axis and instead show the complete table in PC-Axis -when the file is downloaded. `AUTOPEN=YES;`. - -#### AXIS-VERSION -**Type:** text -**Length:** 20 characters -**Multiline:** No - -Version number for PC-Axis (new text length 2008). Is read and saved but -otherwise not used. - -#### BASEPERIOD -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -Base period for, for instance index series. Is shown with the footnote. If there -is a contents variable the keyword is repeated for each value of the contents -variable. - -#### CELLNOTE -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -Footnote for a single cell or a group of cells. Which cell it refers to is given -by values and variables. If a value is given as * the note refers to all values -for that variable. Only one value can be given for each variable. The values -are given in the variable order indicated by `STUB` and `HEADING`, starting -with `STUB`. - -**Example** -``` -CELLNOTE("*","*","Örebro", "1995")="Lekebergs kommun has been excluded from Örebro"; -``` - -#### CELLNOTEX -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -As CELLNOTE but shown mandatory as for NOTEX. - -#### CFPRICES -**Type:** {C,F} -**Length:** N/A -**Multiline:** No - -Indicates if data is in current or fixed prices. `C` is used for Current and `F` for -Fixed prices. Quotation marks must be used. `CFPRICES="C"` or -`CFPRICES("value")="C"`. - -#### CHARSET -**Type:** text -**Length:** 20 characters -**Multiline:** No - -`CHARSET=”ANSI”;` indicates that the texts in the file are written in -Windows format. If the keyword is missing it means that the texts in the file -are in DOS format. They will be translated by PC-Axis to Windows. This -keyword must appear in the beginning of the file before any texts that can -include characters outside A-Z, 0-9. - -#### CODEPAGE -**Type:** text -**Length:** 20 characters -**Multiline:** No - -Is used when creating XML format to get correct characters. Default `iso8859-1`. Max 20 chars. - -#### CODES -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -The key word `CODES` is used if a variable exists both in code and plain text. -The codes are written in the same way as `VALUES`. Not more than 256 -characters. - -#### CONFIDENTIAL -**Type:** integer -**Length:** 20 characters -**Multiline:** No -**Default value:** 0 - -Possibility to do some manipulation with the data in the data part of the file. -Is only suitable if the user cannot download the total file since the data can -be read in any editor. Max 20 chars. -The only other value that it can take is 1 and that uses the simple disclosure -control. Which is that it displays values of 1 to be 0 and values of 2 to be 3. - -#### CONTACT -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -States the person who can give information about the statistics. Is written in -the form name, organization, telephone, fax, e-mail. Several persons can be -stated in the same text string and are then divided by the #-sign. Is shown -with the footnote. If there is a contents variable the keyword is repeated for -each value `CONTACT("value")="xx"`. - -**Example** -``` -CONTACT="Maria Svensson, SCB, +4619176800, +4619176900, -maria.svensson@scb.se"; -``` - -#### CONTVARIABLE -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This is used to indicate that the table has two or more different contents. For -instance the contents Import and the contents Export. The variable name -must also be found either as `STUB` or `HEADING`. When a content variable -exists a number of keywords will be indexed: `DAYADJ`, `SEASADJ`, -`STOCKFA`, `UNITS`, `CONTACT`, `LASTUPDATED`, `REFPERIOD`, -`BASEPERIOD`, `CFPRICES`. The keyword `CONTVARIABLE` must proceed -the first keyword that will be indexed. - -#### COPYRIGHT -**Type:** text -**Length:** 20 characters -**Multiline:** No - -Copyright is given as `YES` or `NO`. If `COPYRIGHT=YES` the copyright -refers to the organization given in `SOURCE`. Is shown together with -footnotes. - -#### CREATION-DATE -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -Date when file was created. Written in format `CCYYMMDD hh:mm`, e.g. -`”19960612 14:20”`. Is shown together with footnotes. - -#### DATABASE -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -The name of the database from where the statistics is retrieved. Is shown -with the footnote. - -#### DATANOTE -**Type:** text -**Length:** 20 characters -**Multiline:** Yes - -The `DATANOTE` keyword is used to indicate that a note exists for a certain -element of the statistical cube -If no sub key is specified like below the data note * is valid for the hole -table. -`DATANOTE="*";` -If there is just one part sub key like below. Then the sub key must refer to a -variable and the data note is for that variable. -`DATANOTE("VARIABLE")="*";` -The example above states that the data note * should be displayed for -variable `VARIABLE`. -If the sub key is divided into two parts. Then the first part of the sub key -refers to a variable and the second part refers to a value for that variable. -`DATANOTE("VARIABLE","VALUE")="*";` -The example above states that the data note * should be displayed for value -`VALUE` for variable `VARIABLE`. -The keyword is multilingual so different data notes can be used for different -languages. -It is recommended to add the data note to the note text. E.g. if you have a -note on the time period 2010 it could look something like this in the PX file. - -``` -DATANOTE("tid","2010")="*"; -VALUENOTE("tid","2010")="* Preliminary results"; -``` - -#### DATANOTECELL -**Type:** text -**Length:** 20 characters -**Multiline:** No -This keyword needs information for which value for each variable it applies -and the symbol is presented together with the figure. CODES are used in the -parentheses to indicate the right value. * means all values for the variable. - -**Example** -``` -DATANOTECELL("*", "20", "*", "BE0101F2", "*")="Ae"; -``` - -#### DATANOTESUM -**Type:** text -**Length:** 20 characters -**Multiline:** No - -This keyword gives information which symbol is presented together with the -figure after a sum has been made consisting of differing datanote symbols. - -#### DATASYMBOL1, DATASYMBOL2, DATASYMBOL3, DATASYMBOL4, DATASYMBOL5, DATASYMBOL6 -**Type:** text -**Length:** 20 characters -**Multiline:** No - -This if used to indicate how a stored “.” is to be presented in a table. - -#### DATASYMBOLNIL -**Type:** text -**Length:** 20 characters -**Multiline:** No - -This is used to indicate how a stored “-” is to be presented in a table. The `–` -indicates that the figure is absolutely nil. - -#### DATASYMBOLSUM -**Type:** text -**Length:** 20 characters -**Multiline:** No - -This if used to indicate how a sum of differing numbers of dots will be -shown. The sum is stored as `“…….”`. - -#### DAYADJ -**Type:** {YES, NO} -**Length:** N/A -**Multiline:** No - -`DAYADJ=YES` means that data is adjusted e.g. to take into account the -number of working days. Default is `DAYADJ=NO` or -`DAYADJ("value")=NO`. - -#### DEFAULT-GRAPH -**Type:** integer -**Length:** 1-10 -**Multiline:** No - -This keyword is read and saved in the PX-file but not shown in PC-axis. - -#### DESCRIPTIONDEFAULT -**Type:** {YES, NO} -**Length:** N/A -**Multiline:** No - -For some languages it is difficult to build a table title dynamically. The -keyword `DESCRIPTIONDEFAULT=YES;` means that the text after -keyword Description will be used as title for the table. - -#### DIRECTORY-PATH -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-axis. - -#### DOMAIN -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -Can occur once for each variable. Is used to determine which value sets are -of interest, and thus which aggregation lists can be used. (New text length -2008). - -#### DOUBLECOLUMN -**Type:** {YES, NO} -**Length:** N/A -**Multiline:** No - -This keyword is used to get code and text in separate columns for the -specified variable `DOUBLECOLUMN(”region”)=YES;`. On screen it only -has effect if the user selects presentation in matrix format. - -#### ELIMINATION -**Type:** {YES, NO, text} -**Length:** 256 characters -**Multiline:** Yes - -States if and how a variable may be eliminated in a table. If the key word is -written as `ELIMINATION("variable name")="value name"` this value will be -used as an elimination value if the user does not select the variable to the -table. If the key word is written `ELIMINATION("variable name")=YES` this -means that the variable will be eliminated by the summing up of all the -values for that variable in the file. - -#### FIRST-PUBLISHED -**Type:** {YES, NO, text} -**Length:** 256 characters -**Multiline:** Yes - -The date when the data cube was first published in the format `CCYYMMDD hh:mm`. - -**Example** -``` -FIRST-PUBLISHED=20130224 20:55 -``` - -#### HIERARCHIES -**Type:** text -**Length:** Lines of 256 characters for each value -**Multiline:** Yes - -**Example 1** -``` -HIERARCHIES(“Country”)="parent","parent":"child",... -``` - -**Example 2** -``` -HIERARCHIES("Country")=”E25","E25":"E15","E15":"E12", -"E12":"AT","E12":"BE","E12":"FI","E12":"FR","E12":"DE", -"E12":"GR","E12":"IR","E12":"IT","E12":"LU","E12":"NL", -"E12":"PT","E12":"ES","E15":"DK","E15":"SW","E15":"UK", -"E25":"E10","E10":"CY","E10":"CZ","E10":"EE","E10":"HU", -"E10":"LV","E10":"LT","E10":"MT","E10":"PL","E10":"SK", "E10":"SI"; -``` - -#### HIERARCHYLEVELS -**Type:** integer -**Length:** N/A -**Multiline:** No - -Indicate the number of levels existing for a symmetrical tree. - -**Example** -``` -HIERARCHYLEVELS("Country")=4 -``` - -#### HIERARCHYLEVELSOPEN -**Type:** integer -**Length:** N/A -**Multiline:** No - -Indicate how the tree is to be displayed when the tree is shown for the first -time - -**Example** -``` -HIERARCHYLEVELSOPEN("Country")=1 -``` -the first level is open. - -#### HIERARCHYNAMES -**Type:** text -**Length:** Lines of 256 characters per name -**Multiline:** Yes - -To give names to the levels in a symmetrical tree. - -**Example** -``` -HIERARCHYNAMES("Country")="NameOfLevel1","NameOfLevel2",.. -``` - -#### INFO -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-axis. - -#### INFOFILE -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -Name of a file containing more information for the statistics. If the keyword -exists in the file a new button is shown in the toolbar and the user can click -for more information. Depending on the file type and to which program the -type is associated the corresponding program is started and the information -shown. (Word for .DOC, Notepad for .TXT etc). - -#### KEYS -**Type:** {VALUES, CODES} -**Length:** N/A -**Multiline:** No - -If this keyword is used it must occur as many times as there are variables in -the stub. It contains the name of the variable and whether the key is taken -from `VALUES` or `CODES`. - -**Example** -``` -KEYS("age")=VALUES; -KEYS("region")=CODES; -``` -When it is used all data rows start with the Value/code of the variables in the -stub. See Description of `DATA`. - -#### LANGUAGE -**Type:** text -**Length:** 2 characters -**Multiline:** No -The language used in the PC-Axis file (2 chars), sv for Swedish, en for -English etc. Compare language codes for text files. If the keyword is used, -the words for “and” and “by” are read from the text file of that language. -Otherwise these words are read from the text file of the language in which -the program is running. - -#### LANGUAGES -**Type:** text -**Length:** 2 characters per language -**Multiline:** Yes - -If more than one language in the PC-Axis file then all languages are -mentioned here (2 chars each) - -**Example** -``` -LANGUAGES="en","sv"; -``` - -#### LAST-UPDATED -**Type:** text -**Length:** 256 characters -**Multiline:** No - -Date and time for latest update format `CCYYMMDD hh:mm`. Example -`”19960528 11:35”`. Is also used in Aremos file format. The date is not -updated in PC-AXIS when changes are made to the table. If there is a -contents variable it is written as `LAST-UPDATED("value")= 19990318 18:12` - -#### LINK -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-axis. - -#### MAP -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -Used for a geographic variable for which maps can be made (new text length -2008). - -**Example** -``` -MAP("region")="Sweden_municipality"; -``` - -#### META-ID -**Type:** text -**Length:** 256 -**Multiline:** No - -The `META-ID` keyword is used to reference a external meta information -about a table, variable or value. -I there is no subkey specified the `META-ID` refers to the cube -`META-ID="RT:12";` -If there is just one part sub key like below. Then the sub key must refer to a -variable and the data note is for that variable. -`META-ID("VARIABLE")="V:167";` -The example above states that the reference id for variable `VARIABLE` is -`V:167`. -If the sub key is divided into two parts. Then the first part of the sub key -refers to a variable and the second part refers to a value for that variable. -`META-ID("VARIABLE","VALUE")=VAL:232;` -The example above states that the reference id for value `VALUE` for variable -`VARIABLE` is `VAL:232`. - -#### NEXT-UPDATE -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-axis. - -#### NOTE -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -Contains a footnote which is showed in the statistical databases if the user -demands it. In PC-AXIS it is shown if the user presses F7. The footnote may -either refer to the entire table or to a table variable. In the latter case the key -word must be followed by the variable name in parentheses. - -#### NOTEX -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -Contains a note which is always shown in the statistical databases. In PCAXIS the note is shown automatically, before the table is presented on the -screen. The note may either refer to the entire table or to a table variable. In -the latter case the key word should be followed by the variable name in -parentheses. - -#### OFFICIAL-STATISTICS -**Type:** {YES, NO} -**Length:** N/A -**Multiline:** No - -Indicates if the data table is included in the official statistics of the -organization. - -#### PARTITIONED -**Type:** complex text -**Length:** N/A -**Multiline:** Yes -This is used to partition a variable into levels, for instance -``` -PARTITIONED("region")="municipality",1,4; -PARTITIONED("region")="subarea",5; -``` -states that the first four positions for the regional values contain the -municipality code, and that the subarea code starts in position 5. Thus the -values for the variable region after the key word `VALUES` must be written in -code, not plain text. Max 3 levels can be used, each gives start position and -length except for the last level where length is implied as rest of the code. - -#### PRECISION -**Type:** integer -**Length:** N/A -**Multiline:** No -Can occur for single values. Determines that the value shall be presented -with a number of decimals that differs from the keyword -`SHOWDECIMALS`. Is to be written as -`PRECISION("variable name","value name")=n` where n is a figure between `1` -and `6`. The number of decimals for precision must be higher than the number -of decimals for `SHOWDECIMALS` to have any effect. - -#### PRESTEXT -**Type:** integer -**Length:** N/A -**Multiline:** No - -From PX file format version 2010 and later the definition of PRESTEXT is -changed the prior versions defines it as: -States if texts or codes are shown for the keyword `VALUES`. Normally a file -is created so that texts are found after the keyword `VALUES` and codes after -the keyword `CODES`. This is equivalent to `PRESTEXT("variable name")=1;` -which is the default. If a user changes presentation from texts to codes and -saves the file the value codes will be saved after the keyword `VALUES` and -value texts after the keyword `CODES`. In this case the keyword `PRESTEXT` is -written as `PRESTEXT("variable name")=0`. This enables PC-Axis to know if -it is necessary to switch to codes if aggregation is selected. The user can also -decide to show both codes and texts for a value and in this case the keyword -is saved as `PRESTEXT("variable name")=2` or `PRESTEXT("variable name")=3`. `PRESTEXT` becomes 2 if it originally was 1 and 3 if it originally -was 0. -In the new definition the `PRESTEXT` is that it is an integer value between 0- -3 that describes how the value should be presented in a user interface. The -values text should always be defined by the `VALUES` keyword and the -codes should always be defined by the `CODES` keyword. -- 0 - Only the value code should be displayed. -- 1 - Only the value text should be displayed. -- 2 - Both code and value should be displayed and the order should be -the code and then the value text. -- 3 - Both code and value should be displayed and the order should be -the value text then the value code. - -**Example** -``` -VALUES("region")="Albania","Austria",… -… -CODES("region")="AL","AT",… -… -PRESTEXT("region")=2 -Since the PRESTEXT is set to 2 the values would be presented as -AL Albania -AT Austria -… -``` - -#### PX-SERVER -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-axis. - -#### REFPERIOD -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -Text with information on the exact period for the statistics. Is shown with the -footnote. If there is a contents variable the keyword is repeated for each -value of the contents variable. - -#### ROUNDING -**Type:** integer -**Length:** 0-1 -**Multiline:** Yes - -If rounding is missing then rounding will be done in accordance with -information in the pcax2000.ini file. If the keyword is missing then the -decimal rule in pcax2000.ini is used. -- Rounding = `0` means that .5 is rounded up if the previous figure is odd, 1.5 -becomes 2. -- Rounding = `1` means that .5 is always rounded up. 0.5 becomes 1 and 1.5 -becomes 2. - -#### SEASADJ -**Type:** {YES, NO} -**Length:** N/A -**Multiline:** No - -`SEASADJ=YES` means that data is seasonally adjusted. Default is -`SEASADJ=NO` or `SEASADJ("value")=NO`. - -#### SHOWDECIMALS -**Type:** integer -**Length:** N/A -**Multiline:** No - -The number of decimals to be shown in the table, 0-6. Must be the same or -smaller than the number stored as indicated by the keyword `DECIMALS`. If -`SHOWDECIMALS` is not stated in the file the number stated by -`DECIMALS` will be used. - -#### SOURCE -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -States the organization which is responsible for the statistics. Is shown with -the footnote. - -#### STOCKFA -**Type:** {S, F, A} -**Length:** N/A -**Multiline:** No - -Indicates if data is stock, flow or average. The used characters `S` (stock), `F` -(flow) and `A` (average) must be within quotation marks. `STOCKFA="S"` or -`STOCKFA("value")="S"`. - -#### SURVEY -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-axis. Is -shown on information screen in PX-web if installation parameter true. - -#### SYNONYMS -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This is used for search in PX-Web. If the table concerns CPI the synonym -can be “Inflation”. Several words can be included within “ “ and the total line -can be max 256 chars. - -#### TABLEID -**Type:** text -**Length:** 256 characters -**Multiline:** Yes -A text that is the identity of the table. - -#### TIMEVAL -**Type:** text -**Length:** N/A -**Multiline:** Yes - -New keyword in version 1.5 to enable the use of time series. After the -keyword is the name of the time variable given, e.g. `TIMEVAL(”time”)`. -`TLIST` gives information on timescale and timeperiods. The time periods -must be consecutive. -If the table contains the time periods `1994`, `1995`, `1996` `TIMEVAL` can be -written in this way: -``` -TIMEVAL(”time”)=TLIST(A1, ”1994”-”1996”); -``` -or -``` -TIMEVAL(”time”)=TLIST(A1), ”1994”, ”1995”,"1996”; -``` -The following formats are used: -- `A1` for annual statistics written as `CCYY` (`C` for century, `Y` for year) -- `H1` for halfyear in format `CCYYH`, where `H` is 1 or 2 -- `Q1` for quarterly data written `CCYYQ`, where `Q` is 1 - 4. -- `M1` for monthly statistics written `CCYYMM` -- `W1` for weekly data written `CCYYWW` - -`TIMEVAL` is used in PC-AXIS version 1.7 when converting to Aremos and -Gesmes/Ecoser format. It is also used for start and stop time in list of -contents in HTML-format. -The variable time can be used both after the keyword `VALUES` and after -`TIMEVAL`. If both exist `TIMEVAL` must be placed after `VALUES`. If only -`TIMEVAL` exists `VALUES` for time are created as follows: -Time scale time periods shown as -``` -A1 1995, 1996, 1997 -H1 1995H1, 1995H2, 1996H1 -Q1 1995Q1, 1995Q2, 1995Q3 -M1 1995M01, 1995M02, 1995M03 -W1 1995W01, 1995W02, 1005W03 -``` - -#### UPDATE-FREQUENCY -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-axis. - -#### VALUENOTE -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -A footnote for separate variable values. Should be written with the variable -name and the value names in parentheses. - -#### VALUENOTEX -**Type:** text -**Length:** Lines of 256 characters -**Multiline:** Yes - -Mandatory footnote for single values for a variable. Is written with the -variable name and the value name in parentheses. Is shown the same way as -`NOTEX`. - -#### VARIABLE-TYPE -**Type:** text -**Length:** 256 characters -**Multiline:** Yes - -This keyword is read and saved in the PX-file but not shown in PC-Axis. - -### Recommended order of the keywords -Some keywords must be written before some other keywords e.g. `STUB` and -`HEADING` must precede `VALUES` and `CODES`. Here follows a list of -recommended order for how keywords should be written I PX-files though -applications should not depend on that this order is used. - -- CHARSET -- AXIS-VERSION -- CODEPAGE -- LANGUAGE -- LANGUAGES -- CREATION-DATE -- NEXT-UPDATE -- PX-SERVER -- DIRECTORY-PATH -- UPDATE-FREQUENCY -- TABLEID -- SYNONYMS -- DEFAULT-GRAPH -- DECIMALS -- SHOWDECIMALS -- ROUNDING -- MATRIX -- AGGREGALLOWED -- AUTOPEN -- SUBJECT -- CODE -- SUBJECT-AREA -- CONFIDENTIAL -- COPYRIGHT -- DESCRIPTION -- TITLE -- DESCRIPTIONDEFAULT -- CONTENTS -- UNITS -- STUB -- HEADING -- CONTVARIABLE -- VALUES -- TIMEVAL -- CODES -- DOUBLECOLUMN -- PRESTEXT -- DOMAIN -- VARIABLE-TYPE -- HIERARCHIES -- HIERARCHYLEVELS -- HIERARCHYLEVELSOPEN -- HIERARCHYNAMES -- MAP -- PARTITIONED -- ELIMINATION -- PRECISION -- LAST-UPDATED -- STOCKFA -- CFPRICES -- DAYADJ -- SEASADJ -- UNITS -- CONTACT -- REFPERIOD -- BASEPERIOD -- DATABASE -- SOURCE -- SURVEY -- LINK -- INFOFILE -- FIRST-PUBLISHED -- META-ID -- OFFICIAL-STATISTICS -- INFO -- NOTEX -- NOTE -- VALUENOTEX -- VALUENOTE -- CELLNOTEX -- CELLNOTE -- DATASYMBOL1 -- DATASYMBOL2 -- DATASYMBOL3 -- DATASYMBOL4 -- DATASYMBOL5 -- DATASYMBOL6 -- DATASYMBOLSUM -- DATASYMBOLNIL -- DATANOTECELL -- DATANOTESUM -- DATANOTE -- KEYS -- ATTRIBUTE-ID -- ATTRIBUTE-TEXT -- ATTRIBUTES -- PRECISION -- DATA diff --git a/docs/tools/pxweb.md b/docs/tools/pxweb.md deleted file mode 100644 index 208cdbc..0000000 --- a/docs/tools/pxweb.md +++ /dev/null @@ -1,12 +0,0 @@ -# PxWeb -PxWeb is used for publishing statistics in a database at the web and is since 1 January 2016 free of charge for government agencies and municipalities, international NSI:s and international organisations of statistics. - -## PxWeb 2 - -Development ... see the [project repository](https://github.com/PxTools/PxWeb2) - -## Classic PxWeb - -Still maintained ... see the [project repository](https://github.com/statisticssweden/PxWeb) - -1. Test diff --git a/mkdocs.yml b/mkdocs.yml index b28a20c..1924005 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,7 +2,7 @@ site_name: PxTools site_url: https://www.pxtools.net/ repo_url: https://github.com/PxTools/pxtools.github.io edit_uri: ./edit/main/docs -copyright: Copyright © 2025 Statistics Sweden and Statistics Norway +copyright: Copyright © 2026 Statistics Sweden and Statistics Norway nav: - Home: index.md @@ -11,7 +11,6 @@ nav: - Is PxWeb right for you?: PxWeb2/project/solution.md - Demo: PxWeb2/project/demo.md - Plans: PxWeb2/project/plans.md - - Documentation: - Overview: documentation/overview.md - Getting Started: @@ -20,16 +19,12 @@ nav: - Customization: - Customize PxWebApi 2: PxWebApi/documentation/configuration.md - Customize PxWeb 2: PxWeb2/documentation/customization.md - - Demo: - - Try PxWeb 2 with Docker: PxWeb2/documentation/docker.md - - Px File Format: - - Version 2013: px-file-format/px-2013.md - User Guides: - PxWebApi 2 User Guide: PxWebApi/documentation/user-guide.md - Other: + - Try PxWeb 2 with Docker: PxWeb2/documentation/docker.md - Changes in savedquery usage: Other/changes-in-savedquery-usage.md - - Tools: - - PxWeb: tools/pxweb.md + - PX file format 2013: https://github.com/PxTools/PxFileFormat/blob/main/px-file-format.md extra_css: - stylesheets/extra.css From 47639ac19ba3d45c10f2044916519927e002ac3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85sa=20Arrh=C3=A9n?= Date: Tue, 19 May 2026 14:07:23 +0200 Subject: [PATCH 03/13] Update demo.md --- docs/PxWeb2/project/demo.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/PxWeb2/project/demo.md b/docs/PxWeb2/project/demo.md index bec03fb..47e6231 100644 --- a/docs/PxWeb2/project/demo.md +++ b/docs/PxWeb2/project/demo.md @@ -4,10 +4,14 @@ - [The latest version](https://pxweb2.pages.dev/en/) -## PxWeb at Statistics Norway +## PxWeb2 at Statistics Norway - [Statbank Norway](https://www.ssb.no/statbank/) +## PxWeb2 at Statistics Sweden + +- [Statistical Database](https://statistikdatabasen2.scb.se/en/) + ## Try it with your own data You are free to test PxWeb2 with your own data. It works both with px-files and From d8b4cf0b2ef0fcd252a66522536e02ad00d12f89 Mon Sep 17 00:00:00 2001 From: Rune Johansen Date: Tue, 19 May 2026 14:40:40 +0200 Subject: [PATCH 04/13] docs: add parquet chapter (#58) * docs: add parquet chapter * docs: update Parquet section with new issues and fixes * Update README.md https://github.com/squidfunk/mkdocs-material/issues/8478 * docs: update Parquet section to indicate beta status and add known issues --- README.md | 2 +- docs/PxWebApi/documentation/user-guide.md | 94 ++++++++++++++++++++++- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c21f925..c5edaca 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ this site ### Docker ``` sh -docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-material +docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-material:9.6.20 ``` Browse diff --git a/docs/PxWebApi/documentation/user-guide.md b/docs/PxWebApi/documentation/user-guide.md index 0cc1e03..d4becc5 100644 --- a/docs/PxWebApi/documentation/user-guide.md +++ b/docs/PxWebApi/documentation/user-guide.md @@ -1106,10 +1106,12 @@ The API can provide the result in 7 main formats: - `xlsx` (Excel) - `html` - `json-px` -- `parquet` +- `parquet` (beta) You select the format you want the response to be in by setting the parameter `outputFormat`. +### JSON-stat v2 + ??? info "About JSON-stat v2" JSON-stat is a format specifically developed to display statistical tables, @@ -1147,6 +1149,94 @@ You select the format you want the response to be in by setting the parameter `o - - +### Parquet (beta) + +New in this API is the [Apache Parquet](https://parquet.apache.org/) output format. + +We create a column for each varible and separate colums for `timestamp`, `value` +and `value_symbol`. When more content variables are selected the `value` and +`value_symbol` colums will be renamed with the `ContentsCode_` prefix. + +Inspecting this request with [parqeye](https://github.com/kaushiksrini/parqeye) +shows the following views. + +Request + +```sh +https://data.qa.ssb.no/api/pxwebapi/v2/tables/04475/data?lang=en&outputFormat=parquet&valuecodes[Tid]=2025K1,2025K2,2025K3,2025K4&valuecodes[ContentsCode]=ForbrukVareliter&valuecodes[Alkohol]=03 +``` + +Visualize + +```sh + type of beverage quarter timestamp value value_symbol +──────┬───────────────────────────────────────────────────────────────────────── +1 │ "03" "2025K1" 2025-01-01 00:00:00 54185.0 NULL +2 │ "03" "2025K2" 2025-04-01 00:00:00 73012.0 NULL +3 │ "03" "2025K3" 2025-07-01 00:00:00 65806.0 NULL +4 │ "03" "2025K4" 2025-10-01 00:00:00 67327.0 NULL +``` + +Metadata + +```sh +╭────────────────────────────────File Metadata─────────────────────────────────╮ +│ Format version 1 │ +│ Created by Parquet.Net version 4.25.0 (build 687fbb462e94eddd1dc5a0aa26 +│ Rows 4 │ +│ Columns 5 │ +│ Row groups 1 │ +│ Size (raw) 411 B │ +│ Size (compressed) 394 B │ +│ Compression ratio 1.04x │ +│ Codecs (cols) SNAPPY(5) │ +│ Encodings BIT_PACKED, PLAIN, RLE │ +│ Avg row size 102 B │ +╰──────────────────────────────────────────────────────────────────────────────╯ +``` + +Schema + +```sh +╭───────Schema Tree───────╮╭─────────────────Column Statistics─────────────────╮ +│└─ root ││Repetition Physical Compressed Uncompressed │ +│ ├─ type of beverage ││OPTIONAL BYTE_ARRAY 71 B 67 B │ +│ ├─ quarter ││OPTIONAL BYTE_ARRAY 90 B 99 B │ +│ ├─ timestamp ││REQUIRED INT96 111 B 125 B │ +│ ├─ value ││REQUIRED DOUBLE 93 B 93 B │ +│ └─ value_symbol ││OPTIONAL BYTE_ARRAY 29 B 27 B │ +│ ││ │ +╰───────Leaf, Group───────╯╰───────────────────────────────────────────────────╯ +``` + +#### DuckDB example + +```sh +% duckdb +DuckDB v1.5.2 (Variegata) +Enter ".help" for usage hints. +memory D SELECT * FROM read_parquet('https://data.qa.ssb.no/api/pxwebapi/v2/tables/04475/data?lang=en&outputFormat=parquet&valuecodes[Tid]=2025K1,2025K2,2025K3,2025K4&valuecodes[ContentsCode]=ForbrukVareliter&valuecodes[Alkohol]=03'); +┌──────────────────┬─────────┬─────────────────────┬─────────┬──────────────┐ +│ type of beverage │ quarter │ timestamp │ value │ value_symbol │ +│ varchar │ varchar │ timestamp │ double │ varchar │ +├──────────────────┼─────────┼─────────────────────┼─────────┼──────────────┤ +│ 03 │ 2025K1 │ 2025-01-01 00:00:00 │ 54185.0 │ NULL │ +│ 03 │ 2025K2 │ 2025-04-01 00:00:00 │ 73012.0 │ NULL │ +│ 03 │ 2025K3 │ 2025-07-01 00:00:00 │ 65806.0 │ NULL │ +│ 03 │ 2025K4 │ 2025-10-01 00:00:00 │ 67327.0 │ NULL │ +└──────────────────┴─────────┴─────────────────────┴─────────┴──────────────┘ +``` + +#### Parquet Known issues + +!!! warning + We may have to change the format to fix some of these issues + +- [x] [Multiple contents and time odering bug](https://github.com/PxTools/PxWebApi/issues/511) +- [ ] [Parquet seralizer throws exception on TimeScaleType](https://github.com/PxTools/PxWebApi/issues/595) +- [ ] [Consider switching from `DataField` to `DecimalDataField`](https://github.com/PxTools/PxWebApi/issues/596) +- [ ] [Parquet does not work in Onyxia Data Explorer](https://github.com/PxTools/PxWebApi/issues/597) + ### Additionally parameters Some of the output format can take extra parameters that determines how the @@ -1290,3 +1380,5 @@ Possible error codes if the query does not return a response: to include all newer periods the next time you run it. In that case, you must adjust the URL to `valueCode[Time]=*` or `from(start time)`, alternatively `top(number of newest periods)`. + +- See also [knows issues under parquet](#parquet-known-issues) output format From b019360c615921ed1856d9c3f2c02eabe646f2a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85sa=20Arrh=C3=A9n?= Date: Wed, 20 May 2026 15:12:50 +0200 Subject: [PATCH 05/13] Update demo.md --- docs/PxWeb2/project/demo.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/PxWeb2/project/demo.md b/docs/PxWeb2/project/demo.md index 47e6231..8a27c37 100644 --- a/docs/PxWeb2/project/demo.md +++ b/docs/PxWeb2/project/demo.md @@ -4,11 +4,11 @@ - [The latest version](https://pxweb2.pages.dev/en/) -## PxWeb2 at Statistics Norway +## PxWeb 2 at Statistics Norway - [Statbank Norway](https://www.ssb.no/statbank/) -## PxWeb2 at Statistics Sweden +## PxWeb 2 at Statistics Sweden - [Statistical Database](https://statistikdatabasen2.scb.se/en/) From 131ee268cd957ee61efb7f66d5e10e37988b14bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85sa=20Arrh=C3=A9n?= Date: Wed, 20 May 2026 15:19:45 +0200 Subject: [PATCH 06/13] Revise project plans with new features and updates Updated plans for PxWeb 2.x with new features and improvements. --- docs/PxWeb2/project/plans.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/PxWeb2/project/plans.md b/docs/PxWeb2/project/plans.md index a96f63a..5e3cf84 100644 --- a/docs/PxWeb2/project/plans.md +++ b/docs/PxWeb2/project/plans.md @@ -19,11 +19,12 @@ - improve performance and layout - sticky table head and first column - hide empty rows +- show links only to translated tables - manual pivoting - search in beginning of words in variable list - chose to show code or text -- select multile check boxes at once -- advances settings for file export +- select multible check boxes at once +- advanced settings for file export - additional file formats - loading symbol - rezisable navigation drawer @@ -31,7 +32,11 @@ ### Graph tool -- Implement [Apache Echarts](https://echarts.apache.org/en/index.html) +- Implement four types of graphs i apache Echarts [Apache Echarts](https://echarts.apache.org/en/index.html) + - Bar chart + - Horisontal bar chart + - Line chart + - population pyramide ## Further plans for PxWeb 2.x @@ -50,6 +55,7 @@ ### PxWeb 2 +- Connection to MetaID so you can link to metainformation at the tab Definitions - Open table card in new tab (right click) - Show PxWebApi 2 in PxWeb 2 - Improved search at start page (search for variables, values and content in From 6cdf61d3810897258c15f644187af5511b5fc6c4 Mon Sep 17 00:00:00 2001 From: Sjur Sutterud Sagen Date: Fri, 22 May 2026 10:00:38 +0200 Subject: [PATCH 07/13] Add documentation for definitionstab customization (#46) * Add documentation for definitions --- docs/PxWeb2/documentation/customization.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/PxWeb2/documentation/customization.md b/docs/PxWeb2/documentation/customization.md index dfcf4a6..6f5ff45 100644 --- a/docs/PxWeb2/documentation/customization.md +++ b/docs/PxWeb2/documentation/customization.md @@ -15,6 +15,7 @@ You can: - Limit table sizes. - Control how and where languages appear in URLs. - Hide variables from the variable filter. +- Customize Definitions panel content. - Customize start page text and footer links (examples included below). - Define characters used for missing values. @@ -532,6 +533,15 @@ Edit these CSS variables in `theme/variables.css`: Do not alter `--px-border-radius-none` or `--px-border-radius-full` unless you know the side effects (they are used for logical extremes). +### Customize Definitions panel content + +The Definitions panel in the right sidebar on the table page, can be +customized by changing translation strings in the "presentation_page.main_content.about_table.definitions" section of the relevant `locales//translation.json` file. + +If the strings inside the "about_statistics" and "metadata" sections are empty, the Definitions panel will only show the primary links from the API. The keys inside the "about_statistics" will add a header and text description to the primary links section. + +If the API also returns variable definitions, the keys inside the "metadata" section will add a header and text description to the variable definitions section. + ### Change the text and related links on the startpage, table page and in the footer The `content.json` file defines customizable text and links that appear in From 0c0793278b65148b6bee109de3b3dc93cdea0eb6 Mon Sep 17 00:00:00 2001 From: Bjarte Mellemstrand <95030573+BjarteMell@users.noreply.github.com> Date: Tue, 26 May 2026 08:14:26 +0200 Subject: [PATCH 08/13] Update user guide for GET request URL and periods Clarified instructions on GET request URL limits and period selection. --- docs/PxWebApi/documentation/user-guide.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/PxWebApi/documentation/user-guide.md b/docs/PxWebApi/documentation/user-guide.md index d4becc5..004c88b 100644 --- a/docs/PxWebApi/documentation/user-guide.md +++ b/docs/PxWebApi/documentation/user-guide.md @@ -1373,12 +1373,8 @@ Possible error codes if the query does not return a response: - The URL in the GET request cannot exceed a limit of approximately 2100 characters. Instead of listing long value lists in the query, use * (asterisk), - question mark, from/to or range. + question mark, from/to or range. If you select all the values of the variable, PxWeb v2 will automatically put * in the query. -- Also note that the GET URL that PxWeb generates will always list exactly the - same periods that you selected. In practice, you will most often want the query - to include all newer periods the next time you run it. In that case, you must - adjust the URL to `valueCode[Time]=*` or `from(start time)`, alternatively - `top(number of newest periods)`. +- If you do not select all the periods, PxWeb will list in the query exactly the same periods you selected. In practice, you will most often want the query to include all newer periods the next time you run it. In that case, you must adjust the URL to `valueCode[Time]=*` or `from(start time)`, alternatively `top(number of newest periods)`. - See also [knows issues under parquet](#parquet-known-issues) output format From d7c54c65c0b5e9d50e64e4fc139f2dc10e27dc1c Mon Sep 17 00:00:00 2001 From: Petros Likidis Date: Tue, 26 May 2026 14:54:54 +0200 Subject: [PATCH 09/13] Update CODEOWNERS Included the dev teams for scb and ssb and also the pxweb-triage --- CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 867d00e..328ae02 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,2 +1,2 @@ -* @likp @runejo @michaelpande @JohannesFinsveen -/docs/ @likp @runejo @michaelpande @JohannesFinsveen @AsaArrhen @KristinGlomsas +* @likp @runejo @JohannesFinsveen +/docs/ @likp @runejo @JohannesFinsveen @AsaArrhen @KristinGlomsas @devs-ssb @devs-scb @pxweb-triage From 58b0bb076de2361e065ff0631d1ed1951f522f3f Mon Sep 17 00:00:00 2001 From: Petros Likidis Date: Tue, 26 May 2026 15:00:38 +0200 Subject: [PATCH 10/13] Update CODEOWNERS Added organistion to team names --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 328ae02..20bd96f 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,2 +1,2 @@ * @likp @runejo @JohannesFinsveen -/docs/ @likp @runejo @JohannesFinsveen @AsaArrhen @KristinGlomsas @devs-ssb @devs-scb @pxweb-triage +/docs/ @likp @runejo @JohannesFinsveen @AsaArrhen @KristinGlomsas @PxTools/devs-ssb @PxTools/devs-scb @PxTools/pxweb-triage From 4f1998e58436a97244f4e3062547ea71412f9a93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85sa=20Arrh=C3=A9n?= Date: Tue, 2 Jun 2026 11:17:02 +0200 Subject: [PATCH 11/13] Revise plans and features for PxWeb 2.x Updated plans for PxWeb 2.x with new features and improvements. --- docs/PxWeb2/project/plans.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/PxWeb2/project/plans.md b/docs/PxWeb2/project/plans.md index 5e3cf84..f92569c 100644 --- a/docs/PxWeb2/project/plans.md +++ b/docs/PxWeb2/project/plans.md @@ -17,10 +17,9 @@ ### Table page - improve performance and layout +- manual pivoting - sticky table head and first column - hide empty rows -- show links only to translated tables -- manual pivoting - search in beginning of words in variable list - chose to show code or text - select multible check boxes at once @@ -33,10 +32,10 @@ ### Graph tool - Implement four types of graphs i apache Echarts [Apache Echarts](https://echarts.apache.org/en/index.html) + - Line chart - Bar chart - Horisontal bar chart - - Line chart - - population pyramide + - Population pyramide ## Further plans for PxWeb 2.x @@ -53,8 +52,11 @@ - Latest releases: [Version history](https://github.com/PxTools/PxWeb2/releases) -### PxWeb 2 - +### PxWeb 2 (see release versions for details) +- Added more search options +- Table: It is only possible to switch to a language that is supported +- Improved format for footnotes +- Button to show groupings for a variable - Connection to MetaID so you can link to metainformation at the tab Definitions - Open table card in new tab (right click) - Show PxWebApi 2 in PxWeb 2 From e19a4c8e0116d010906a512be88b20d2a01c6af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85sa=20Arrh=C3=A9n?= Date: Tue, 2 Jun 2026 12:36:45 +0200 Subject: [PATCH 12/13] Revise development plans for PxWeb 2 Updated plans for PxWeb 2, including improvements to the start page, table page, and graph tool. Added details on installation package and further plans. --- docs/PxWeb2/project/plans.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/PxWeb2/project/plans.md b/docs/PxWeb2/project/plans.md index f92569c..63c64e3 100644 --- a/docs/PxWeb2/project/plans.md +++ b/docs/PxWeb2/project/plans.md @@ -3,7 +3,6 @@ ## Remaining to develop in PxWeb 2 ### Startpage - - filter for selecting regional levels - improve search with more areas i.e. - subject structure/path (Enables searching across the entire subject @@ -15,12 +14,10 @@ - improve the table card ### Table page - - improve performance and layout - manual pivoting - sticky table head and first column - hide empty rows -- search in beginning of words in variable list - chose to show code or text - select multible check boxes at once - advanced settings for file export @@ -30,15 +27,16 @@ - improve back-button to start-page ### Graph tool - -- Implement four types of graphs i apache Echarts [Apache Echarts](https://echarts.apache.org/en/index.html) +- Implement four types of graphs in Apache Echarts [Apache Echarts](https://echarts.apache.org/en/index.html) - Line chart - Bar chart - Horisontal bar chart - Population pyramide -## Further plans for PxWeb 2.x +### Installation package +Installation package for PxWeb 2 and PxWebApi v2 +## Further plans for PxWeb 2.x - Possibility for table bulk download - DCAT-AP format - Hierarchy @@ -52,7 +50,8 @@ - Latest releases: [Version history](https://github.com/PxTools/PxWeb2/releases) -### PxWeb 2 (see release versions for details) +### PxWeb 2 +- Search in beginning of word in variable box - Added more search options - Table: It is only possible to switch to a language that is supported - Improved format for footnotes From 98862d3842f139b84c6bd77bf3a0f2996297c2ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85sa=20Arrh=C3=A9n?= Date: Tue, 2 Jun 2026 12:49:40 +0200 Subject: [PATCH 13/13] Enhance search options and footnote format Refined search options in variable box and improved footnote formatting. --- docs/PxWeb2/project/plans.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/PxWeb2/project/plans.md b/docs/PxWeb2/project/plans.md index 63c64e3..472359f 100644 --- a/docs/PxWeb2/project/plans.md +++ b/docs/PxWeb2/project/plans.md @@ -51,8 +51,7 @@ Installation package for PxWeb 2 and PxWebApi v2 - Latest releases: [Version history](https://github.com/PxTools/PxWeb2/releases) ### PxWeb 2 -- Search in beginning of word in variable box -- Added more search options +- Added more search options in variable box - Table: It is only possible to switch to a language that is supported - Improved format for footnotes - Button to show groupings for a variable