Widget is the basic visualization element at Wizz-Vis. It represent a KPI selecting Dimensions and Aggregators from a Datasource. The style and behavior could be modified with the built-in options from each widget.

This document is a guide to introduce the wide variety of widgets and will instruct the creation depending on the widget type and the data wants to be show.

Attributes

Each widget has the below attributes. Some of them are optional attributes, depending on the widget’s type. Each particularity will be referenced later in each widget’s section.

  • datasource_id [ID]
  • dashboard_id [ID]
  • title [String]
  • row [Integer]
  • col [Integer]
  • size_x [Integer]
  • size_y [Integer]
  • type [String]
  • range [String]
  • start_time [DateTime]
  • end_time [DateTime]
  • granularity [String]
  • limit [Integer]
  • options [Hash/JSON]

Also, widgets have relations with other entities:

  • dimensions [Array]
  • aggregators [Array]
  • post_aggregators [Array]
  • filters [Array]

datasource_id

Required

Association for the Druid’s datasource.

dashboard_id

Required

Association for the dashboard selected to contain the widget.

row and col

Required

Represent the row and column of the widget in the dashboard that is contained.

size_x and size_y

Required

These attributes represent the width and height of the widget in the dashboard that is contained.

Dashboard are grid based with 12 columns, so size_x has to be between 1 and 12.

type

This attribute will determine the type of widget to be represented.

range

This attribute is used to set the interval.

The possible values are:

  • last_30_minutes
  • last_1_hour
  • last_6_hours
  • last_1_day
  • last_7_days
  • last_30_days
  • current_day
  • current_week
  • current_month
  • previous_day
  • previous_week
  • previous_month

These are the predefined ranges. Also, we can use last ranges with the format last_x_y, where x should be a float number and y one of seconds, minutes, hours, days, weeks or months.

start_time and end_time

Used to include a fixed interval. If range is setted, these attributes are ignored.

The format used is:

YYYY-mm-dd HH:MM:SS

For example:

2016-11-04 18:55:00

granularity

The values allowed for granularity are:

  • all
  • minute
  • fifteen_minute
  • thirty_minute
  • hour
  • day

Also, granularity can be represented with period:

  • PT1M
  • PT15M
  • PT30M
  • PT1H
  • P1D

Widgets which must have the granularity set to all, do not need to indicate the granularity at the time of creation.

If a widget with granularity other than all has no granularity setted, it will be assigned one related to the selected time interval. Otherwise, it will use its own granularity.

  • PT1M: Less than or equal to one hour
  • PT5M: From one to six hours
  • PT1H: From six hours to one week
  • P1D: From one week to three months
  • P1W: From three months to one year
  • P1M: More than one year

You have more information in Druid docs: Aggregation Granularity.

limit

Some widgets need the limit attribute to restrict the number of elements to be returned.

By default, the limit will be 5.

options

This attribute is used to modify the style and behavior of some widgets. The content depends on the type of widget created.

For all widgets, we can specify an image or a background color as follows:

{
  "background": {
    "image": "http://www.aerobusbcn.com/sites/default/media/fira2.jpg",
    "opacity": "0.3"
  }
}
{
  "background": {
    "color": "#ffff00" | "transparent"
  }
}

We will cover specific parameters later.

dimensions

Each widget could represent one or more dimensions, depending on widget’s type.

aggregators

Each widget could represent one or more aggregator, depending on widget’s type. Also, aggregators could be used to be referenced by post aggregators.

post_aggregators

Various aggregators could be combined between them and make operations, resulting in a new metric to be used by the widget to be represented.

filters

Widget’s data can be filter, indicating which rows of data should be included in the computation for a query. It’s essentially the equivalent of the WHERE clause in SQL. Wizz-vis supports the following types of filters:

  • Equality
  • Inequality
  • Comparasion
  • Regexp

Widget Types

WidgetSerie

Line Serie
Line Serie Widget
Bar Serie
Bar Serie Widget
Area Serie
Area Serie Widget

This type of widget will represent timeseries, so the attributes necessaries, in addition to the required ones, are:

  • granularity (one different to all)
  • aggregators (at least one)

We can select between three types of chart. It can be configured through options attribute with one of these values:

  • line
  • area
  • bar
{
  "type": "area"
}

