Export Dashboards and Widgets

Exporting dashboards and individual widgets is a great way to share insights, present your data to stakeholders, or further analyze results outside of GoodData. Whether you need a PDF snapshot of a dashboard for a quick overview, a slide deck presentation for meetings (PDF/PPTX), or raw data to manipulate in spreadsheets (XLSX/CSV), GoodData offers flexible export options.

Users require the Workspace.EXPORT permission to initiate exports.

Export Dashboard

Exporting the entire dashboard allows you to capture every visualization on the page in a single file. Depending on your needs, you can choose a simple PDF snapshot or generate a multi-slide presentation in PDF/PPTX. Both methods respect your current dashboard layout and filters, ensuring consistency with what you see on screen.

Snapshot

You can export a snapshot of the whole dashboard as a PDF file:

Illustrative couple of screenshots, first showing the dashboard as seen in the browser, the second showing the dashboard opened in a PDF reader.

Steps:

  1. Open the dashboard you want to export.

  2. Click the menu button in the top right corner of the dashboard and select Export:

    Screenshot of the top right corner of the screenshot showing the ... menu opened with the Export option clearly visible.
  3. Select Snapshot (PDF):

    Screenshot of the Export menu options.

    The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:

    Two screenshot of the status messages shown at the top of the page when an export is taking place. First one indiciating the export is still in progress, second one indicating the export process has been completed.

Steps:

  1. Call API endpoint api/v1/actions/workspaces/<workspace_id>/export/visual to create a PDF snapshot of the dashboard:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/visual \
        -X POST \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/json' \
        -d '{
          "fileName": "<filename>",
          "dashboardId": "<dashboard_id>",
          "metadata": {
            "filters": [
              {
                "dateFilter": {
                  "from": "-1",
                  "to": "-1",
                  "granularity": "GDC.time.month",
                  "type": "relative"
                }
              },
              {
                "attributeFilter": {
                  "displayForm": {
                    "identifier": "<attribute_label_id>",
                    "type": "displayForm"
                  },
                  "negativeSelection": true,
                  "attributeElements": {
                    "uris": []
                  },
                  "localIdentifier": "<attribute_filter_id>",
                  "filterElementsBy": [],
                  "selectionMode": "multi"
                }
              },
              {
                "attributeFilter": {
                  "displayForm": {
                    "identifier": "<attribute_label_id>",
                    "type": "displayForm"
                  },
                  "negativeSelection": true,
                  "attributeElements": {
                    "uris": []
                  },
                  "localIdentifier": "<attribute_filter_id>",
                  "filterElementsBy": [],
                  "selectionMode": "multi"
                }
              },
              {
                "attributeFilter": {
                  "displayForm": {
                    "identifier": ""<attribute_label_id>",
                    "type": "displayForm"
                  },
                  "negativeSelection": true,
                  "attributeElements": {
                    "uris": []
                  },
                  "localIdentifier": "<attribute_filter_id>",
                  "filterElementsBy": [],
                  "selectionMode": "multi"
                }
              }
            ]
          }
        }'
    

    Note that metadata.filters is an optional property used to set specific dashboard filter values for the dashboard snapshot. You can omit this property if you want to use the default dashboard filter values.

    The response returned to your API call will contain parameter executionResult with some value <result_id>.

  2. Call API endpoint api/v1/actions/workspaces/<workspace_id>/export/visual/<result_id> to download the file:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/visual/<result_id> \
        -X GET \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/json' 
    

    It may take a few seconds for the file to be created. Consider polling this endpoint until the file is ready.

Slide Deck

If you want each dashboard section or widget on its own page, the slide deck export transforms your dashboard into slides. You can then export those slides as PDF or PPTX, making it easy to incorporate into presentations or share with stakeholders.

Illustrative couple of screenshots, first showing the dashboard as seen in the browser, the second showing the dashboard opened in a slideshow editor.

Steps:

  1. Open the dashboard you want to export.

  2. Click the menu button in the top right corner of the dashboard and select Export:

    Screenshot of the top right corner of the screenshot showing the ... menu opened with the Export option clearly visible.
  3. Select Slide Deck - (PDF) or (PPTX):

    Screenshot of the Export menu options.

    The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:

    Two screenshot of the status messages shown at the top of the page when an export is taking place. First one indiciating the export is still in progress, second one indicating the export process has been completed.

