Expressions Reference PivotData Microservice Documentation
PivotData microservice supports 2 types of calculations:
- row-level expressions: when calculation is evaluated before data aggregation. The syntax of the row-level expression depends on the data source: for example in case of SQL source this will be SQL expressions; you can use functions and syntax that is supported by your database. If you need this type of calculations see documentation on your data source for more details.
- formula over aggregated values (or calculated dimension): these expressions are evaluated after data aggregation by PivotData microservice engine. This kind of calculations is defined with expression-type cube members. The syntax of these expressions is the same for all types of data sources.
How to define expression-type dimension
"Dimensions": [ { "Name": "OrderDate_year_and_quarter", "LabelText": "Order Date (Year+Quarter)", "Type": "Expression", "Params": [ "OrderDate_year+\" Q\"+OrderDate_quarter", // this is an expression "OrderDate_year", // next entries are names of dimensions used in the expression "OrderDate_quarter" ] } ]
How to define expression-type measure
"Measures": [ { "Name": "Profit", "Type": "Expression", "Params": [ " SumOfIncomeValue - SumOfExpensesValue ", // expression "SumOfIncomeValue", // next entries are names of measures used in the formula "SumOfExpensesValue" ] }
Expressions cannot use another expression-type members as arguments.
Expressions syntax
- math operations (
+
,-
,*
,/
) - comparison operators (
==
,!=
,<
,<=
,>
,>=
) - boolean operators (
and
,or
,true
/false
constants) - string
"value"
or number5
constants - ternary conditional operator
(bool_condition_expression ? true_expression : false_expression)
- creation of array
new[] { value1, value2, value3 }
- creation of dictionary (key-value map)
new dictionary { {keyExpr, valueExpr} }
Evaluation context variables and special functions calls:
Function | Description |
---|---|
Parameter["param_name"] |
Value of specified parameter in the current report. |
IfNull(<value>, <value_if_null>) |
returns first argument if it is not null, otherwise second argument is returned |
IsEmpty(<value>) |
returns true if value is: null, empty string, zero-length array/list. |
Format(<fmt_string>, new[] { <value1>, <value2> } ) |
formats a string with .NET String.Format method. For example, fmt_string=${0:0.##} can be used to get output like "$5.27" |
SortBy(<displayValue>, <sortValue>) |
specifies a different value for sorting purposes. This function should be top-most and affects only pivot tables (in flat-table reports "Expression"-type dimensions are always ordered by first argument that corresponds to the real column in the dataset). |
Type conversion functions | |
Convert.ToInt32(<some_value>) |
converts to integer data type |
Convert.ToDecimal(<some_value>) |
converts to decimal data type (can contain fraction part) |
Convert.ToDateTime(<some_value>) |
converts to DateTime data type |
Convert.ToTimeSpan(<some_value>) |
converts to Time data type from strings like "hh:mm:ss" |
Convert.ToString(<some_value>) |
convert value of any type to string representation |
Date functions | |
Date.Year(<date_value>) |
returns year value |
Date.Quarter(<date_value>) |
returns quarter value: 1, 2, 3 or 4 |
Date.Month(<date_value>) |
returns month value |
Date.MonthName(<month_number>) |
returns month name (January, February etc) by month number (1-12) |
Date.MonthNameShort(<month_number>) |
returns short month name (Jan, Feb etc) by month number (1-12) |
Date.Day(<date_value>) |
returns day value |
Date.DayOfWeek(<date_or_int_value>) |
returns day-of-week name: Monday, Tuesday etc. If argument is a number it should be in the range [0..6]. |
Date.DayOfWeekShort(<date_or_int_value>) |
returns day-of-week short name: Mon, Tue etc. If argument is a number it should be in the range [0..6]. |
Date.FirstDayOfWeek() |
returns first day-of-week according to the engine's formatting culture (can be customized on SeekTable installations): a number in the range [0..6] where 0 = Sunday, 1 = Monday etc. |
Date.Week(<date_value>) |
returns week number |
<datetime_value>.DayOfWeek |
returns date's day-of-week number value in the range [0..6] (0 = Sunday, 1 = Monday etc). |
<datetime_value>.AddYears(<integer_value>) |
returns a new DateTime that adds the specified number of years. |
<datetime_value>.AddMonths(<integer_value>) |
returns a new DateTime that adds the specified number of months . |
<datetime_value>.AddDays(<integer_value>) |
returns a new DateTime that adds the specified number of days. |
Date.Now() |
returns a <datetime_value> that is set to current date/time value (in server's timezone). |
Date.UtcNow() |
returns a <datetime_value> that is set to current date/time value, expressed as the Coordinated Universal Time (UTC). |
Date.TimezoneUtcOffsetHours(<linux_tz_name>) |
returns offset in hours for the specified timezone name. |
Date.ISOWeek.GetWeekOfYear(<date_value>) |
calculates the ISO week number of a given Gregorian date (a number between 1 and 53). |
Date.ISOWeek.GetWeeksInYear(<year_value>) |
calculates the number of weeks (52 or 53) in a given ISO week-numbering year. |
Date.ISOWeek.GetYear(<date_value>) |
calculates the ISO week-numbering year (also called ISO year) mapped to the input Gregorian date (a number between 1 and 9999). |
Date.ISOWeek.GetYearStart(<year_value>) |
returns a <datetime_value> that is the Gregorian date at which the week-numbering year will start. |
Date.ISOWeek.GetYearEnd(<year_value>) |
returns a <datetime_value> that is the Gregorian date at which the week-numbering year will end. |
String functions | |
String.Concat(<array_of_values>) |
concatenates several string values into one resulting string. In case of non-string values they are converted to string type. |
String.Join("separator", <array_of_values>) |
Concatenates all the elements of a string array, using the specified separator between each element. In case of non-string values they are converted to string type. |
String.Split("separator", <string_value>) |
Splits a string into substrings using a specified separator string to determine where to make each split. Result is an array of strings. |
String.Trim(<string_value>) |
Removes all leading and trailing white-space characters from the specified string. |
<string_value>.Replace("old_value","new_value") |
Replaces all occurrences of a specified string with new value. |
<string_value>.Substring(<start_index> [, <length> ]) |
Retrieves a substring from this instance. |
<string_value>.Length |
Gets the number of characters in the string value. |
Math functions | |
Math.Round(<number_value>) |
Rounds a decimal value to the nearest integral value, and rounds midpoint values to the nearest even number. |
Math.Round(<number_value>, <decimals>) |
Rounds a decimal value to a specified number of fractional digits (valid value is 0..28), and rounds midpoint values to the nearest even number. |
Math.Floor(<number_value>) |
Returns the largest integral value less than or equal to the specified number. |
Math.Ceiling(<number_value>) |
Returns the smallest integral value that is greater than or equal to the specified number. |
Math.Sqrt(<number_value>) |
Returns the square root of a specified number. |
Math.Pow(<number_value>, <power>) |
Returns a specified number raised to the specified power. |
Regex functions | |
Regex.Replace(<input_string_value>, "pattern", "replacement") |
Replaces all strings that match a specified regular expression with a specified replacement string. Note: use .NET syntax of regular expressions. |
Regex.IsMatch(<input_string_value>, "pattern") |
Returns true if the regular expression finds a match in the input string. |
HTML-related functions | |
Json.Serialize(<value>) |
Serializes the specified object to a JSON string. |
Html.UrlEncode(<value>) |
Converts a string value into a URL-encoded string. |
Html.HtmlEncode(<value>) |
Converts a string to an HTML-encoded string. |
Html.HtmlDecode(<value>) |
Converts a string that has been HTML-encoded into a decoded string. |
Html.Link(<url>, <text> [, <bool_open_in_new_window> ]) |
Returns <a> tag that is not HTML-encoded in the report. |
Html.SetTextColor(<value>, <html_color>) |
Sets font color for the cell (TD element); value can be a result of Html.Raw . This affects HTML, PDF, JSON and Excel exports. |
Html.SetBackgroundColor(<value>, <html_color>) |
Sets background color for the cell (TD element); value can be a result of Html.Raw . This affects HTML, PDF, JSON and Excel exports. |
Html.Raw(<html_content>) |
Returns markup that is not HTML-encoded in the report. Use this function very carefully: incorrect HTML may break report layout and even affect SeekTable app functionality. |
Html.Raw(<html_content>,<non_html_value>) |
By providing 2-nd argument you can specify alternative value for non-HTML report exports (like CSV, Excel). Non-HTML value is also needed if you use custom HTML formatting for measure and want to display a chart. |
Html.SetReportParameters(<dictionary_param_values>, <text>) |
When user clicks on specified <text> apply specified report parameters. This function is useful for quick database-level filtering in reports. |
Functions only for calculated dimensions | |
Dimension["dimension_name"] |
returns value of the dimension with name="dimension_name" (it should be specified as formula argument in "Parameters").
If dimension name contains only alphanum and "_" its value can be accessed with just dimension_name .
|
Cube("cubeId").Lookup(value,"keyDimension","lookupDimension") |
Resolve external lookup by specified value. keyDimension and lookupDimension are dimension names in the cube with ID=cubeId (you can get it from the URL). |
Functions only for calculated measures | |
Measure["measure_name"] |
value of the measure with name="measure_name" (it should be specified as formula argument in "Parameters").
If measure name contains only alphanum and "_" its value can be accessed with just measure_name .
|
PivotTable.GrandTotal("measure_name") |
grand total value of the measure with name="measure_name". This measure name should be declared as a formula argument in "Parameters". |
PivotTable.RowTotal("measure_name") |
row total value of the measure with name="measure_name". This measure name should be declared as a formula argument in "Parameters". |
PivotTable.ColumnTotal("measure_name") |
column total value of the measure with name="measure_name". This measure name should be declared as a formula argument in "Parameters". |
PivotTable.IsCellRowTotal() |
indicates whether this cell's value is a row total. |
PivotTable.IsCellColumnTotal() |
indicates whether this cell's value is a column total. |
PivotTable.IsCellGrandTotal() |
indicates whether this cell's value is a grand total. |
PivotTable.IsCellSubTotal() |
indicates whether this cell's value is a sub-total (including row/column/grand totals). |
Cube("cubeId").Measure("measureName", dimMappingDictionary) |
Get the measure of the specified cube. dimMappingDictionary determines mapping between source and target cube dimension names; for
example:
new dictionary{ {"source_date_year", "target_date_year"}, {"source_date_month", "target_date_month"} }. If dimension names used in report are the same in both cubes you can specify null value for the mapping dictionary.
Note: you can use external measure only in reports with dimensions that exist in both cubes. |