By default, if no value is provided, line will be used.

This widget also has the compare and threshold features available.

WidgetBar

Bar Widget

It will represent a TopN query. In addition to the required attributes, we have to set:

  • dimensions (one)
  • aggregators (one)
  • limit

If more than one aggregator is set, only one will be represented (or a post aggregation that use these aggregators if necessary).

We can set the main color of the graph through the options attribute.

{
  "color": "red" | "#ff0000"
}

This widget also has the threshold feature available.

WidgetPie

Pie Widget

It will represent a TopN query. In addition to the required attributes, we have to set:

  • dimensions (one)
  • aggregators (one)
  • limit

WidgetValue

Value Widget
Value Widget

It will represent a single value looking at the max, min, average of sum of values in the serie returned. Also, the serie and a gauge with thresholds could be represented in the widget.

In addition to the required attributes, we have to set:

  • granularity
  • aggregators (one)
  • options

We can select between various ways of getting the value from the timeserie query that the widget made. It can be configured through options attribute with one of these values:

  • current (last value returned in the serie)
  • max
  • min
  • average
  • total

By default, if no value is provided, current will be used.

{
  "value": "average"
}

If we want to represent a gauge, options must be set as:

{
  "gauge": {
    "show": true,
    "max": 500000,
    "thresholds": [
      [0.25, "#3DCC91"],
      [0.5, "#FFCC00"],
      [0.75, "#FFB366"],
      [1, "#FF7373"]
    ]
  }
}

If we want to represent the serie with a custom color, options must be set as:

