curl --request POST \
--url http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/vnd.composer.v3+json' \
--data '
{
"expression": "SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate",
"name": "sum_of_sales",
"label": "Sum of Sales",
"visible": true,
"timeFormat": {
"timeZone": "UTC",
"options": {
"hour12": true
}
}
}
'import requests
url = "http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics"
payload = {
"expression": "SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate",
"name": "sum_of_sales",
"label": "Sum of Sales",
"visible": True,
"timeFormat": {
"timeZone": "UTC",
"options": { "hour12": True }
}
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/vnd.composer.v3+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/vnd.composer.v3+json'
},
body: JSON.stringify({
expression: 'SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate',
name: 'sum_of_sales',
label: 'Sum of Sales',
visible: true,
timeFormat: {timeZone: 'UTC', options: {hour12: true}}
})
};
fetch('http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'expression' => 'SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate',
'name' => 'sum_of_sales',
'label' => 'Sum of Sales',
'visible' => true,
'timeFormat' => [
'timeZone' => 'UTC',
'options' => [
'hour12' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/vnd.composer.v3+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics"
payload := strings.NewReader("{\n \"expression\": \"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate\",\n \"name\": \"sum_of_sales\",\n \"label\": \"Sum of Sales\",\n \"visible\": true,\n \"timeFormat\": {\n \"timeZone\": \"UTC\",\n \"options\": {\n \"hour12\": true\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/vnd.composer.v3+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/vnd.composer.v3+json")
.body("{\n \"expression\": \"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate\",\n \"name\": \"sum_of_sales\",\n \"label\": \"Sum of Sales\",\n \"visible\": true,\n \"timeFormat\": {\n \"timeZone\": \"UTC\",\n \"options\": {\n \"hour12\": true\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/vnd.composer.v3+json'
request.body = "{\n \"expression\": \"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate\",\n \"name\": \"sum_of_sales\",\n \"label\": \"Sum of Sales\",\n \"visible\": true,\n \"timeFormat\": {\n \"timeZone\": \"UTC\",\n \"options\": {\n \"hour12\": true\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"expression": "SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate",
"name": "sum_of_sales",
"label": "Sum of Sales",
"visible": true,
"numberFormat": {
"type": "PLAIN",
"decimals": 2,
"separator": true,
"negative": "SIGNED",
"standardUnit": "NONE",
"storageUnit": "BYTES",
"currencyCode": "USD"
},
"timeFormat": {
"timeZone": "UTC",
"options": {
"second": "NUMERIC",
"minute": "NUMERIC",
"hour": "NUMERIC",
"day": "NUMERIC",
"weekday": "LONG",
"week": "TWO_DIGIT",
"month": "NUMERIC",
"quarter": "TWO_DIGIT",
"year": "NUMERIC",
"dayOfYear": "NUMERIC",
"hour12": true
}
},
"granularity": "MILLISECOND",
"dataType": "ATTRIBUTE"
}{
"error": "<string>",
"details": "<string>",
"message": "<string>",
"path": "<string>",
"status": "<string>",
"code": "<string>",
"errorCode": "<string>",
"timestamp": "<string>",
"problems": [
{
"name": "<string>",
"message": "<string>",
"level": "ERROR",
"dependencies": {}
}
]
}{
"timestamp": "2023-11-07T05:31:56Z",
"status": 123,
"error": "<string>",
"message": "<string>",
"path": "<string>"
}{
"error": "<string>",
"details": "<string>",
"message": "<string>",
"path": "<string>",
"status": "<string>",
"code": "<string>",
"errorCode": "<string>",
"timestamp": "<string>",
"problems": [
{
"name": "<string>",
"message": "<string>",
"level": "ERROR",
"dependencies": {}
}
]
}{
"error": "<string>",
"details": "<string>",
"message": "<string>",
"path": "<string>",
"status": "<string>",
"code": "<string>",
"errorCode": "<string>",
"timestamp": "<string>",
"problems": [
{
"name": "<string>",
"message": "<string>",
"level": "ERROR",
"dependencies": {}
}
]
}Creates a data source custom metric
Requires WRITE permission on the source or READ permission on the source and ROLE_EDIT_FORMULAS
curl --request POST \
--url http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/vnd.composer.v3+json' \
--data '
{
"expression": "SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate",
"name": "sum_of_sales",
"label": "Sum of Sales",
"visible": true,
"timeFormat": {
"timeZone": "UTC",
"options": {
"hour12": true
}
}
}
'import requests
url = "http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics"
payload = {
"expression": "SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate",
"name": "sum_of_sales",
"label": "Sum of Sales",
"visible": True,
"timeFormat": {
"timeZone": "UTC",
"options": { "hour12": True }
}
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/vnd.composer.v3+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/vnd.composer.v3+json'
},
body: JSON.stringify({
expression: 'SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate',
name: 'sum_of_sales',
label: 'Sum of Sales',
visible: true,
timeFormat: {timeZone: 'UTC', options: {hour12: true}}
})
};
fetch('http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'expression' => 'SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate',
'name' => 'sum_of_sales',
'label' => 'Sum of Sales',
'visible' => true,
'timeFormat' => [
'timeZone' => 'UTC',
'options' => [
'hour12' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/vnd.composer.v3+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics"
payload := strings.NewReader("{\n \"expression\": \"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate\",\n \"name\": \"sum_of_sales\",\n \"label\": \"Sum of Sales\",\n \"visible\": true,\n \"timeFormat\": {\n \"timeZone\": \"UTC\",\n \"options\": {\n \"hour12\": true\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/vnd.composer.v3+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/vnd.composer.v3+json")
.body("{\n \"expression\": \"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate\",\n \"name\": \"sum_of_sales\",\n \"label\": \"Sum of Sales\",\n \"visible\": true,\n \"timeFormat\": {\n \"timeZone\": \"UTC\",\n \"options\": {\n \"hour12\": true\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://10.2.4.166:8080/composer/api/sources/{sourceId}/custom-metrics")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/vnd.composer.v3+json'
request.body = "{\n \"expression\": \"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate\",\n \"name\": \"sum_of_sales\",\n \"label\": \"Sum of Sales\",\n \"visible\": true,\n \"timeFormat\": {\n \"timeZone\": \"UTC\",\n \"options\": {\n \"hour12\": true\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"expression": "SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate",
"name": "sum_of_sales",
"label": "Sum of Sales",
"visible": true,
"numberFormat": {
"type": "PLAIN",
"decimals": 2,
"separator": true,
"negative": "SIGNED",
"standardUnit": "NONE",
"storageUnit": "BYTES",
"currencyCode": "USD"
},
"timeFormat": {
"timeZone": "UTC",
"options": {
"second": "NUMERIC",
"minute": "NUMERIC",
"hour": "NUMERIC",
"day": "NUMERIC",
"weekday": "LONG",
"week": "TWO_DIGIT",
"month": "NUMERIC",
"quarter": "TWO_DIGIT",
"year": "NUMERIC",
"dayOfYear": "NUMERIC",
"hour12": true
}
},
"granularity": "MILLISECOND",
"dataType": "ATTRIBUTE"
}{
"error": "<string>",
"details": "<string>",
"message": "<string>",
"path": "<string>",
"status": "<string>",
"code": "<string>",
"errorCode": "<string>",
"timestamp": "<string>",
"problems": [
{
"name": "<string>",
"message": "<string>",
"level": "ERROR",
"dependencies": {}
}
]
}{
"timestamp": "2023-11-07T05:31:56Z",
"status": 123,
"error": "<string>",
"message": "<string>",
"path": "<string>"
}{
"error": "<string>",
"details": "<string>",
"message": "<string>",
"path": "<string>",
"status": "<string>",
"code": "<string>",
"errorCode": "<string>",
"timestamp": "<string>",
"problems": [
{
"name": "<string>",
"message": "<string>",
"level": "ERROR",
"dependencies": {}
}
]
}{
"error": "<string>",
"details": "<string>",
"message": "<string>",
"path": "<string>",
"status": "<string>",
"code": "<string>",
"errorCode": "<string>",
"timestamp": "<string>",
"problems": [
{
"name": "<string>",
"message": "<string>",
"level": "ERROR",
"dependencies": {}
}
]
}Authorizations
HTTP Basic authentication using global administrator credentials (username and password).
Path Parameters
Body
Custom metric representation
Expression that defines the custom metric
"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate"
Unique identifier of the custom metric within the source across all custom metrics and fields. It's immutable and may be specified in create request only
255"sum_of_sales"
User visible representation of the custom metric.
255"Sum of Sales"
Whether the custom metric should be visible to users on a visual
Number format of the custom metric value display
Show child attributes
Show child attributes
Time format of the custom metric value display
Show child attributes
Show child attributes
The minimum time granularity of this field.
MILLISECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR Data type of the custom metric. It’s detected automatically based on the metric expression
ATTRIBUTE, NUMBER, INTEGER, TIME, TEXT, HIERARCHY, NULL Response
The custom metric was created
Custom metric representation
Expression that defines the custom metric
"SUM(sales_in_usd) + SUM(sales_in_uah) * uah_to_usd_exchange_rate"
Unique identifier of the custom metric within the source across all custom metrics and fields. It's immutable and may be specified in create request only
255"sum_of_sales"
User visible representation of the custom metric.
255"Sum of Sales"
Whether the custom metric should be visible to users on a visual
Number format of the custom metric value display
Show child attributes
Show child attributes
Time format of the custom metric value display
Show child attributes
Show child attributes
The minimum time granularity of this field.
MILLISECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR Data type of the custom metric. It’s detected automatically based on the metric expression
ATTRIBUTE, NUMBER, INTEGER, TIME, TEXT, HIERARCHY, NULL Was this page helpful?