March 10, 2018

Renaming Measures and Attributes in Analytical Designer

To replace long names or to distinguish between the same measures with different filters, you can now rename measures, attributes, and dates in Analytical Designer for each insight that you create. If you add insights with renamed items to a KPI dashboard, the insight displays the new alias names there as well.

Learn more:
Rename Measures and Attributes in Individual Insights

 

Data Warehouse JDBC Driver 3.1.2 Available!

We have released version 3.1.2 of the Data Warehouse JDBC driver. Download it from the Downloads page at https://secure.gooddata.com/downloads.html.
NOTE: If you are a white-labeled customer, log in to the Downloads page from your white-labeled domain:
https://my.domain.com/downloads.html

What's new in this release:
Support for prepared statements. The following JDBC methods are now available:

  • execute
  • executeQuery
  • executeUpdate
  • executeBatch
  • addBatch

With those methods, you can use the following data type setters:

  • Int
  • Long
  • Double
  • Float
  • Boolean
  • String
  • BigDecimal
  • Bytes
  • Date
  • Timestamp

IMPORTANT! If you are still using the old JDBC URL schema that starts with jdbc:dss, do the following:

  1. Upgrade the URL schema to the new format so that it starts with jdbc:gdc:datawarehouse. For more information, see Prepare the JDBC Connection String.
  2. Change the used driver class to com.gooddata.datawarehouse.jdbc.driver.DatawarehouseDriver. For more information, see Access Data Warehouse from SQuirrel SQL.

The old JDBC URL format is still supported if you use com.gooddata.dss.jdbc.driver.DssDriver as the driver class. However, it may be removed from future versions of the JDBC driver. We recommend that you switch to the new format of the URL schema as soon as possible.

Learn more:
Download the JDBC Driver

 

New API Event for Embedded Dashboards: No Access to Project

If you have embedded dashboards, you can now be notified when a user tries to access an embedded dashboard in a project that they do not have access rights to.

To do so, use the API event 'A user has no access to a project':

{
  gdc: {
    name: 'project.info.no.permission',
    type: 'app.ok'
  }
}

Learn more:
Embedded Dashboard Events (look for 'A user has no access to a project')
Embedded Dashboard and Report API - Events and Methods

 

New API Parameter for White Labeling

New API parameter suppressProjectLinks allows you to suppress hyperlinks for projects in email footers.

Learn more:
Customize the White-Labeled Domain
API Documentation

 

Project Metadata Objects Upgraded

Only for the customers who directly use the Visualization metadata objects using the programmatic API

We have upgraded project metadata.

  • All project metadata objects of the visualization type were migrated to the newly created visualizationObject type.
    The visualization type is no longer available for use, and any code still using it stops working.
  • A new property, visualizationClass, was introduced.

What are visualizationObject and visualizationClass?
Project metadata objects of the visualizationObject type keep information about insights. Insights are created in Analytical Designer and can be then either used in Analytical Designer directly or added to KPI dashboards.

visualizationClass defines the type of a visualizationObject object (pie chart, line chart, and so on).

You can query for visualizationClass using the following API:

/gdc/md/{project_id}/query/visualizationclasses
/gdc/md/{project_id}/objects/query?category=visualizationClass&limit=50

How can this affect you?

  • If you are using the GoodData SDKs, upgrade to the latest version of the SDK to adjust your code to the structural changes in the project metadata. For more information, see GoodData SDK.
  • If you are using project metadata objects directly, use visualizationObject in your code instead of visualization, and use a new API to query for visualizationObject instances.
    Stop using:
    /gdc/md/{project_id}/query/visualizations
    /gdc/md/{project_id}/objects/query?category=visualization

    Use instead:
    /gdc/md/{project_id}/query/visualizationobjects
    /gdc/md/{project_id}/objects/query?category=visualizationObject

Learn more:
visualization Object Type in Project Metadata

 

API for Saving Insights as Reports Changed

Due to the metadata upgrade (see the previous article in these Release Notes), the API for saving an insight as a report definition has changed.

What has changed?

  • Endpoint URL
  • Request body

What has NOT changed?
Response body.

How has the endpoint URL changed?
Old URL (stop using it): https://secure.gooddata.com/gdc/projects/{project_id}/convertVisualization
New URL (use instead the old one): https://secure.gooddata.com/gdc/projects/{project_id}/convertVisualizationObject

How has the request body changed?