Steps:

  1. Call API endpoint api/v1/actions/workspaces/<workspace_id>/export/slides to create a a PDF or PPTX file slide deck form the dashboard:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides \
        -X POST \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/vnd.gooddata.api+json' \
        -d '{
          "format": "<PDF_or_PPTX>",
          "dashboardId": "<dashboard_id>",
          "fileName": "<file_name>",
          "metadata": {
            "filters": [
                {
                  "dateFilter": {
                      "from": "-1",
                      "to": "-1",
                      "granularity": "GDC.time.month",
                      "type": "relative"
                  }
                },
                {
                  "attributeFilter": {
                      "displayForm": {
                        "identifier": "<attribute_label_id>",
                        "type": "displayForm"
                      },
                      "negativeSelection": true,
                      "attributeElements": {
                        "uris": []
                      },
                      "localIdentifier": "<attribute_filter_id>",
                      "filterElementsBy": [],
                      "selectionMode": "multi"
                  }
                },
                {
                  "attributeFilter": {
                      "displayForm": {
                        "identifier": "<attribute_label_id>",
                        "type": "displayForm"
                      },
                      "negativeSelection": true,
                      "attributeElements": {
                        "uris": []
                      },
                      "localIdentifier": "<attribute_filter_id>",
                      "filterElementsBy": [],
                      "selectionMode": "multi"
                  }
                }
            ]
          }
      }'
    

    Note that metadata.filters is an optional property used to set specific dashboard filter values. You can omit it if you want to use the dashboard’s default filter values.

    You can also use export templates to change how the exported slide deck looks or behaves. See Apply Template.

    The response returned to your API call will contain parameter executionResult with some value <result_id>.

  2. Call API endpoint api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id> to download the file:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id> \
        -X GET \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/vnd.gooddata.api+json' \
        -O "<output_file_name>.<pdf_or_pptx>"
    

    It may take a few seconds for the file to be created. Consider polling this endpoint until the file is ready.

Export Widget

Sometimes you only need data or visuals from a single dashboard widget rather than the entire dashboard. GoodData allows you to export individual widgets either as a single slide (PDF/PPTX) or as tabular data (XLSX/CSV). This helps you focus on exactly the insight you want to share or analyze further.

Slide

You can export individual widgets on the dashboard as a single presentation slide in PDF or PPTX:

Illustrative couple of screenshots, first showing the dashboard as seen in the browser and highlighting a particular widget, the second showing the widget exported to PDF and opened in a PDF editor.

Steps:

  1. Open the dashboard that contains the widget that you want to export.

  2. Hover over the widget, click on the menu, and select Export:

    Screenshot of a widget on a dashboard with the ... menu open and the export options highlighted.
  3. Select Slide Deck (PDF) or (PPTX):

    Screenshot of a widget on a dashboard with the menu open and the export options highlighted.

    The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:

    Two screenshot of the status messages shown at the top of the page when an export is taking place. First one indiciating the export is still in progress, second one indicating the export process has been completed.

Steps:

  1. Call API endpoint api/v1/entities/workspaces/<workspace_id>/analyticalDashboards/<dashboard-id> to fetch the dashboard layout which lets you identify the widget’s ID:

    curl $HOST_URL/api/v1/entities/workspaces/<workspace_id>/analyticalDashboards/<dashboard-id> \
        -X GET \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/vnd.gooddata.api+json'
    

    Look for widget.localIdentifier of the widget you want to export to get its <widget_id>.

  2. Call API endpoint api/v1/actions/workspaces/<workspace_id>/export/slides to create a PDF or PPTX slide of the widget, specify your widget ID in the widgetIds array:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides \
        -X POST \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/vnd.gooddata.api+json' \
        -d '{
          "format": "<PDF_or_PPTX>",
          "dashboardId": "<dashboard_id>",
          "fileName": "<file_name>",
          "widgetIds": [
            "<widget_id>"
          ],
          "metadata": {
            "filters": [
                {
                  "dateFilter": {
                      "from": "-1",
                      "to": "-1",
                      "granularity": "GDC.time.month",
                      "type": "relative"
                  }
                },
                {
                  "attributeFilter": {
                      "displayForm": {
                        "identifier": "<attribute_label_id>",
                        "type": "displayForm"
                      },
                      "negativeSelection": true,
                      "attributeElements": {
                        "uris": []
                      },
                      "localIdentifier": "<attribute_filter_id>",
                      "filterElementsBy": [],
                      "selectionMode": "multi"
                  }
                },
                {
                  "attributeFilter": {
                      "displayForm": {
                        "identifier": "<attribute_label_id>",
                        "type": "displayForm"
                      },
                      "negativeSelection": true,
                      "attributeElements": {
                        "uris": []
                      },
                      "localIdentifier": "<attribute_filter_id>",
                      "filterElementsBy": [],
                      "selectionMode": "multi"
                  }
                }
            ]
          }
      }'
    

    Note that metadata.filters is an optional property used to set specific dashboard filter values for the widget export. You can omit this property if you want to use the default dashboard filter values.

    You can also use export templates to change how the exported slide deck looks or behaves. See Apply Template.

    The response returned to your API call will contain parameter executionResult with some value <result_id>.

  3. Call API endpoint api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id> to download the file:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id> \
        -X GET \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/vnd.gooddata.api+json' \
        -O "<output_file_name>.<pdf_or_pptx>"
    

    Note that in Step 2 it may take a few seconds for the file to be created. Consider polling the endpoint in Step 3 until the file is ready.

Tabular Data

If you need raw data for further manipulation, you can export the table behind a widget to XLSX or CSV. This is ideal for deeper analysis in spreadsheets or other external tools.

Illustrative couple of screenshots, first showing the dashboard as seen in the browser and highlighting a particular widget, the second showing the widget's data exported to a spreadsheet and opened in a spreadsheet editor.

