# Functions

> Discover the roles and categories of functions for manipulating and transforming data.

https://docs.pandasuite.com/essentials/data/functions/

**Functions play a key role in data manipulation and transformation in PandaSuite. They allow you to perform specific operations on different data types, such as numbers, strings, dates, and arrays.**

## Understanding the Role of Functions

A function takes parameters that determine its behavior. These parameters specify the data the function should act on and may include operation-specific options. Once executed, the function returns a result that can be used in the application.

Some functions are only compatible with specific data types. For example, a mathematical function cannot be applied to a string without prior conversion.

## General Functions

### Evaluate

Evaluates an expression and returns the result.

**Parameter:** Expression (string containing a mathematical or logical operation)

**Returns:** True or false

### By Key

Returns the value of an item based on its key.

**Parameter:** Key

**Returns:** Value associated with the key

### By Index

Returns the value of an item based on its index (the first element is indexed at 0).

**Parameter:** Index

**Returns:** Value at the given index

### By Id

Returns the value of an item based on its unique identifier.

**Parameter:** Identifier

**Returns:** Associated value

---

## Mathematical Functions

Mathematical functions operate on [Number](https://docs.pandasuite.com/essentials/data/data-types/#number) data types and perform arithmetic, trigonometric, and formatting operations.

> **Info**
>
> 💡 If you use the value from a [Text Input](https://docs.pandasuite.com/essentials/components/text-input/)
> component, be sure to use the **Parse Number** function to convert the value
> before performing operations.

### Add

Adds a number to the input value.

**Parameter:** Number to add

**Example:** `10 + 5` returns `15`

### Subtract

Subtracts a number from the input value.

**Parameter:** Number to subtract

**Example:** `10 - 3` returns `7`

### Multiply

Multiplies the input value by a number.

**Parameter:** Multiplier

**Example:** `10 × 3` returns `30`

### Divide

Divides the input value by a number.

**Parameter:** Divisor

**Example:** `10 ÷ 2` returns `5`

### Round

Rounds to the nearest integer.

**Example:** `4.7` returns `5`, `4.3` returns `4`

### Floor

Returns the largest integer less than or equal to a number.

**Example:** `4.7` returns `4`

### Ceil

Returns the smallest integer greater than or equal to a number.

**Example:** `4.3` returns `5`

### Sqrt

Returns the square root of a number.

**Example:** `16` returns `4`

### Cbrt

Returns the cube root of a number.

**Example:** `27` returns `3`

### Tan

Returns the tangent of an angle in radians.

**Example:** `tan(π/4)` returns `1`

### Cos

Returns the cosine of an angle in radians.

**Example:** `cos(0)` returns `1`

### Sin

Returns the sine of an angle in radians.

**Example:** `sin(π/2)` returns `1`

> **Tip**
>
> 💡 Trigonometric functions expect angles in radians. To convert degrees to
> radians, multiply by π/180.

### Pow

Returns a number raised to a given power.

**Parameters:**

- **Base:** The number to raise
- **Exponent:** The power to raise to

**Example:** `2^3` (2 to the power of 3) returns `8`

### Abs

Returns the absolute value of a number.

**Example:** `-5` returns `5`

### Format Number

Returns a number in the requested format.

**Parameters:**

- **Minimums (Fractions):** The minimum number of decimals to use
- **Maximums (Fractions):** The maximum number of decimals to use

> **Info**
>
> 💡 Reference documentation:
> [NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat)

### Parse Number

Converts a string to a number.

### Parse Color

Transforms an integer or a string into a [Color](https://docs.pandasuite.com/essentials/data/data-types/#color) object.

### Parse Coordinates

Parses a string containing coordinates and returns a [Coordinate](https://docs.pandasuite.com/essentials/data/data-types/#coordinate) object.

**Example formats:** `"48.8566, 2.3522"` or `"48.8566;2.3522"`

**Returns:** Coordinate object

Useful when receiving coordinate data as strings from external APIs or CSV files.

---

## Text Functions

These functions operate on [Text](https://docs.pandasuite.com/essentials/data/data-types/#text) data types for string manipulation, formatting, and parsing.

### Truncate

Limits the number of characters in a text by adding "..." at the end.

**Parameter:** Maximum length

**Returns:** Truncated text string

### Split

Splits a string into sub-strings using a separator character.

**Parameters:**

- **Text:** The string to split
- **Separator:** Character to split on (e.g., `,` or `;`)

**Returns:** Array of sub-strings

**Example:** `"apple,banana,orange"` with separator `,` returns `["apple", "banana", "orange"]`

### LowerCase

Returns a copy of the string with all characters converted to lowercase.

**Example:** `"HELLO World"` becomes `"hello world"`

### UpperCase

Returns a copy of the string with all characters converted to uppercase.

**Example:** `"hello World"` becomes `"HELLO WORLD"`

### Concat

Concatenates multiple string values together and returns a combined string.

**Parameters:** Multiple text values

**Returns:** Combined string

### Markdown

Converts text written in markdown into rich, stylized text that can be displayed in [Text components](https://docs.pandasuite.com/essentials/design/text/).

**Example:** `"**bold** and *italic*"` becomes formatted text with bold and italic styling.

### Parse JSON

Parses a string containing JSON data and returns an object or array.

**Parameter:** JSON string

**Returns:** Object, array, or value

### Stringify JSON

Converts an object or array to a JSON string representation.

**Parameter:** Object or array

**Returns:** JSON formatted string

---

## URL Functions

These functions operate on [URL](https://docs.pandasuite.com/essentials/data/data-types/#url) data types to parse, inspect, and update links inside a binding chain.

> **Info**
>
> Use **Parse URL** first when your source value is still plain text. In many
> bindings, PandaSuite can insert this step automatically when you choose a URL
> function on a text value.

### Parse URL

Converts a text string into a PandaSuite URL value.

**Returns:** URL object, or `null` if the value is not a valid URL

### URL To String

Converts a PandaSuite URL value back into plain text.

**Returns:** Full URL as a string

### URL Host

Returns the host of a URL, including the port when present.

**Example:** `https://viewer.pandasuite.com:8443/app` returns `viewer.pandasuite.com:8443`

### URL Path

Returns only the path portion of a URL, without the query string or hash.

**Example:** `https://viewer.pandasuite.com/app/page?lang=en#top` returns `/app/page`

### URL Protocol

Returns the protocol without the trailing colon.

**Example:** `https://viewer.pandasuite.com/app` returns `https`

### URL Get Params

Returns all query parameters from a URL as a key/value object.

**Example:** `https://viewer.pandasuite.com/app?wid=123&lang=fr` returns `{ "wid": "123", "lang": "fr" }`

### URL Set Params

Adds or replaces query parameters and returns a new URL value.

**Parameter:** Params (object)

- Existing keys are replaced
- Missing keys are added
- Other query parameters are preserved
- Values are converted to text before being written to the URL

**Example workflow:** `Parse URL` -> `URL Set Params` -> `URL To String`

### URL Remove Params

Removes selected query parameters and returns a new URL value.

**Parameter:** Keys (text or array of texts)

- No key removes the entire query string
- A text value removes one key
- An array removes every listed key
- The URL hash, if any, is preserved

---

## Date and Time Functions

These functions operate on [Date](https://docs.pandasuite.com/essentials/data/data-types/#date) data types for formatting, parsing, and manipulating dates and times.

### Format Date

Converts a date into a string according to a given format.

You can choose between predefined and custom date and time formats.

#### Predefined Types

Parameters:

- **Date Style:** Formatting style for the date portion
- **Time Style:** Formatting style for the time portion
- **Time Zone:** Reference time zone

**Date Style options** (example: September 16, 2021):

| Style  | Example Output                 |
| ------ | ------------------------------ |
| None   | *(no date)*                    |
| Short  | `9/16/21`                      |
| Medium | `Sep 16, 2021`                 |
| Long   | `September 16, 2021`           |
| Full   | `Thursday, September 16, 2021` |

**Time Style options** (example: 4:53 PM and 15 seconds):

| Style  | Example Output                     |
| ------ | ---------------------------------- |
| None   | *(no time)*                        |
| Short  | `4:53 PM`                          |
| Medium | `4:53:15 PM`                       |
| Long   | `4:53:15 PM GMT+2`                 |
| Full   | `4:53:15 PM Greenwich Mean Time+2` |

#### Custom Types

Parameters:

- **Date/Time Format:** Custom format using timestamp codes
- **Time Zone:** Reference time zone

**Common format codes:**

| Code   | Description               | Example (Sep 16, 2021, 4:53:05 PM) |
| ------ | ------------------------- | ---------------------------------- |
| `yyyy` | Year (4 digits)           | `2021`                             |
| `yy`   | Year (2 digits)           | `21`                               |
| `MMMM` | Month (full name)         | `September`                        |
| `MMM`  | Month (short name)        | `Sep`                              |
| `MM`   | Month (2 digits)          | `09`                               |
| `M`    | Month (1-2 digits)        | `9`                                |
| `dd`   | Day (2 digits)            | `16`                               |
| `d`    | Day (1-2 digits)          | `16`                               |
| `EEEE` | Day of week (full name)   | `Thursday`                         |
| `EEE`  | Day of week (short name)  | `Thu`                              |
| `HH`   | Hour 24-hour (2 digits)   | `16`                               |
| `H`    | Hour 24-hour (1-2 digits) | `16`                               |
| `hh`   | Hour 12-hour (2 digits)   | `04`                               |
| `h`    | Hour 12-hour (1-2 digits) | `4`                                |
| `mm`   | Minutes (2 digits)        | `53`                               |
| `m`    | Minutes (1-2 digits)      | `53`                               |
| `ss`   | Seconds (2 digits)        | `05`                               |
| `s`    | Seconds (1-2 digits)      | `5`                                |
| `a`    | AM/PM marker              | `PM`                               |

**Example formats:**

- `yyyy-MM-dd` → `2021-09-16`
- `dd/MM/yyyy HH:mm` → `16/09/2021 16:53`
- `MMMM d, yyyy 'at' h:mm a` → `September 16, 2021 at 4:53 PM`

> **Info**
>
> 💡 See all format codes in the [Date/Time Formatting
> reference](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table)

### Parse Date

Parses a string containing a date and returns the date.

**Parameter:** Date string

**Returns:** Date object

### Subtract Date

Returns the difference between two dates.

**Parameters:**

- **First date:** Start date
- **Second date:** End date

**Returns:** Duration in milliseconds

### Add Seconds/Minutes/Hours/Days/Months/Years

Adds or subtracts a specific duration from a date. To subtract, enter a negative number.

**Parameter:** Number (positive to add, negative to subtract)

**Returns:** New date

**Example:** Adding 7 days to today's date returns next week's date.

### Set Seconds/Minutes/Hours/Days/Months/Years

Replaces a specific part of the date with a new value.

**Parameter:** New value (number)

**Returns:** New date with the specified component changed

**Example:** Setting the month to 12 on any date changes it to December while keeping other components (day, year, time) unchanged.

### Get Seconds/Minutes/Hours/Day/Month/Year

Extracts a specific component from a date.

**Returns:** Number representing the extracted component

**Example:** **Get Month** from `15/06/2023` returns `6` (June)

### Get Timestamp

Explicitly converts a date into a raw timestamp.

**Returns:** Number in milliseconds since January 1, 1970 at 00:00:00 UTC

**Note:** If the input value is already numeric, it is returned as-is.

---

## Array and Collection Functions

These functions work with [Arrays](https://docs.pandasuite.com/essentials/data/data-types/#array) and [Collections](https://docs.pandasuite.com/essentials/data/data-types/#collection) to manipulate, aggregate, and transform structured data.

### Merge

Merges two collections into one.

**Example:** `[1, 2]` merged with `[3, 4]` returns `[1, 2, 3, 4]`

### Count

Returns the number of elements in an array.

**Example:** `["a", "b", "c"]` returns `3`

### Group By

Groups data according to a criterion, creating nested arrays organized by the specified property.

**Parameter:** Property name to group by

**Returns:** Object with grouped arrays

### Categorize by

Categorizes data according to a criterion, similar to Group By but with a flattened structure.

**Parameter:** Property name to categorize by

**Returns:** Categorized collection

### Uniq By

Removes duplicates from a collection based on a given criterion.

**Parameter:** Property name to check for uniqueness

**Returns:** Array with duplicates removed

### Min

Returns the minimum value from an array of numbers.

**Returns:** Minimum number

### Min By

Returns the object with the minimum value for a specified property.

**Parameters:**

- **Collection:** Array of objects
- **Property name:** Field to compare

**Example:** From `[{price: 10}, {price: 5}, {price: 15}]`, `MinBy` on "price" returns `{price: 5}`

### Max

Returns the maximum value from an array of numbers.

**Example:** `[10, 5, 20, 15]` returns `20`

### Max By

Returns the object with the maximum value for a specified property.

**Parameters:**

- **Collection:** Array of objects
- **Property name:** Field to compare

**Example:** From `[{score: 10}, {score: 25}, {score: 15}]`, `MaxBy` on "score" returns `{score: 25}`

### Mean

Returns the average value of an array of numbers.

**Returns:** Average number

**Example:** `[10, 20, 30]` returns `20`

### Mean By

Returns the average of values for a specified property in a collection.

**Parameters:**

- **Collection:** Array of objects
- **Property name:** Field to average

**Example:** From `[{score: 12}, {score: 16}, {score: 14}]`, `MeanBy` on "score" returns `14`

### Sum

Returns the sum of all values in an array of numbers.

**Returns:** Total sum

**Example:** `[10, 20, 30]` returns `60`

### Sum By

Returns the sum of values for a specified property in a collection.

**Parameters:**

- **Collection:** Array of objects
- **Property name:** Field to sum

**Example:** From `[{price: 10}, {price: 20}, {price: 5}]`, `SumBy` on "price" returns `35`

### Shuffle

Randomly shuffles the elements of an array.
You can define a **Maximum size** to limit the number of elements in the result.

To learn more about **Shuffle** function : [Random Numbers](https://docs.pandasuite.com/essentials/gamification/random/)

### Chunk

Splits an array into several sub-arrays of the specified size.

**Parameter:** Size of each chunk

**Example:** `[1, 2, 3, 4, 5, 6]` with size `2` returns `[[1, 2], [3, 4], [5, 6]]`

### Distance

Calculates the distance between two [Coordinate](https://docs.pandasuite.com/essentials/data/data-types/#coordinate) points.

**Parameters:**

- **First coordinate:** Starting point
- **Second coordinate:** Ending point

**Returns:** Distance in meters

> **Info**
>
> 💡 Useful for proximity features, finding nearest locations, or geo-fencing
> applications.

### Join

Converts all elements in an array into a string separated by a separator.

**Parameters:**

- **Array:** Array of values
- **Separator:** String to insert between elements

**Example:** `["apple", "banana", "orange"]` with separator `", "` returns `"apple, banana, orange"`

### Keys

Returns an array of a given object's own enumerable property names (keys).

**Parameter:** Object (Key/Value type)

**Returns:** Array of keys

**Example:** From `{ name: "Paris", country: "France" }` returns `["name", "country"]`

### Values

Returns an array of a given object's own enumerable property values.

**Parameter:** Object (Key/Value type)

**Returns:** Array of values

**Example:** From `{ name: "Paris", country: "France" }` returns `["Paris", "France"]`

### Pluck

Extracts a value for each element of an array or collection (using a path) and returns the resulting array.

**Parameter:** Path

**Returns:** Array of extracted values

**Example:** From `[{name: "hello"}, {name: "coucou"}, {name: "hola"}]`, `Pluck` on "name" returns `["hello", "coucou", "hola"]`

### Flatten

Flattens nested arrays to a given depth (default `1`). If the result contains references, those with the same source path are merged.

**Parameter:** Depth (integer, default `1`)

**Returns:** Flattened array

**Example:** `[[1, 2], [3, 4]]` with depth `1` returns `[1, 2, 3, 4]`

### Expand

Returns the element(s) associated with one or more [References](https://docs.pandasuite.com/essentials/data/data-types/#reference), resolving them to retrieve the full objects they point to.

**Parameter:** Reference or Multi-reference field

**Returns:** Referenced object(s)

### Filter

Filters the elements of an array or collection by a condition and returns the matching elements.

**Parameter:** Condition

**Returns:** Filtered array (or a References list when filtering a Collection)

> **Note**
>
> If you want to filter what a **Collection / List** component displays, use its
> **Filter** property and follow [Filter a
> collection](https://docs.pandasuite.com/essentials/data/filter-a-collection/).

To understand which comparison functions you can use in a condition, see the [Condition component](https://docs.pandasuite.com/essentials/components/condition/).

### Find

Returns the first element in a collection that matches a condition.

**Parameters:**

- **Collection:** Array to search
- **Condition:** Expression to evaluate for each element

**Returns:** First matching element or undefined

**Example:** From `[{age: 15}, {age: 25}, {age: 20}]`, find where `age > 18` returns `{age: 25}`

### Find Index

Similar to Find, but returns the index of the first element that matches the condition instead of the element itself.

**Returns:** Index number (starting at 0) or -1 if not found

### Find Last Index

Similar to Find Index, but iterates over elements from right to left, returning the index of the last matching element.

**Returns:** Index number or -1 if not found