Old request body New request body
{
  "visualization": {
    "content": {
      "type": "column",
      "buckets": {
        "categories": [
          {
            "category": {
              "collection": "view",
              "attribute": "/gdc/md/{project_id}/obj/{attribute_id}",
              "displayForm": "/gdc/md/{project_id}/obj/{displayForm_id}",
              "type": "attribute"
            }
          }
        ],
        "measures": [
          {
            "measure": {
              "showInPercent": false,
              "showPoP": false,
              "title": "Sales",
              "objectUri": "/gdc/md/{project_id}/obj/{metric_id}}",
              "measureFilters": [],
              "type": "metric"
            }
          }
        ],
        "filters": [
          {
            "listAttributeFilter": {
              "default": {
                "negativeSelection": true,
                "attributeElements": []
              },
              "attribute": "/gdc/md/{project_id}/obj/{attribute_id}",
              "displayForm": "/gdc/md/{project_id}/obj/{displayForm_id}"
            }
          }
        ]
      }
    },
   "meta": {
      "title": "Insight",
      "category": "visualization"
    }
  }
}

{
  "visualizationObject": {
    "meta": {
      "title": "Insight",
      "category": "visualizationObject"
    },
    "content": {
      "visualizationClass": {
        "uri": "/gdc/md/{project_id}/obj/{visualization_class_id}"
      },
      "buckets": [
        {
          "localIdentifier": "view",
          "items": [
            {
              "visualizationAttribute": {
                "localIdentifier": "{random_id}",
                "displayForm": {
                  "uri": "/gdc/md/{project_id}/obj/{displayForm_id}"
                }
              }
            }
          ]
        },
        {
          "localIdentifier": "measures",
          "items": [
            {
              "measure": {
                "localIdentifier": "{random_id}",
                "title": "Sales",
                "definition": {
                  "measureDefinition": {
                    "item": {
                      "uri": "/gdc/md/{project_id}/obj/{measure_id}"
                    },
                    "aggregation": "sum",
                    "computeRatio": false,
                    "filters": []
                  }
                }
              }
            }
          ]
        }
      ],
      "filters": [
        {
         "relativeDateFilter": {
            "dataSet": {
              "uri": "/gdc/md/{project_id}/obj/{dataset_id}"
            },
            "from": -6,
            "to": 0,
            "granularity": "GDC.time.month"
          }
        }
      ]
    }
  }
}

 

REMINDER: Add Mandatory User-Agent Header to API Request

Starting from March 31, 2018, the GoodData REST API will require every API request to contain the User-Agent header. Any API request without the User-Agent header made after March 31, 2018, will be rejected.

What is the purpose of the header?
The User-Agent header helps us identify users of our API and what they use the API for.

What is the header format?
The User-Agent header must be in one of the following formats:

  • {product}-{task}/{version} ({your_email@example.com})
    or
  • {company}-{task}/{version}

where:
-- {product} is the product in whose context you use the API (it can be your company's product that you are responsible for).
-- {task} is the business domain in which you use the API (for example, managing users, configuring white-label properties, or creating projects).
-- {company} is your company name.
-- {version} is the version of your API integration. If you are not sure what version to include, set it to 1.0.
-- {your_email@example.com} is your email or the email of the contact person responsible for the product in your company.

The User-Agent header must not contain spaces or slashes ( / ) apart from those that are already specified by the format.

How can you construct the User-Agent header?
Use the following examples to understand how to set the header:

  • John Roe works in a company called 'Acme Corporation', on a product called 'Insight'. He uses the GoodData API to orchestrate ETL graphs across projects in his department. Here is how John can set the User-Agent header:
    AcmeCorporation-ETLOrchestrator/1.0
    Insight/1.0 (john.roe@acme.com)
  • Jane Doe works in a company called 'Initech'. She uses the GoodData API to perform general administrative tasks across multiple products. Here is how Jane can set the User-Agent header:
    Initech-AdminTools/1.0

Action needed!
If you use a tool for handling API calls or a custom library for integrating with the GoodData REST API, update them to include the User-Agent header in every API request.

TIP: Set up one User-Agent header per tool/custom library and per task. For example, if you are using one tool to perform many administrative tasks, use a general header of AdminTools. However, if you are using a few tools or libraries or if you are performing tasks from different business areas (for instance, managing access to dashboards and adding users to a Data Warehouse instance), set up headers for each tool or for each task separately.

When is the deadline for implementing the User-Agent header? 
The date is March 31, 2018. However, we strongly recommend that you do so as soon as possible.

Are CloudConnect users affected?
No. If you call the API from CloudConnect (for example, REST Connector or HTTP Connector), you do not have to specify the User-Agent header. CloudConnect provides a default User-Agent header for all API calls that these components make.

If you have any question, please contact GoodData Support.

Powered by Zendesk