Steps:

  1. Open the dashboard that contains the widget that you want to export.

  2. Hover over the widget and click on the menu, and select Export to XLSX or CSV:

    Screenshot of a widget on a dashboard with the ... menu open and the export options highlighted.

    The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:

    Two screenshot of the status messages shown at the top of the page when an export is taking place. First one indiciating the export is still in progress, second one indicating the export process has been completed.

To export data from a widget into a XLSX or CSV file, you need to define to use the AFM API.

Steps:

  1. Compute the raw result using API endpoint api/v1/actions/workspaces/<workspace_id>/execution/afm/execute:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/execution/afm/execute \
        -X POST \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/json' \
        -d '{
          "resultSpec": {
            "dimensions": [
              {
                "localIdentifier": "dim_0",
                "itemIdentifiers": [
                  "458f2a55e1ca457883ff36141c84dc48"
                ]
              },
              {
                "localIdentifier": "dim_1",
                "itemIdentifiers": [
                  "measureGroup"
                ]
              }
            ],
            "totals": []
          },
          "execution": {
            "measures": [
              {
                "localIdentifier": "0f489725fe26493fb5fdc3d2367c21ed",
                "definition": {
                  "measure": {
                    "item": {
                      "identifier": {
                        "id": "average_price_of_products",
                        "type": "metric"
                      }
                    }
                  }
                }
              },
              {
                "localIdentifier": "a279058ddf724659b6b7cad14bd63404",
                "definition": {
                  "measure": {
                    "item": {
                      "identifier": {
                        "id": "gross_profit",
                        "type": "metric"
                      }
                    }
                  }
                }
              },
              {
                "localIdentifier": "7e4fe02cd17d4da38ec6d464646bbbb1",
                "definition": {
                  "measure": {
                    "item": {
                      "identifier": {
                        "id": "order_amount",
                        "type": "metric"
                      }
                    }
                  }
                }
              }
            ],
            "attributes": [
              {
                "label": {
                  "identifier": {
                    "id": "product_brand",
                    "type": "label"
                  }
                },
                "localIdentifier": "458f2a55e1ca457883ff36141c84dc48"
              }
            ],
            "filters": [
              {
                "relativeDateFilter": {
                  "dataset": {
                    "identifier": {
                      "id": "customer_created_date",
                      "type": "dataset"
                    }
                  },
                  "granularity": "MONTH",
                  "from": -1,
                  "to": -1
                }
              }
            ]
          }
        }'
    

    In the response you will get some <execution_result_id> in the parameter executionResult.

  2. Use the <execution_result_id> to create a tabular export using API endpoint api/v1/actions/workspaces/<workspace_id>/export/tabular:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/tabular \
        -X POST \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/json' \
        -d '{
          "format": "<XLSX_or_CSV>",
          "executionResult": "<execution_result_id>",
          "fileName": "<filename>",
          "settings": {
              "mergeHeaders": <false_or_true>,
              "showFilters": <false_or_true>
          }
          "customOverride": {
            "metrics": {
              "<metric_id_1>": {
                "title": "<metric_title_1>",
                "format": "$#,##0.00"
              },
              "<metric_id_2>": {
                "title": "<metric_title_2>",
                "format": "[>=1000000000000]$#,,,,.0 T;\n[>=1000000000]$#,,,.0 B;\n[>=1000000]$#,,.0 M;\n[>=1000]$#,.0 K;\n[>=0]$#,##0;\n[<=-1000000000000]-$#,,,,.0 T;\n[<=-1000000000]-$#,,,.0 B;\n[<=-1000000]-$#,,.0 M;\n[<=-1000]-$#,.0 K;\n[<0]-$#,##0"
              },
              "<metric_id_3>": {
                "title": "<metric_title_3>",
                "format": "[>=1000000000000]$#,,,,.0 T;\n[>=1000000000]$#,,,.0 B;\n[>=1000000]$#,,.0 M;\n[>=1000]$#,.0 K;\n[>=0]$#,##0;\n[<=-1000000000000]-$#,,,,.0 T;\n[<=-1000000000]-$#,,,.0 B;\n[<=-1000000]-$#,,.0 M;\n[<=-1000]-$#,.0 K;\n[<0]-$#,##0"
              }
            },
            "labels": {
              "<attribute_label_id>": {
                "title": "<attribute_label_title>"
              }
            }
          }
        }'
    

    Note that for CSV exports, you can omit the settings parameter.

    In the response you will get some <export_id> in the parameter exportResult.

  3. Use the <export_id> to get the CSV file by calling the API endpoint api/v1/actions/workspaces/<workspace_id>/export/tabular/<export_id>:

    curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/tabular/<export_id> \
        -X POST \
        -H "Authorization: Bearer $API_TOKEN" \
        -H 'Content-Type: application/json'
    

Limitations

There are currently certain known limitations associated with slide deck exports:

  • Images included in rich text widgets do not appear in PDF slide decks.
  • When dashboard descriptions are exported into PDF slide decks, any rich text variables do not display their values.
  • Chinese characters are not supported in PDF slide decks.