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:

Comparison between a dashboard shown in a browser and the same dashboard exported to a PDF as a slide deck.

Steps:

  1. Open the dashboard you want to export.

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

    Clicking the ellipsis button in the top-right corner of a dashboard opens a menu. There, the Export option is highlighted.
  3. Select Snapshot (PDF):

    Export format menu showing the Snapshot PDF option 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/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": {
                  "localIdentifier": "0_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 (ellipsis) menu button in the top right corner of the dashboard and select Export:

    The top right corner of the dashboard showing the ellipsis menu opened with the Export option highlighted.
  3. Select Slide Deck - (PDF) or (PPTX):

    Export format menu showing Slide Deck PDF and Slide Deck PPTX 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/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": {
                      "localIdentifier": "0_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 (ellipsis) menu, and select Export:

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

    Widget export format menu showing Slide Deck PDF and Slide Deck PPTX 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 screenshots 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": {
                      "localIdentifier": "0_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 (ellipsis) menu, and select Export to XLSX or CSV:

    Screenshot of a widget on a dashboard with the ellipsis 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 screenshots 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.