{
  "serie": {
    "show": true,
    "color": "yellow" | "#ffff00" (default: #3DCC91)
  }
}

This widget also has the compare feature available.

WidgetTable

Table Widget

It will represent a TopN or GroupBy query. In addition to the required attributes, we have to set:

  • dimensions (at least one)
  • aggregators (at least one)
  • limit

This widget also has the compare feature available.

If the table use more than one aggregator, we can select which ones use the compare feature through the compare option at options attribute:

"compare": {
  "range": "previous_period",
  "aggregators": ["events"]
}

If the aggregators option is not included, all aggregators used in the table will show the compare info.

WidgetHeatmap

Heatmap Widget
  • dimensions (one, representing coordinates)
  • aggregators (one)
  • limit

Also, we can set the visibility of the legend, or the size, color and behavior of each point through the options attribute.

"options": {
  "legend": true | false, (default: true)
  "max_zoom": 15, (default: 1)
  "max_value": "max" | "average" | Number, (default: "max")
  "blur": 5, (default: 10)
  "radius": 15, (default: 20)
  "gradient": {
    "0.4": "blue", "0.6": "cyan", "0.7": "lime",
    "0.8": "yellow", "1.0": "red" (default colors)
  }
}
  • max_zoom: maximum zoom for heatmap. For higher values of this zoom value, each point represents its maximum intensity.
  • max_value: max intensity value for heatmap. This aggregation value will be represented in red and the rest of the colors will be calculated proportionally. Higher aggregation values will always be red. You can adjust it to the higher or lower aggregation value presented in the widget. By default, it assigns the max of the aggregation values of all the points.
  • blur: blur for heatmap points.
  • radius: radius for heatmap points.
  • gradient: object defining gradient stop points for heatmap.

WidgetLocation

Location Widget

There are two ways to represent this widget. One of them using the coordinates as a dimension and another one using the coordinates as a aggregator.

In the dimension way, we have to set, apart to the required attributes:

  • dimensions (two or more, one representing coordinates and the others to tag the marker)
  • aggregators (at least one)
  • granularity (one different to all)
  • limit

In the aggregator way, we have to set, apart to the required attributes:

  • dimensions (at least one)
  • aggregators (at least one, one representing coordinates as stringLast or stringFirst aggregator)
  • granularity (all)
  • limit

WidgetPlaneLocation

Plane Location Widget

Similar to WidgetLocation, but representing the markers over an image instead of a map.

There are two ways to represent this widget. One of them using the coordinates as a dimension and another one using the coordinates as a aggregator.

In the dimension way, we have to set, apart to the required attributes:

  • dimensions (two or more, one representing coordinates and the others to tag the marker)
  • aggregators (at least one)
  • granularity (one different to all)
  • limit

In the aggregator way, we have to set, apart to the required attributes:

  • dimensions (at least one)
  • aggregators (at least one, one representing coordinates as stringLast or stringFirst aggregator)
  • granularity (all)
  • limit

It needs GPS markers to convert the latitude-longitude data to x-y points. Al least, three gps markers have to be configured.

x-y points are references for a image point starting at top-left corner of the image.

To keep the proportions of the used image, we have to use keep_ratio property.

The options attribute would be as follows:

{
  "image": "https://www.bookingtaxibarcelona.com/wp-content/uploads/2015/03/fira-gran-via-map.png",
  "keep_ratio": true,
  "gps_markers": [
    { "x": 261, "y": 208, "latitude": 41.355151, "longitude": 2.127733 },
    { "x": 530, "y": 217, "latitude": 41.357172, "longitude": 2.130533 },
    { "x": 785, "y": 406, "latitude": 41.3559, "longitude": 2.138092 }
  ]
}

Also, the marker’s color could be configured through thresholds. They can be configured with the options attribute.

{
  "threshold_metric": "events",
  "thresholds": [
    [200, "#3DCC91"],
    [500, "#FFB366"],
    [900, "#FF7373"]
  ]
}

So, if the marker is above 500 but below 900 for the configured metric, it will have the color #FFB366.

If no threshold_metric is configured, it will use the first aggregator configured for the widget to calculate the marker’s color.

WidgetPlane

Plane Widget

Similar to WidgetHeatmap, but representing the data over an image instead of a map.

  • dimensions (one, representing coordinates)
  • aggregators (one)
  • limit

It needs GPS markers to convert the latitude-longitude data to x-y points. Al least, three gps markers have to be configured.

x-y points are references for a image point starting at top-left corner of the image.

To keep the proportions of the used image, we have to use keep_ratio property.

We can show or hide the legend through the legend property by setting it to true or false (default to true).

The options attribute would be as follows:

{
  "max_value": "max" | "average" | Number, (default: "max")
  "opacity": 0.5, (default: 1)
  "radius": 15, (default: 40)
  "image": "https://www.bookingtaxibarcelona.com/wp-content/uploads/2015/03/fira-gran-via-map.png",
  "keep_ratio": true,
  "gps_markers": [
    { "x": 261, "y": 208, "latitude": 41.355151, "longitude": 2.127733 },
    { "x": 530, "y": 217, "latitude": 41.357172, "longitude": 2.130533 },
    { "x": 785, "y": 406, "latitude": 41.3559, "longitude": 2.138092 }
  ],
  "legend": false
}

WidgetSankey

Sankey Widget

It will represent a GroupBy query. In addition to the required attributes, we have to set:

  • dimensions (two or more)
  • aggregators (one)
  • limit

The order of the dimensions is a bit random. So the order could be set in the options attribute:

{
  "ordered_dimensions": ["src_ip", "protocol", "dst_ip"]
}

The name of dimensions at ordered_dimensions should be the same as those configured at dimensions relation.

WidgetChord

Chord Widget

It will represent a GroupBy query. In addition to the required attributes, we have to set:

  • dimensions (two: origin and destination)
  • aggregators (one)
  • limit

The order of the dimensions is a bit random. So the origin and the destination to calculate the matrix values can be set in the options attribute. Also, we can set the legend option:

{
  "legend": true,
  "origin": "src",
  "destination": "dst"
}

WidgetMultiserie

Multiserie Widget

It will represent a Timeserie query for each value obtained from a TopN query. In addition to the required attributes, we have to set:

  • dimensions (one)
  • aggregators (one)
  • granularity (one different to all)
  • limit

We can select between three types of chart. It can be configured through options attribute, setting the type property, with one of these values:

  • line
  • area
  • bar

By default, if no value is provided, line will be used.

We can set the stacked property to true or false if we want the graphs to be stacked.

This widget also has the threshold feature available.

options attribute example:

{
  "type": "area",
  "stacked": true,
  "thresholds": [
    { "value": 200000000, "color": "red", "label": "Threshold 1" },
    { "value": 100000000, "color": "#000000", "label": "Threshold 2" }
  ]
}

WidgetRoute

Route Widget

There are two ways to represent this widget. One of them using the coordinates as a dimension and another one using the coordinates as a aggregator.

In the dimension way, we have to set, apart to the required attributes:

  • dimensions (two, one representing coordinates and another to represent the asset)
  • aggregators (one)
  • granularity (one different to all)
  • limit

In the aggregator way, we have to set, apart to the required attributes:

  • dimensions (one representing the asset)
  • aggregators (one representing coordinates as stringLast or stringFirst aggregator)
  • granularity (all)
  • limit

We support three different routing profiles:

  • driving
  • walking
  • cycling

By default, if no routing profile is selected, driving will be the one used.

Also, distance unit can be configured:

  • km
  • mi

By default, if no distance unit is selected, km will be the one used.

It can be set in the options attribute:

{
  "routing_profile": "driving",
  "distance_unit": "mi"
}

WidgetPlaneRoute

Plane Route Widget

There are two ways to represent this widget. One of them using the coordinates as a dimension and another one using the coordinates as a aggregator.

In the dimension way, we have to set, apart to the required attributes:

  • dimensions (two, one representing coordinates and another to represent the asset)
  • aggregators (one)
  • granularity (one different to all)
  • limit

In the aggregator way, we have to set, apart to the required attributes:

  • dimensions (one representing the asset)
  • aggregators (one representing coordinates as stringLast or stringFirst aggregator)
  • granularity (all)
  • limit

It needs GPS markers to convert the latitude-longitude data to x-y points. Al least, three gps markers have to be configured.

x-y points are references for a image point starting at top-left corner of the image.

To keep the proportions of the used image, we have to use keep_ratio property.

The options attribute would be as follows:

{
  "image": "https://www.bookingtaxibarcelona.com/wp-content/uploads/2015/03/fira-gran-via-map.png",
  "keep_ratio": true,
  "gps_markers": [
    { "x": 261, "y": 208, "latitude": 41.355151, "longitude": 2.127733 },
    { "x": 530, "y": 217, "latitude": 41.357172, "longitude": 2.130533 },
    { "x": 785, "y": 406, "latitude": 41.3559, "longitude": 2.138092 }
  ]
}

WidgetImage

This is a special widget, because no Druid query will be done. However, required attributes have to be set.

Also, the attributes that can be configured using options field are:

{
  "image": "https://www.bookingtaxibarcelona.com/wp-content/uploads/2015/03/fira-gran-via-map.png",
  "keep_ratio": true,
  "opacity": "1",
  "image-link": {
    "url": "/dashboards/43",
    "type": "dashboard"
  }
}

To keep the proportions of the used image, we have to use keep_ratio property.

A link could be associated to the image. When clicking, it will open the url, that could be an external resource ("type": "absolute") or a dashboard link ("type": "dashboard"). You can redirect to the previous page by setting the property url to back ("url": "back").

WidgetHistogram

It will represent a Timeseries query. This widget will use a histrogram aggregation.

It will have two ways of representation:

  • Representation of result fetched from Druid.
  • Each value will discard the value of the previous section.

In addition to the required attributes, we have to set:

  • aggregators (one)
  • limit

We can set the optional discard values option by specifying a value between previous or next:

"options": {
  "discard_values": "previous" | "next"
}

We use the widget limit attribute to specify the numBuckets. And the default value for the histogram type is ‘equalBuckets’, so to configure numBuckets we’ll only need:

"limit": 5,
"options": {
  "discard_values": "previous" | "next",
  "histogram": {}
}

To configure customBuckets through options:

"limit": 4,
"options": {
  "discard_values": "previous" | "next",
  "histogram": {
    "type": "customBuckets",
    "breaks": [2, 150, 200, 3000, 5000]
  }
}

This widget also has the threshold feature available.

WidgetText

This is a special widget, because no Druid query will be done. However, required attributes have to be set.

Also, the attributes that can be configured using options field are:

"options": {
  "text": "Your text",
  "fontSize": "42px"
}

Misc

Coordinates

The dimensions and aggregators could represent coordinates in the format latitude,longitude, i.e. 37.3509227,-6.0607913. They have to be named using the regexp /coordinate|latlong|latlng/.