Overview of the API
dscc
(Looker Studio Community Component) is a library to help with building
community components for Looker Studio. The source code can be found on
GitHub.
dscc
exposes three functions: getWidth()
, getHeight()
, and
subscribeToData()
.
getWidth()
Name | Parameters | Return Type | Description |
---|---|---|---|
getWidth() | None | number
|
Returns the width of the iframe, in pixels |
Using getWidth()
// to get the width of the iframe
var width = dscc.getWidth();
getHeight()
Name | Parameters | Return Type | Description |
---|---|---|---|
getHeight() | None | int
|
Returns the height of the iframe, in pixels |
Using getHeight()
// to get the height of the iframe
var height = dscc.getHeight();
sendInteraction()
The sendInteraction()
function sends a message to Looker Studio with the data
for a filter.
Parameters:
Name | Type | Description |
---|---|---|
actionID | string
|
The string that corresponds to the actionId in the config |
interaction | enum(InteractionType)
|
Tells Looker Studio about the interaction |
data | object(InteractionData)
|
Provides the required data for an interaction |
InteractionType
Currently, the only valid InteractionType
is FILTER
.
Name | Type | Description |
---|---|---|
dscc.InteractionType.FILTER | Enum | Describes the FILTER interaction |
Using sendInteraction
// the actionID can either be hardcoded or parsed from the returned data
var actionId = "interactionConfigId";
// dscc provides enums for the interaction types
var FILTER = dscc.InteractionType.FILTER;
var fieldID = "qt_m9dtntutsb";
var dataValue = "Asia";
// sendInteraction expects data that tells you the concepts and the values of
// those concepts to use in constructing a filter.
var interactionData = {
"concepts": [fieldId],
"values": [[dataValue]]
}
dscc.sendInteraction(actionId, FILTER, interactionData);
interactionData
var interactionData = {
"concepts": array(fieldId),
"values": array(array(dataValue))
}
Field | Type | Description |
---|---|---|
concepts | Array |
Array of fieldIds |
values | Array<Array>
|
Nested array of data values. Each subarray
should be the length of the concepts array.
Each value in the subarray corresponds to a
dimension value. |
Sample interactionData
:
var interactionData = {
"concepts": ["dim1Id", "dim2Id"],
"values": [
["dim1Val1", "dim2Val1"],
["dim1Val2", "dim2Val2"]
]
}
Using dscc.sendInteraction
with the above interactionData
is equivalent to
the following SQL statement:
SELECT data WHERE
(dim1 == dim1Val1 AND dim2 == dim2Val1)
OR
(dim1 == dim1Val2 AND dim2 == dim2Val2);
clearInteraction()
The clearInteraction()
function sends an message to Looker Studio to clear a
filter previously set by this visualization.
Parameters:
Name | Type | Description |
---|---|---|
actionID | string
|
The string that corresponds to the actionId in the config |
interaction | enum(InteractionType)
|
Tells Looker Studio about the interaction |
Using clearInteraction()
// the actionID can either be hardcoded or parsed from the returned data
var actionId = "interactionConfigId";
// dscc provides enums for the interaction types
var FILTER = dscc.InteractionType.FILTER;
dscc.clearInteraction(actionId, FILTER);
subscribeToData(callback, options)
The subscribeToData()
function subscribes to messages from Looker Studio.
Parameters:
Name | Type | Description |
---|---|---|
callback(data) | function
|
A function that takes the data returned by
subscribeToData . |
options | object |
Defines the desired data return format |
The options object looks like:
{
transform: dscc.tableTransform | dscc.objectTransform
}
Return value:
Type | Description |
---|---|
function |
Unsubscribes callback from further messages from Looker Studio |
Using subscribeToData()
// define and use a callback
var unsubscribe = dscc.subscribeToData(function(data){
// console.log the returned data
console.log(data);
}, {transform: dscc.tableTransform});
// to unsubscribe
unsubscribe();
data
This is the object passed to the callback
registered with
dscc.subscribeToData
. These following are the fields that are shared between
dscc.objectFormat
and dscc.tableFormat
.
{
fields: object(fieldsByConfigId),
style: object(styleById),
interactions: object(interactionsById),
theme: object(themeStyle),
tables: object(tablesById),
dateRanges: object(dateRangesById)
}
Field | Type | Description |
---|---|---|
fields | object(fieldsByConfigId)
|
An object that contains fields indexed by their configId |
style | object(styleById)
|
An object that contains style objects indexed by their configId |
interactions | object(interactionsById)
|
An object that contains interaction objects |
theme | themeStyle
|
A themeStyle object that contains theme styling information for the report |
tables | object(tablesById)
|
An object that contains tableObjects |
dateRanges | object(dateRangesById)
|
An object that contains dateRanges |
fieldsByConfigId
{
configId: array(field)
}
The fieldsByConfigId
object contains arrays of field objects indexed
by the "id" defined in the
visualization config. There is
one entry in this object for each dataField
defined in the config.
Field | Type | Description |
---|---|---|
configId | Array<field> |
An array of field(s) associated with the dataField |
field
{
id: fieldId,
name: string,
description: string,
type: fieldType,
concept: enum(conceptType)
}
The field
object provides information about the field that the user selects in
the property panel.
Field | Type | Description |
---|---|---|
id | string |
The Looker Studio generated ID for the field |
name | string |
The human-readable field name |
description | string |
The description of the field |
type | enum(fieldType) |
The semanticType of the field |
concept | enum(conceptType) |
The conceptType of the field |
styleById
{
configId: styleValue
}
The styleById
object provides style information indexed by the "id" defined in
the visualization config.
Field | Type | Description |
---|---|---|
configId | styleValue
|
An object that contains the style value and the config-defined default style value |
styleValue
{
value: string | object | bool | number,
defaultValue: string | object | bool | number
}
The styleValue
object provides both the user-selected style value and the
default value defined in the config. The type of value
and defaultValue
depend on the style element.
Field | Type | Description |
---|---|---|
value | string OR object OR bool OR
number
|
The value of the style element returned from user selection in the property panel |
defaultValue | string OR object OR bool OR
number
|
The default value of the style element defined in the visualization config |
interactionsById
{
}
interactionsById
object provides interaction data indexed by the
interactionId
visualization config.
Index | Type | Description |
---|---|---|
configId | interaction
|
An object that contains data associated with an interaction |
interactionField
{
value: object(interactionValue),
supportedActions: array(InteractionType)
}
The interactionField
object contains the array of supportedActions defined in
the config, as well as the user-selected values for the interaction.
Field | Type | Description |
---|---|---|
value | string OR object OR
bool OR number
|
The value of the style element returned from user selection in the property panel |
supportedActions | Array<InteractionType>
|
The actions supported by this interaction, as defined in the config |
interactionValue
The interactionValue
object provides user-selected values for the interaction
type. If the data
key exists, the InteractionData
object reflects the
current state of the filter. If the data
key does not exist, the visualization
is not currently configured as a filter.
{
type: enum(InteractionType)
data: object(interactionData) | None
}
Field | Type | Description |
---|---|---|
type | enum(InteractionType)
|
The user-selected InteractionType |
data | object(InteractionData)
|
The data associated with the current state of the filter. This key does not exist if the filter is currently cleared. |
theme
{
fillColor: {
color: string,
opacity: number
},
fontColor: {
color: string,
opacity: number
},
accentFillColor: {
color: string,
opacity: number
},
accentFontColor: {
color: string,
opacity: number
},
fontFamily: string,
accentFontFamily: string,
increaseColor: {
color: string,
opacity: number
},
decreaseColor: {
color: string,
opacity: number
},
gridColor: {
color: string,
opacity: number
},
seriesColor: [
{
color: string,
opacity: number
}
]
}
The themeStyle
object passes report theme information to the visualization.
Field | Type | Description |
---|---|---|
fillColor | object
|
An object of the format {color:
string, opacity: number} |
fontColor | object
|
An object of the format {color:
string, opacity: number} |
accentFillColor | object
|
An object of the format {color:
string, opacity: number} |
accentFontColor | object
|
An object of the format {color:
string, opacity: number} |
fontFamily | string |
A string describing the font family |
accentFontFamily | string
|
A string describing the accent font family |
increaseColor | object
|
An object of the format {color:
string, opacity: number} |
decreaseColor | object
|
An object of the format {color:
string, opacity: number} |
gridColor | object
|
An object of the format {color:
string, opacity: number} |
seriesColor | Array<object>
|
An array of objects of the
format{color: string, opacity:
number} |
tablesById
{
"DEFAULT": object(tableObject),
"COMPARISON": object(tableObject) | undefined
}
The tableObject
provides heading and data information for each row. "DEFAULT"
always will return data, and "COMPARISON" will only be populated if the user
configures the data with comparison rows.
The format of the tableObject is the only difference between dscc.tableFormat
and dscc.objectFormat
.
Field | Type | Description |
---|---|---|
"DEFAULT" | object(tableObject) OR
Array<objectRow>
|
The tableObject associated with
the data a user adds to a
visualization |
"COMPARISON" | object(tableObject) OR
Array<objectRow>
|
The tableObject associated with
the date comparison data, if
applicable |
dateRangesById
{
"DEFAULT": object(dateRange),
"COMPARISON": object(dateRange)
}
The dateRangesById
object provides information about default and comparison
date ranges. If there are no date ranges, the object will be
empty. DEFAULT
and COMPARISON
will only be populated if the respective date
ranges are configured by the user. The data in the date ranges are related to
the default and comparison data as defined in tablesById.
Field | Type | Description |
---|---|---|
"DEFAULT" | object(dateRange)
|
The dateRange associated with the
default date range, if applicable. |
"COMPARISON" | object(dateRange)
|
The dateRange associated with a
comparison date range, if applicable. |
dateRange
{
start: string,
end: string
}
The dateRange
object provides information about the start and end dates of a
default or comparison date range.
Field | Type | Description |
---|---|---|
start | string |
Start date of date range in YYYYMMDD format. |
end | string |
End date of date range in YYYYMMDD format. |
tableFormat
reference
tableObject
{
headers: array(object),
rows: array(array)
}
Field | Type | Description |
---|---|---|
headers | Array
|
An array of fields objects. These field
objects additionally have a configId property
that corresponds to the IDs from the config. |
rows | Array<Array> |
An array of arrays: each array is a row of data |
Sample tableFormat
data
This is sample data
returned by using dscc.subscribeToData()
with the option
dscc.tableFormat
.
{
"tables": {
"DEFAULT": {
"headers": [{
"id": "qt_ky8sltutsb",
"name": "dimension",
"type": "TEXT",
"concept": "DIMENSION",
"configId": "configId1"
}, {
"id": "qt_b5bvmtutsb",
"name": "second dim",
"type": "TEXT",
"concept": "DIMENSION"
"configId": "configId1"
}, {
"id": "qt_m9dtntutsb",
"name": "metric",
"type": "NUMBER",
"concept": "METRIC",
"configId": "configId2"
}],
"rows": [
["Week 4", "lm", 55]
]
},
"COMPARISON": {
"headers": [{
"id": "qt_ky8sltutsb",
"name": "dimension",
"type": "TEXT",
"concept": "DIMENSION",
"configId": "configId1"
}, {
"id": "qt_b5bvmtutsb",
"name": "second dim",
"type": "TEXT",
"concept": "DIMENSION"
"configId": "configId1"
}, {
"id": "qt_m9dtntutsb",
"name": "metric",
"type": "NUMBER",
"concept": "METRIC",
"configId": "configId2"
}],
"rows": [
["Week 5", "no", 123]
]
}
},
"fields": {
"configId1": [
{
"id": "qt_ky8sltutsb",
"name": "week",
"type": "TEXT",
"concept": "DIMENSION"
},
{
"id": "qt_b5bvmtutsb",
"name": "textId",
"type": "TEXT",
"concept": "DIMENSION"
}
],
"configId2": [
{
"id": "qt_m9dtntutsb",
"name": "orders",
"type": "NUMBER",
"concept": "METRIC"
}
]
},
"style": {
"nodeColor": {
"value": {
"color": "#000000"
}
}
},
"theme": {},
"dateRanges": {
"DEFAULT": {
"start": "20210501",
"end": "20210531"
},
"COMPARISON": {
"start": "20200501",
"end": "20200531"
}
},
"interactions": {
"onClick": {
"value": {
"type": "FILTER",
"data": {
"concepts": [
"qt_h6oibrb6wb",
"qt_i6oibrb6wb"
],
"values": [
[
"Afternoon",
"Sunday"
],
[
"Afternoon",
"Thursday"
],
[
"Morning",
"Tuesday"
]
]
}
},
"supportedActions": [
"FILTER"
]
}
}
}
objectFormat reference
objectRow
{
configId1: array(string | bool | number),
configId2: array(string | bool | number)
}
Field | Type | Description |
---|---|---|
configId | array | array of values associated with a particular config ID |
Sample objectFormat data
This is sample data
returned by using dscc.subscribeToData()
with the option
dscc.objectFormat
.
{
"tables": {
"COMPARISON": [
{
"configId1": ["Week 5", "cd"],
"configId2": [123]
}
],
"DEFAULT": [
{
"configId1": ["Week 1", "ab"],
"configId2": [24]
}
]
},
"fields": {
"configId1": [
{
"id": "qt_h6oibrb6wb",
"name": "time of day",
"type": "TEXT",
"concept": "DIMENSION"
},
{
"id": "qt_i6oibrb6wb",
"name": "day",
"type": "TEXT",
"concept": "DIMENSION"
}
],
"configId2": [
{
"id": "qt_m9dtntutsb",
"name": "metric",
"type": "NUMBER",
"concept": "METRIC"
}
]
},
"style": {
"nodeColor": {
"value": {
"color": "#000000"
}
}
},
"theme": {},
"dateRanges": {
"DEFAULT": {
"start": "20210501",
"end": "20210531"
},
"COMPARISON": {
"start": "20200501",
"end": "20200531"
}
},
"interactions": {
"onClick": {
"value": {
"type": "FILTER",
"data": {
"concepts": [
"qt_h6oibrb6wb",
"qt_i6oibrb6wb"
],
"values": [
[
"Afternoon",
"Sunday"
],
[
"Afternoon",
"Thursday"
],
[
"Morning",
"Tuesday"
]
]
}
},
"supportedActions": [
"FILTER"
]
}
}
}