diff --git a/_includes/calculated-fields-cards.sass b/_includes/calculated-fields-cards.sass
new file mode 100644
index 0000000000..1ef346af80
--- /dev/null
+++ b/_includes/calculated-fields-cards.sass
@@ -0,0 +1,40 @@
+#docsContent
+ .calculated-fields
+ max-width: 1300px
+ display: flex
+ flex-wrap: wrap
+ justify-content: center
+ gap: 20px
+ margin: 40px 0
+ padding-left: 0
+ .field
+ width: 258px
+ list-style: none
+ background: #FFF
+ border-radius: 16px
+ border: 1px solid rgba(0, 0, 0, 0.08)
+ transition: ease-in-out 0.3s
+ &:hover
+ background: #F4F8FE
+ box-shadow: -4px 15px 50px -20px rgba(0, 0, 0, 0.15), 0 0 8px 0 rgba(0, 0, 0, 0.08)
+ .field-link
+ display: flex
+ flex-direction: column
+ gap: 20px
+ padding: 24px
+ &:hover
+ text-decoration: none
+ .field-text
+ display: flex
+ flex-direction: column
+ gap: 8px
+ span
+ font-size: 16px
+ font-weight: 500
+ line-height: 28px
+ color: rgba(0, 0, 0, 0.87)
+ p
+ font-size: 14px
+ font-weight: 400
+ line-height: 24px
+ color: rgba(0, 0, 0, 0.76)
diff --git a/_includes/docs/user-guide/calculated-fields.md b/_includes/docs/user-guide/calculated-fields.md
deleted file mode 100644
index 94517dfddc..0000000000
--- a/_includes/docs/user-guide/calculated-fields.md
+++ /dev/null
@@ -1,622 +0,0 @@
-* TOC
-{:toc}
-
-{% assign sinceVersion = "4.0.0" %}
-{% include templates/since.md %}
-
-**Calculated fields** allow Tenant administrators to perform real-time calculations on telemetry and attributes, enabling seamless data transformation without the need for [rule chains](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview){:target="_blank"} and extra logic blocks.
-By defining custom expressions or scripts, users can standardize data, and create new computed metrics dynamically.
-This feature is particularly useful for optimizing data processing, improving analytics.
-
-
-
-
-
-
-
-
- Key benefits
-
-- **No additional logic in rule chains**: simplifies telemetry calculations without the need for complex rule chain configurations.
-- **Real-time computations**: triggers calculations as incoming telemetry and attributes are processed by the [save time series](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/){:target="_blank"}, [save attributes](/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes/){:target="_blank"}, or [calculated fields](/docs/user-guide/rule-engine-2-0/nodes/action/calculated-fields/){:target="_blank"} rule nodes, ensuring up-to-date insights.
-- **Optimized performance**: reduces database queries by performing computations as data is received, improving system efficiency.
-- **Cross-entity data merging**: calculate new values by combining data from multiple sources (devices, assets, etc.).
-- **Flexible output**: store the results as either [attributes](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"} or [time series data](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"}, depending on the use case.
-
- Use case examples
-
-- **Combine telemetry from multiple sources**: calculate dew point from Device A's temperature and Device B's humidity, etc.
-- **Standardize measurement units**: convert temperature readings from Celsius to Fahrenheit or normalize pressure and voltage levels across different sensor models.
-- **Energy consumption tracking**: calculate power usage per hour to help optimize energy consumption and cost efficiency.
-- **Data smoothing**: compute rolling averages of environmental telemetry like humidity or temperature to reduce fluctuations in sensor readings.
-- **Predictive maintenance**: generate efficiency metrics for machines, such as air density calculations, to anticipate maintenance needs before failures occur.
-- **Custom business logic**: implement advanced calculations tailored to specific business needs, such as determining occupancy levels based on motion sensor data or adjusting device settings dynamically based on multiple telemetry inputs.
-
- Configuration levels
-
-Calculated fields can be applied at different levels within the system:
-- [Device](/docs/{{docsPrefix}}user-guide/ui/devices/){:target="_blank"} or [Asset](/docs/{{docsPrefix}}user-guide/ui/assets/){:target="_blank"} level – the calculation is applied to a specific device or asset, allowing customized data processing per entity.
-- [Device profile](/docs/{{docsPrefix}}user-guide/device-profiles/){:target="_blank"} or [Asset profile](/docs/{{docsPrefix}}user-guide/asset-profiles/){:target="_blank"} level: if a calculated field is created at the profile level, it will be executed for each entity associated with that profile.
-
-This flexibility allows users to either define unique calculations per entity or apply standardized logic across a group of similar entities, optimizing data processing and management.
-
-## Create new calculated field
-
-{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
-> **Note:** To create calculated fields and access their data, make sure you have [permissions](/docs/{{docsPrefix}}user-guide/rbac/){:target="_blank"} to **create calculated fields**, as well as to **read and write attributes and telemetry**. Otherwise, this feature may be unavailable.
-{% endif %}
-
-> **Note:** Only [tenants](/docs/{{docsPrefix}}user-guide/ui/tenants/){:target="_blank"} have access to configure and manage calculated fields.
-
-To create a calculated field, follow these steps:
-
-- Select to the **Entity** or **Profile** where the calculated field should be applied.
-- In the entity details window, navigate to the "Calculated fields" tab.
-- Click the "plus" icon button and select "Create new calculated field" from the dropdown menu.
-
-The calculated field configuration window will open — let's proceed with the setup.
-
-{% include images-gallery.html imageCollection="create-new-calculated-field" %}
-
-### General
-
-- **Name**: enter a descriptive title for the calculated field.
-- **Type**: choose between:
- - **Simple**: uses basic mathematical operations and functions.
- - **Script**: enables complex calculations using the [TBEL](/docs/{{docsPrefix}}user-guide/tbel/){:target="_blank"} scripting language and can return multiple output values.
-- Use the **Debug mode** to track calculated field events, such as state changes and errors, for easier debugging and troubleshooting.
-
-{% assign feature = "components" %}
-{% include templates/debug-mode.md %}
-
-{% include images-gallery.html imageCollection="calculated-field-general" %}
-
-### Arguments
-
-To configure calculated field, you need to add at least one argument before proceeding.
-Click the "**Add argument**" button and fill in the required fields:
-
-- **Argument name**: set the reference name for the variable in the expression.
-- **Entity type**: set the source of the variable, which can be:
- - **Current entity**: refers to the same entity where the calculated field is applied.
- If the calculated field is created at the **Asset Profile** or **Device Profile** level, the calculation will be executed for each entity associated with that profile.
- - Another **Device** or **Asset**: references a different device or asset for data processing.
- - **Customer**: retrieves data from the associated customer entity.
- - **Current tenant**: uses data from the tenant entity.
- {% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
- - **Current owner**: refers to the owner of the current entity and uses its data.
- {% endif %}
-
-{% include images-gallery.html imageCollection="argument-name" %}
-
-Calculated fields use different types of arguments that determine what data will be used for calculations.
-
-- **Argument type**: define the data source:
- - **Attribute**: uses static or semi-static key-value pairs associated with an entity (e.g., model, max temperature).
- - **Latest telemetry**: uses the most recent telemetry data from an entity (e.g., temperature, speed, voltage).
- - **Time series rolling**: uses historical time series data over a specified time window for trend analysis (Available only for [Script](#script-calculated-field) type).
-
-Select the desired argument type:
-
-{% capture calculatedfieldsargumenttype %}
-Attribute%,%attribute%,%templates/calculated-fields/attribute-argument-type.md%br%
-Latest telemetry%,%latestTelemetry%,%templates/calculated-fields/latest-telemetry-argument-type.md%br%
-Time series rollingonly for Script type%,%timeSeriesRolling%,%templates/calculated-fields/time-series-rolling-argument-type.md{% endcapture %}
-
-{% include content-toggle.liquid content-toggle-id="calculatedfieldsargumenttype" toggle-spec=calculatedfieldsargumenttype %}
-
-### Simple calculated field
-
-Simple calculated fields use basic arithmetic operations (+, -, *, /) and standard functions such as `sqrt` (square root), `pow` (power), `abs` (absolute value), etc.
-
-#### Expression
-
-In the "Expression" section, enter the mathematical expression for the calculation using the variables defined in the ["Arguments"](#arguments) section.
-
-{% include images-gallery.html imageCollection="expression-simple-calculated-fields-1" %}
-
-#### Output
-
-The result of the calculation can be saved either as a [time series](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"} or as an [attribute](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"}.
-> See [how calculated field output is processed](#calculated-field-output-processing) for details on rule engine behavior and data persistence.
-
-In the "Output" section:
-- Specify the variable type: **Time series** or **Attribute**, along with the **attribute scope**.
-- Assign a name to the variable that will store the calculation result.
-- Optionally, set **Decimals by default** to define how many decimal places the result should be rounded to. If not specified, the result will not be rounded.
-- To finish adding the calculated field, click "Add".
-
-> **[Only for Time series]**
-"**Use latest timestamp**" option — when enabled, the calculated value will be stored using the most recent timestamp from the arguments telemetry instead of the server time.
-
-{% include images-gallery.html imageCollection="output-simple-1" %}
-
-### Script calculated field
-
-For complex calculations, [TBEL](/docs/{{docsPrefix}}user-guide/tbel/){:target="_blank"} is used.
-It enables advanced operations such as conditional statements, loops, and access to historical data.
-
-#### Script
-
-Define a function that will perform calculations using the variables defined in the ["Arguments"](#arguments) section.
-
-> The variable name that will store the calculation result is defined within the function itself.
-
-
-
-Example: the function below uses the `temperature` and `humidity` arguments to calculate the dew point value.
-The calculation result will be stored in the variable `dewPoint`, rounding the value to one decimal places.
-
-```js
-// Constants for Magnus formula
-var a = 17.625;
-var b = 243.04;
-
-var alpha = ((a * temperature) / (b + temperature)) + Math.log(humidity / 100.0);
-var dewPoint = toFixed((b * alpha) / (a - alpha), 1);
-
-return {"dewPoint": dewPoint};
-```
-{: .copy-code}
-
-{% include images-gallery.html imageCollection="expression-script-calculated-fields-1" %}
-
-Script calculated fields require the definition of a `calculate(ctx, ...)` function. This function receives the `ctx` object and arguments declared in the configuration.
-
-```javascript
-function calculate(ctx, arg1, arg2, ...): object | object[]
-```
-
-- `ctx`: context object that stores `latestTs` and provides access to all configured arguments.
-
- Context structure:
- - `ctx.latestTs`: the most recent timestamp (in milliseconds) from the arguments telemetry. Useful for aligning the result with the incoming data time instead of the server time.
- - `ctx.args`: an object that contains all declared arguments, where each argument can be accessed using `.` notation:
- - **single value arguments** (attribute or latest telemetry):
- - `ctx.args..ts`: timestamp of the argument.
- - `ctx.args..value`: actual value of the argument.
- - **time series rolling arguments**:
- - `ctx.args..timeWindow`: object with `startTs` and `endTs` timestamps.
- - `ctx.args..values`: array of `{ ts, value }` records representing timestamped telemetry.
- - `ctx.args..`: call built-in aggregation methods such as `mean()`, `sum()`, `min()`, `max()`, `first()`, `last()`, `merge(...)`, and others.
- > For more details, refer to the [time series rolling argument](#arguments).
-- `arg1, arg2, ...`: direct access to arguments by name as function parameters. This can be useful for cleaner or more concise expressions. These arguments may be:
- - single value arguments (attribute or latest telemetry arguments): telemetry value may be of type boolean, int64 (long), double, string, or JSON.
- - time series rolling arguments: objects that contain time series data within a defined time window.
-
-Use either `ctx.args.` or direct parameter access depending on preference and context clarity.
-
-#### Output
-
-> See [how calculated field output is processed](#calculated-field-output-processing) for details on rule engine behavior and data persistence.
-
-The calculated values are returned as a JSON object containing **keys** that represent the computed results, which are then used to store those values in the system.
-
-- Specify the **Output type** for storing the calculation result:
- - [Time series](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"}: function must return a JSON object or array with or without a timestamp containing the computed value.
- - [Attribute](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"}: function must return a JSON object **without timestamp** information containing the computed value.
- - Choose the **attribute scope**: **Server attributes**, **Client attributes**, or **Shared attributes**.
-- To align the result with the latest timestamp of the input arguments telemetry, use `ctx.latestTs` and assign it explicitly to the `ts` field in the returned object.
-- To finish adding the calculated field, click "Add".
-
-{% include images-gallery.html imageCollection="output-script-1" %}
-
-### Result
-
-After clicking the "Add" button, the calculated field will be added to your entity or profile.
-
-{% include images-gallery.html imageCollection="calculated-field-result" %}
-
-Let's check the debug events by clicking the "Events" icon button. The debugging window displays calculated field arguments and the computed result.
-
-> Please note that ThingsBoard stores all debug events for a calculated field during the first 15 minutes after creation. After that, only error events are saved.
-
-{% include images-gallery.html imageCollection="calculated-field-debug-events-2" %}
-
-## How calculated field output is processed {#calculated-field-output-processing}
-
-> **IMPORTANT**: When a calculated field produces an output, a new internal message — either `POST_TELEMETRY_REQUEST` or `POST_ATTRIBUTES_REQUEST`, depending on the output type — is created and pushed to the **Default Rule Chain** assigned to the target entity.
-This means the output **does not bypass the rule engine**: it behaves like any other telemetry or attribute update.
-To ensure that the result is actually stored in the database, your rule chain **must include** a [save time series](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/) or [save attributes](/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes/) nodes.
-If these nodes are missing, the result **will not be saved** and will not appear in dashboards, widgets, or API responses.
-
-## Data reprocessing
-
-{% if docsPrefix == null %}
-> The **telemetry data reprocessing** feature is available only in [ThingsBoard PE](https://thingsboard.io/docs/user-guide/install/pe/installation-options/){:target="_blank"} and [ThingsBoard Cloud](https://thingsboard.io/installations/choose-region/){:target="_blank"} editions.
-
-{% endif %}
-
-**Calculated field reprocessing** is a mechanism that allows you to apply calculated field logic to historical data.
-This is especially useful when you modify existing calculations or add new fields and want those changes to affect not only new data but also previously collected telemetry.
-
-{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
-> **Note:** reprocessing cannot be applied to a calculated field that contains only attribute-based arguments. The Calculated field must include at least one argument based on a time series — either "Latest telemetry" or "Time series rolling" data.
-
-{% endif %}
-
-Key features
-
-- **Recalculation of historical data** — apply updated logic to previously collected telemetry.
-- **Flexible time range selection** — choose a specific time period for reprocessing.
-- **Store results as telemetry** — processed data is saved in ThingsBoard as telemetry, enabling further use in widgets, rules, or analytics.
-
-{% if docsPrefix == null %}
-Learn how to configure data reprocessing in the [ThingsBoard PE documentation](/docs/pe/user-guide/calculated-fields/#data-reprocessing){:target="_blank"}.
-{% endif %}
-
-{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
- How to configure
-
-- Choose the target **Entity** or **Profile**, go to the "**Calculated fields**" tab, and either [create a new calculated field](#create-new-calculated-field) or select an existing one that needs historical telemetry reprocessing.
-- Click the "**Reprocess calculated field**" icon next to the desired field.
-- In the pop-up window, define the time interval for which you want to reprocess telemetry data.
-- Click "**Reprocess**" — the system will start recalculating and update historical telemetry data according to the latest logic.
-- Once the data reprocessing is complete, click "**Finish**".
-
-{% include images-gallery.html imageCollection="how-to-configure-reprocessing" %}
-
- Example of using the data reprocessing feature
-
-Let's say you have a Smart Device that tracks real-time temperature and humidity and sends this data to ThingsBoard.
-At some point, you decide to start calculating the dew point using the Calculated field feature.
-As shown on the widget, that displays time series data for the Smart Device, the dew point was first calculated at 13:44:35.
-Prior to that, no dew point calculations had been performed.
-
-{% include images-gallery.html imageCollection="reprocessing-example-1" %}
-
-To recalculate dew point values for a past period (before the calculation logic was introduced), follow these steps:
-
-{% include images-gallery.html imageCollection="reprocessing-example-2" showListImageTitles="true" %}
-
-Dew point values have been recalculated for the historical period you specified during the reprocessing configuration.
-
-{% include images-gallery.html imageCollection="reprocessing-example-3" %}
-
-### Task manager
-
-The Task manager allows you to view the status of tasks, track their progress, see results, and identify any errors that occurred during data processing.
-
-{% include images-gallery.html imageCollection="task-manager" %}
-{% endif %}
-
-## Built-in methods for rolling arguments
-
-Time series rolling arguments support built-in functions for calculations. These functions accept an optional `ignoreNaN` boolean parameter.
-
-| Method | Default Behavior (`ignoreNaN = true`) | Alternative (`ignoreNaN = false`) |
-|-----------------|-----------------------------------------------------|---------------------------------------------|
-| `max()` | Returns the highest value, ignoring NaN values. | Returns NaN if any NaN values exist. |
-| `min()` | Returns the lowest value, ignoring NaN values. | Returns NaN if any NaN values exist. |
-| `mean(), avg()` | Computes the average value, ignoring NaN values. | Returns NaN if any NaN values exist. |
-| `std()` | Calculates the standard deviation, ignoring NaN. | Returns NaN if any NaN values exist. |
-| `median()` | Returns the median value, ignoring NaN values. | Returns NaN if any NaN values exist. |
-| `count()` | Counts values, ignoring NaN values. | Counts all values, including NaN. |
-| `last()` | Returns the most recent value, skipping NaN values. | Returns the last value, even if it is NaN. |
-| `first()` | Returns the oldest value, skipping NaN values. | Returns the first value, even if it is NaN. |
-| `sum()` | Computes the total sum, ignoring NaN values. | Returns NaN if any NaN values exist. |
-
- Assuming the following time series rolling argument
-
-```json
-{
- "temperature": {
- "timeWindow": {
- "startTs": 1740643762896,
- "endTs": 1740644662896
- },
- "values": [
- { "ts": 1740644350000, "value": 72.32 },
- { "ts": 1740644360000, "value": 72.86 },
- { "ts": 1740644370000, "value": 73.58 },
- { "ts": 1740644380000, "value": "NaN" }
- ]
- }
-}
-```
- Usage and result
-
-```javascript
-var avgTemp = temperature.mean(); // Returns 72.92
-var tempMax = temperature.max(); // Returns 73.58
-var valueCount = temperature.count(); // Returns 3
-
-var avgTempNaN = temperature.mean(false); // Returns NaN
-var tempMaxNaN = temperature.max(false); // Returns NaN
-var valueCountNaN = temperature.count(false); // Returns 4
-```
-
-**Where it can be useful**
-
-- **statistical analysis**: computing mean, median, and standard deviation for trend analysis.
-- **data filtering**: identifying maximum and minimum values within a time window.
-- **quality control**: detecting missing or outlier values with count() and std().
-- **energy efficiency monitoring**: summing up power consumption over a period to evaluate energy usage patterns.
-
-## Merging time series arguments
-
-Time series rolling arguments can be **merged** to align timestamps across multiple datasets.
-The merge function combines two or more rolling arguments by taking all timestamps from all arguments and merging the values based on these timestamps.
-If value by timestamp does not exist in an argument, it assigns the previous value from that argument; if no previous value exists, it assigns `NaN`.
-The result is a new rolling argument that contains a time window and an array of values corresponding to each argument value by each timestamp.
-
-| Method | Description | Returns |
-|:-----------------------------|:--------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------|
-| `merge(other, settings)` | Merges with another rolling argument. Aligns timestamps and filling missing values with the previous available value. | Merged object with `timeWindow` and aligned values. |
-| `mergeAll(others, settings)` | Merges multiple rolling arguments. Aligns timestamps and filling missing values with the previous available value. | Merged object with `timeWindow` and aligned values. |
-
- Parameters
-
-| Parameter | Description |
-|:---------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `other` or `others` | Another rolling argument or array of rolling arguments to merge with. |
-| `settings`(optional) | Configuration object that supports: - `ignoreNaN` - controls whether NaN values should be ignored. - `timeWindow` - defines a custom time window. |
-
-**Assuming the following arguments and their values:**
-
-```json
-{
- "humidity": {
- "timeWindow": {
- "startTs": 1741356332086,
- "endTs": 1741357232086
- },
- "values": [{
- "ts": 1741356882759,
- "value": 43
- }, {
- "ts": 1741356918779,
- "value": 46
- }]
- },
- "pressure": {
- "timeWindow": {
- "startTs": 1741356332086,
- "endTs": 1741357232086
- },
- "values": [{
- "ts": 1741357047945,
- "value": 1023
- }, {
- "ts": 1741357056144,
- "value": 1026
- }, {
- "ts": 1741357147391,
- "value": 1025
- }]
- },
- "temperature": {
- "timeWindow": {
- "startTs": 1741356332086,
- "endTs": 1741357232086
- },
- "values": [{
- "ts": 1741356874943,
- "value": 76
- }, {
- "ts": 1741357063689,
- "value": 77
- }]
- }
-}
-```
-
-**Usage:**
-
-```javascript
-var mergedData = temperature.merge(humidity, { ignoreNaN: false });
-```
-
-**Output:**
-
-```json
-{
- "mergedData": {
- "timeWindow": {
- "startTs": 1741356332086,
- "endTs": 1741357232086
- },
- "values": [{
- "ts": 1741356874943,
- "values": [76.0, "NaN"]
- }, {
- "ts": 1741356882759,
- "values": [76.0, 43.0]
- }, {
- "ts": 1741356918779,
- "values": [76.0, 46.0]
- }, {
- "ts": 1741357063689,
- "values": [77.0, 46.0]
- }]
- }
-}
-```
-
-**Usage:**
-
-```javascript
-var mergedData = temperature.mergeAll([humidity, pressure], { ignoreNaN: true });
-```
-
-**Output:**
-
-```json
-{
- "mergedData": {
- "timeWindow": {
- "startTs": 1741356332086,
- "endTs": 1741357232086
- },
- "values": [{
- "ts": 1741357047945,
- "values": [76.0, 46.0, 1023.0]
- }, {
- "ts": 1741357056144,
- "values": [76.0, 46.0, 1026.0]
- }, {
- "ts": 1741357063689,
- "values": [77.0, 46.0, 1026.0]
- }, {
- "ts": 1741357147391,
- "values": [77.0, 46.0, 1025.0]
- }]
- }
-}
-```
-
-**Where it can be useful**
-
-Merging time series arguments is useful in scenarios where multiple sensors provide data streams at different intervals.
-By aligning timestamps and filling missing values, merging enables:
-
-- **sensor data synchronization**: aligns readings from different sensors measuring related parameters, such as temperature and humidity.
-- **anomaly detection**: merges multiple telemetry sources to identify inconsistencies or deviations in system performance.
-- **energy consumption analysis**: combines power usage data from various devices to provide a unified view of energy trends.
-- **predictive maintenance**: merges vibration, temperature, and operational status data to predict equipment failures.
-
-## Export / Import calculated field
-
-You can [export](#export-calculated-field) the calculated field to a JSON file and [import](#import-calculated-field) it into the same or another ThingsBoard instance.
-
-### Export calculated field
-
-To export a calculated field, navigate to the "Calculated fields" tab of the target entity or profile and click the "Export" icon button located in the row of the specific calculated field.
-
-{% include images-gallery.html imageCollection="export-calculated-field" %}
-
-### Import calculated field
-
-You can import a calculated field configuration from a JSON configuration file.
-This feature is particularly useful when transferring calculated field configurations between entities or profiles, ensuring consistency and reducing manual setup efforts.
-
-Steps to import:
-- Navigate to the "Calculated fields" tab of the target entity or profile.
-- Click the "plus" icon button, and select "**Import calculated field**" from the dropdown menu;
-- Upload the JSON file containing the calculated field configuration and click "Import";
-- Verify the imported configuration: when importing, the edit window will open to allow modifications.
- > **Note**: ensure the imported field is correctly applied and update any necessary parameters.
- > * if you import calculated field on any entity, no error occurs, since the original entity where it was created is not preserved during export.
- > * if the referenced entity is the current entity, no error occurs.
- > * if a referenced entity does not exist in your tenant, it will be highlighted as an error in the argument where it is used.
- > * if the referenced entity is the current tenant and you import it into another tenant, it will automatically adjust to the new tenant without errors.
-
-- Click "Add" to complete the import.
-
-{% include images-gallery.html imageCollection="import-calculated-field-1" %}
-
-## Examples
-
-**Example 1: Dew point calculation**
-
-Suppose you have a smart device that monitors the current temperature and humidity in real time and sends this data to ThingsBoard. Based on these values, we need to calculate the dew point.
-
-This mathematical expression calculates the dew point using two arguments: temperature and humidity.
-
-```text
-(243.04 * (ln(humidity / 100) + 17.625 * temperature / (243.04 + temperature)) / (17.625 - (ln(humidity / 100) + 17.625 * temperature / (243.04 + temperature))))
-```
-{: .copy-code}
-
-To implement this, follow these steps:
-
-{% include images-gallery.html imageCollection="example-dew-point-calculated-fields" showListImageTitles="true" %}
-
-
-
-**Example 2: Fahrenheit to Celsius**
-
-Suppose you have a device that sends indoor temperature data in Fahrenheit.
-This function converts the temperature value from Fahrenheit to Celsius, rounds the result to two decimal places, and returns it along with the most recent timestamp:
-
-
-
-**function calculate(ctx, temperatureF) {**
-```js
-var temperatureC = (temperatureF - 32) / 1.8;
-return {
- "ts": ctx.latestTs,
- "values": {
- "temperatureC": toFixed(temperatureC, 2)
- }
-}
-```
-{: .copy-code}
-**}**
-
-
-To implement this, follow these steps:
-
-{% include images-gallery.html imageCollection="example-script-calculated-fields-1" showListImageTitles="true" %}
-
-
-
-**Example 3: Air density calculation**
-
-Let's assume you have an asset called Building A that sends altitude value as an attribute, and a smart device located within it that sends temperature value as telemetry.
-
-Configure a calculated field using these values along with the function provided below. As a result, you'll obtain a computed air density value, saved as telemetry.
-
-
-
-**function calculate(ctx, altitude, temperature) {**
-```js
-var avgTemperature = temperature.mean(); // Get average temperature
-var temperatureK = (avgTemperature - 32) * (5 / 9) + 273.15; // Convert Fahrenheit to Kelvin
-
-// Estimate air pressure based on altitude
-var pressure = 101325 * Math.pow((1 - 2.25577e-5 * altitude), 5.25588);
-
-// Air density formula
-var airDensity = pressure / (287.05 * temperatureK);
-
-return {
- "airDensity": toFixed(airDensity, 2)
-};
-
-```
-{: .copy-code}
-**}**
-
-
-To implement this, follow these steps:
-
-{% include images-gallery.html imageCollection="example-script-calculated-fields-2" showListImageTitles="true" %}
-
-
-
-**Example 4: Freezer temperature analysis**
-
-This function merges temperature(time series rolling argument) data with the fridge's defrost(time series rolling argument) status.
-It then analyzes the merged data to identify instances where the fridge is not in defrost mode, yet the internal air temperature is too high ( > -5° C).
-
-
-
-**function calculate(ctx, defrost, temperature) {**
-```js
-var merged = temperature.merge(defrost);
-var result = [];
-
-foreach(item: merged) {
- if (item.v1 > -5.0 && item.v2 == 0) {
- result.add({
- ts: item.ts,
- values: {
- issue: {
- temperature: item.v1,
- defrostState: false
- }
- }
- });
- }
-}
-
-return result;
-```
-{: .copy-code}
-**}**
-
-
-To implement this, follow these steps:
-
-{% include images-gallery.html imageCollection="example-script-calculated-fields-3" showListImageTitles="true" %}
diff --git a/_includes/docs/user-guide/calculated-fields/blocks/creating-calculated-field.md b/_includes/docs/user-guide/calculated-fields/blocks/creating-calculated-field.md
new file mode 100644
index 0000000000..4289de28fc
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/blocks/creating-calculated-field.md
@@ -0,0 +1,90 @@
+
+Calculated fields can be created either **centrally** or **in the context of a specific entity or profile**, depending on where the calculation logic should be applied.
+
+> **Note:** The process of creating an alarm rule is the same for **Devices**, **Assets**, **Device profiles**, or **Asset profiles**.
+
+Where to create a calculated field
+
+There are two available options:
+
+Option 1 — From the global Calculated fields page
+
+Use the **Calculated fields page** to manage all calculated fields from a single place.
+
+**Steps:**
+- Open the **Calculated fields** page from the left-hand menu.
+- Click **+** → **Create new calculated field**.
+- In the configuration window, specify the **target entity or profile** to which the calculated field will be applied.
+
+{% assign createCalculatedFieldCE2 = '
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-3-ce.png
+ title: Open the **Calculated fields** page from the left-hand menu. Click **+** → **Create new calculated field**.
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-4-ce.png
+ title: In the configuration window, specify the **entity or profile** to which the calculated field will be applied.
+'
+%}
+
+{% assign createCalculatedFieldPE2 = '
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-3-pe.png
+ title: Open the **Calculated fields** page from the left-hand menu. Click **+** → **Create new calculated field**.
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-4-pe.png
+ title: In the configuration window, specify the **target entity or profile** to which the calculated field will be applied.
+'
+%}
+
+{% if docsPrefix == null %}
+{% include images-gallery.liquid imageCollection=createCalculatedFieldCE2 %}
+{% endif %}
+{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
+{% include images-gallery.liquid imageCollection=createCalculatedFieldPE2 %}
+{% endif %}
+
+This option is best suited for centralized management of calculated fields across all entities.
+
+Option 2 — Inside an entity or profile
+
+You can also create a calculated field directly in a specific [Device](/docs/{{docsPrefix}}user-guide/ui/devices/){:target="_blank"}, [Asset](/docs/{{docsPrefix}}user-guide/ui/assets/){:target="_blank"}, [Device profile](/docs/{{docsPrefix}}user-guide/device-profiles/){:target="_blank"}, or [Asset Profile](/docs/{{docsPrefix}}user-guide/asset-profiles/){:target="_blank"}.
+
+**Steps:**
+- Open the **entity** or **profile** details.
+- Go to the **Calculated fields** tab.
+- Click **+** → **Create new calculated field**.
+
+{% assign createCalculatedFieldCE = '
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-1-ce.png
+ title: - Open the **entity** or **profile** details. - Go to the **Calculated fields** tab. - Click **+** → **Create new calculated field**.
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-2-ce.png
+ title: The calculated field configuration window will open.
+'
+%}
+
+{% assign createCalculatedFieldPE = '
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-1-pe.png
+ title: - Open the **entity** or **profile** details. - Go to the **Calculated fields** tab. - Click **+** → **Create new calculated field**.
+ ===
+ image: /images/user-guide/calculated-fields/create-new-calculated-field-2-pe.png
+ title: The calculated field configuration window will open.
+'
+%}
+
+{% if docsPrefix == null %}
+{% include images-gallery.liquid imageCollection=createCalculatedFieldCE %}
+{% endif %}
+{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
+{% include images-gallery.liquid imageCollection=createCalculatedFieldPE %}
+{% endif %}
+
+This option is suitable if you prefer working with an individual entity
+
+> ⚠️ **Notes:** To create calculated fields and access their results, you must have [permissions](/docs/{{docsPrefix}}user-guide/rbac/){:target="_blank"} to:
+ - **create calculated fields**;
+ - **read and write attributes and telemetry**.
+
+> ⚠️ Calculated field configuration and management are available **only at the [tenants](/docs/{{docsPrefix}}user-guide/ui/tenants/){:target="_blank"} level**.
diff --git a/_includes/docs/user-guide/calculated-fields/blocks/general-configuration.md b/_includes/docs/user-guide/calculated-fields/blocks/general-configuration.md
new file mode 100644
index 0000000000..112ea1a366
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/blocks/general-configuration.md
@@ -0,0 +1,28 @@
+Title
+
+Specify a clear and descriptive name for the calculated field that reflects its purpose.
+
+Entity type (only for the global Calculated fields page)
+
+If you create a calculated field from the global **Calculated fields page**, you must additionally:
+- Select the **entity type**.
+- Specify the specific **entity** or **profile** to which the calculated field should be applied.
+
+Type
+
+{{ calculatedFieldType }}
+
+{% assign typeOfCalculatedField = '
+ ===
+ image: /images/user-guide/calculated-fields/calculated-field-general-1-ce.png
+ title: Enter a descriptive name for the calculated field and select its type.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=typeOfCalculatedField %}
+
+ Debug mode
+
+Enabling **Debug mode** allows you to track events, states, and potential errors related to the execution of a calculated field. This greatly simplifies development and troubleshooting.
+
+{% include templates/debug-mode.md %}
diff --git a/_includes/docs/user-guide/calculated-fields/blocks/output-strategy.md b/_includes/docs/user-guide/calculated-fields/blocks/output-strategy.md
new file mode 100644
index 0000000000..728adc477b
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/blocks/output-strategy.md
@@ -0,0 +1,13 @@
+##### Output strategy
+
+The **output strategy** defines how the result of a calculated field is processed.
+Two strategies are available:
+- **Process immediately** (default) — the result is processed and stored right away, without using a Rule Chain.
+- **Process via Rule Chains** — the result is passed to a Rule Chain for additional processing logic.
+
+{% capture outputStrategy %}
+Process right away%,%attribute%,%templates/calculated-fields/output-strategy/process-right-away.md%br%
+Process via Rule Chains%,%timeSeriesRolling%,%templates/calculated-fields/output-strategy/process-via-rule-chains.md{% endcapture %}
+
+{% include content-toggle.liquid content-toggle-id="calculatedfieldsargumenttype" toggle-spec=outputStrategy %}
+
diff --git a/_includes/docs/user-guide/calculated-fields/geofencing-calculated-field.md b/_includes/docs/user-guide/calculated-fields/geofencing-calculated-field.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/_includes/docs/user-guide/calculated-fields/index.md b/_includes/docs/user-guide/calculated-fields/index.md
new file mode 100644
index 0000000000..056724b2ee
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/index.md
@@ -0,0 +1,512 @@
+* TOC
+{:toc}
+
+{% assign sinceVersion = "4.0.0" %}
+{% include templates/since.md %}
+
+**Calculated fields** are a mechanism for real-time data transformation, merging, and analysis that allows tenant administrators to perform computations directly as [telemetry](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"} and [attributes](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"} are received.
+This feature eliminates the need to create separate [Rule Chains](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview){:target="_blank"} or additional logic nodes for data processing, simplifies system configuration, and improves performance.
+
+Using expressions, scripts, or specialized processing modes, users can standardize data, generate new metrics, perform geospatial analytics, aggregate information, and automatically pass values between related entities.
+
+## Key benefits
+
+- **No additional logic in rule chains**: calculations are performed at the data ingestion stage, reducing the complexity of Rule Chains.
+- **Real-time computations**: triggers calculations as incoming telemetry and attributes are processed by the [save time series](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node){:target="_blank"}, [save attributes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-attributes-node){:target="_blank"}, or [calculated fields](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#calculated-fields-node){:target="_blank"} rule nodes, ensuring up-to-date insights.
+- **Optimized performance**: reduces database queries by performing computations as data is received, improving system efficiency.
+- **Cross-entity data merging**: calculate new values by combining data from multiple sources (devices, assets, etc.).
+- **Flexible output**: store the results as either [attributes](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"} or [time series data](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"}, depending on the use case.
+
+
+
+## Common use cases
+
+- **Combining telemetry from multiple sources** — calculating derived metrics (e.g., dew point) based on data from several devices.
+- **Standardization and normalization** — converting measurement units and unifying parameters across different sensor models.
+- **Energy analytics** — calculating hourly/daily consumption and identifying peak loads.
+- **Smoothing and filtering** — applying rolling averages, statistical aggregations, and noise reduction to telemetry.
+- **Predictive maintenance** — generating derived metrics and detecting potential failures based on trends.
+- **Geofencing scenarios** — checking zone membership, generating ENTER/EXIT events, and monitoring route compliance.
+- **Propagation** — automatically transferring attributes or telemetry to related entities for data synchronization.
+- **Group data aggregation** — computing min/max/avg/sum/count for sets of related devices or assets.
+- **Historical time-series analysis** — performing time window aggregation, trend analysis, and statistical evaluation.
+- **Custom business logic** — combining complex conditions, implementing smart operating modes, and calculating domain-specific indicators.
+
+
+
+## Configuration levels
+
+Calculated fields can be applied at different levels within the system:
+- [Device](/docs/{{docsPrefix}}user-guide/ui/devices/){:target="_blank"} or [Asset](/docs/{{docsPrefix}}user-guide/ui/assets/){:target="_blank"} level – the calculation is applied to a specific device or asset, allowing customized data processing per entity.
+- [Device profile](/docs/{{docsPrefix}}user-guide/device-profiles/){:target="_blank"} or [Asset profile](/docs/{{docsPrefix}}user-guide/asset-profiles/){:target="_blank"} level: if a calculated field is created at the profile level, it will be executed for each entity associated with that profile.
+
+This flexibility allows users to either define unique calculations per entity or apply standardized logic across a group of similar entities, optimizing data processing and management.
+
+
+
+## Calculated field types
+
+ThingsBoard supports several types of calculated fields, each designed for a specific class of tasks:
+
+{% include calculated-fields-cards.liquid %}
+
+
+
+## Data reprocessing
+
+
+
+
+
The telemetry data reprocessing feature is available only in ThingsBoard PE and ThingsBoard Cloud editions.
+
+
+
+
+**Calculated field reprocessing** is a mechanism that allows you to apply calculated field logic to historical data.
+This is especially useful when you modify existing calculations or add new fields and want those changes to affect not only new data but also previously collected telemetry.
+
+> **Note:** reprocessing cannot be applied to a calculated field that contains only attribute-based arguments. The Calculated field must include at least one argument based on a time series — either "Latest telemetry" or "Time series rolling" data.
+
+Key features
+
+- **Recalculation of historical data** — apply updated logic to previously collected telemetry.
+- **Flexible time range selection** — choose a specific time period for reprocessing.
+- **Store results as telemetry** — processed data is saved in ThingsBoard as telemetry, enabling further use in widgets, rules, or analytics.
+
+How to configure
+
+- Choose the target **Entity** or **Profile**, go to the "**Calculated fields**" tab, and either [create a new calculated field](#creating-a-calculated-field) or select an existing one that needs historical telemetry reprocessing.
+- Click the "**Reprocess calculated field**" icon next to the desired field.
+- In the pop-up window, define the time interval for which you want to reprocess telemetry data.
+- Click "**Reprocess**" — the system will start recalculating and update historical telemetry data according to the latest logic.
+- Once the data reprocessing is complete, click **Finish**.
+
+{% assign dataReprocessing = '
+ ===
+ image: /images/user-guide/calculated-fields/how-to-configure-reprocessing-1-pe.png,
+ title: Choose the target **Entity or Profile**, go to the **Calculated fields** tab, and either create a new calculated field or select an existing one that needs historical telemetry reprocessing. Click the **Reprocess calculated field** icon next to the desired field.
+ ===
+ image: /images/user-guide/calculated-fields/how-to-configure-reprocessing-2-pe.png,
+ title: In the pop-up window, define the time interval for which you want to reprocess telemetry data, and click **Reprocess** — the system will start recalculating and update historical telemetry data according to the latest logic.
+ ===
+ image: /images/user-guide/calculated-fields/how-to-configure-reprocessing-3-pe.png,
+ title: Once the data reprocessing is complete, click **Finish**.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=dataReprocessing %}
+
+Example of using the data reprocessing feature
+
+Assume that the Smart Device sends temperature and humidity data in real time. Later, you configure a calculated field to compute the dew point.
+On the time series widget, you can see that dew point values start appearing only from 13:44:35 — before that moment, the calculation was not performed.
+
+{% assign reprocessingExample1 = '
+ ===
+ image: /images/user-guide/calculated-fields/reprocessing-example-1-pe.png,
+ title: On the time series widget, you can see that dew point values start appearing only from 13:44:35 — before that moment, the calculation was not performed.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=reprocessingExample1 %}
+
+To recalculate the dew point for a historical period (before the calculated field was created), follow these steps:
+
+{% assign reprocessingExample2 = '
+ ===
+ image: /images/user-guide/calculated-fields/reprocessing-example-2-pe.png
+ title: Go to the **Calculated fields** tab of the corresponding **Smart Device**. Click the **Reprocess calculated field** icon in the row of the required field.
+ ===
+ image: /images/user-guide/calculated-fields/reprocessing-example-3-pe.png,
+ title: In the dialog window, specify the time interval for recalculation and click **Reprocess**.
+ ===
+ image: /images/user-guide/calculated-fields/reprocessing-example-4-pe.png,
+ title: After the process is completed, click **Finish**.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=reprocessingExample2 %}
+
+As a result, the **dewPoint** values will be generated and stored for the entire selected historical period.
+
+{% assign reprocessingExample3 = '
+ ===
+ image: /images/user-guide/calculated-fields/reprocessing-example-5-pe.png,
+ title: As a result, the **dewPoint** values will be generated and stored for the entire selected historical period.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=reprocessingExample3 %}
+
+
+
+### Task manager
+
+The Task manager allows you to view the status of tasks, track their progress, see results, and identify any errors that occurred during data processing.
+
+{% assign taskManager = '
+ ===
+ image: /images/user-guide/calculated-fields/task-manager-1-pe.png
+ title: The Task manager allows you to view the status of tasks, track their progress, see results, and identify any errors that occurred during data processing.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=taskManager %}
+
+
+
+## Built-in methods for rolling arguments
+
+Time series rolling arguments support built-in functions for calculations. These functions accept an optional `ignoreNaN` boolean parameter.
+
+| Method | Default Behavior (`ignoreNaN = true`) | Alternative (`ignoreNaN = false`) |
+|-----------------|-----------------------------------------------------|---------------------------------------------|
+| `max()` | Returns the highest value, ignoring NaN values. | Returns NaN if any NaN values exist. |
+| `min()` | Returns the lowest value, ignoring NaN values. | Returns NaN if any NaN values exist. |
+| `mean(), avg()` | Computes the average value, ignoring NaN values. | Returns NaN if any NaN values exist. |
+| `std()` | Calculates the standard deviation, ignoring NaN. | Returns NaN if any NaN values exist. |
+| `median()` | Returns the median value, ignoring NaN values. | Returns NaN if any NaN values exist. |
+| `count()` | Counts values, ignoring NaN values. | Counts all values, including NaN. |
+| `last()` | Returns the most recent value, skipping NaN values. | Returns the last value, even if it is NaN. |
+| `first()` | Returns the oldest value, skipping NaN values. | Returns the first value, even if it is NaN. |
+| `sum()` | Computes the total sum, ignoring NaN values. | Returns NaN if any NaN values exist. |
+
+ Assuming the following time series rolling argument
+
+```json
+{
+ "temperature": {
+ "timeWindow": {
+ "startTs": 1740643762896,
+ "endTs": 1740644662896
+ },
+ "values": [
+ { "ts": 1740644350000, "value": 72.32 },
+ { "ts": 1740644360000, "value": 72.86 },
+ { "ts": 1740644370000, "value": 73.58 },
+ { "ts": 1740644380000, "value": "NaN" }
+ ]
+ }
+}
+```
+ Usage and result
+
+```javascript
+var avgTemp = temperature.mean(); // Returns 72.92
+var tempMax = temperature.max(); // Returns 73.58
+var valueCount = temperature.count(); // Returns 3
+
+var avgTempNaN = temperature.mean(false); // Returns NaN
+var tempMaxNaN = temperature.max(false); // Returns NaN
+var valueCountNaN = temperature.count(false); // Returns 4
+```
+
+**Where it can be useful**
+
+- **statistical analysis**: computing mean, median, and standard deviation for trend analysis.
+- **data filtering**: identifying maximum and minimum values within a time window.
+- **quality control**: detecting missing or outlier values with count() and std().
+- **energy efficiency monitoring**: summing up power consumption over a period to evaluate energy usage patterns.
+
+
+
+## Merging time series arguments
+
+Time series rolling arguments can be **merged** to align timestamps across multiple datasets.
+The merge function combines two or more rolling arguments by taking all timestamps from all arguments and merging the values based on these timestamps.
+If value by timestamp does not exist in an argument, it assigns the previous value from that argument; if no previous value exists, it assigns `NaN`.
+The result is a new rolling argument that contains a time window and an array of values corresponding to each argument value by each timestamp.
+
+| Method | Description | Returns |
+|:-----------------------------|:--------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------|
+| `merge(other, settings)` | Merges with another rolling argument. Aligns timestamps and filling missing values with the previous available value. | Merged object with `timeWindow` and aligned values. |
+| `mergeAll(others, settings)` | Merges multiple rolling arguments. Aligns timestamps and filling missing values with the previous available value. | Merged object with `timeWindow` and aligned values. |
+
+Parameters
+
+| Parameter | Description |
+|:---------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `other` or `others` | Another rolling argument or array of rolling arguments to merge with. |
+| `settings`(optional) | Configuration object that supports: - `ignoreNaN` - controls whether NaN values should be ignored. - `timeWindow` - defines a custom time window. |
+
+**Assuming the following arguments and their values:**
+
+```json
+{
+ "humidity": {
+ "timeWindow": {
+ "startTs": 1741356332086,
+ "endTs": 1741357232086
+ },
+ "values": [{
+ "ts": 1741356882759,
+ "value": 43
+ }, {
+ "ts": 1741356918779,
+ "value": 46
+ }]
+ },
+ "pressure": {
+ "timeWindow": {
+ "startTs": 1741356332086,
+ "endTs": 1741357232086
+ },
+ "values": [{
+ "ts": 1741357047945,
+ "value": 1023
+ }, {
+ "ts": 1741357056144,
+ "value": 1026
+ }, {
+ "ts": 1741357147391,
+ "value": 1025
+ }]
+ },
+ "temperature": {
+ "timeWindow": {
+ "startTs": 1741356332086,
+ "endTs": 1741357232086
+ },
+ "values": [{
+ "ts": 1741356874943,
+ "value": 76
+ }, {
+ "ts": 1741357063689,
+ "value": 77
+ }]
+ }
+}
+```
+
+**Usage:**
+
+```javascript
+var mergedData = temperature.merge(humidity, { ignoreNaN: false });
+```
+
+**Output:**
+
+```json
+{
+ "mergedData": {
+ "timeWindow": {
+ "startTs": 1741356332086,
+ "endTs": 1741357232086
+ },
+ "values": [{
+ "ts": 1741356874943,
+ "values": [76.0, "NaN"]
+ }, {
+ "ts": 1741356882759,
+ "values": [76.0, 43.0]
+ }, {
+ "ts": 1741356918779,
+ "values": [76.0, 46.0]
+ }, {
+ "ts": 1741357063689,
+ "values": [77.0, 46.0]
+ }]
+ }
+}
+```
+
+**Usage:**
+
+```javascript
+var mergedData = temperature.mergeAll([humidity, pressure], { ignoreNaN: true });
+```
+
+**Output:**
+
+```json
+{
+ "mergedData": {
+ "timeWindow": {
+ "startTs": 1741356332086,
+ "endTs": 1741357232086
+ },
+ "values": [{
+ "ts": 1741357047945,
+ "values": [76.0, 46.0, 1023.0]
+ }, {
+ "ts": 1741357056144,
+ "values": [76.0, 46.0, 1026.0]
+ }, {
+ "ts": 1741357063689,
+ "values": [77.0, 46.0, 1026.0]
+ }, {
+ "ts": 1741357147391,
+ "values": [77.0, 46.0, 1025.0]
+ }]
+ }
+}
+```
+
+**Where it can be useful**
+
+Merging time series arguments is useful in scenarios where multiple sensors provide data streams at different intervals.
+By aligning timestamps and filling missing values, merging enables:
+
+- **sensor data synchronization**: aligns readings from different sensors measuring related parameters, such as temperature and humidity.
+- **anomaly detection**: merges multiple telemetry sources to identify inconsistencies or deviations in system performance.
+- **energy consumption analysis**: combines power usage data from various devices to provide a unified view of energy trends.
+- **predictive maintenance**: merges vibration, temperature, and operational status data to predict equipment failures.
+
+
+
+## Creating a calculated field
+
+{% include /docs/user-guide/calculated-fields/blocks/creating-calculated-field.md %}
+
+
+
+## Export / Import calculated field
+
+You can **export** the calculated field to a JSON file and **import** it into the same or another ThingsBoard instance.
+
+ Export calculated field
+
+To export a calculated field, navigate to the Calculated fields tab of the target entity or profile and click the Export button located in the row of the specific calculated field.
+
+{% assign exportCalculatedFieldCE = '
+ ===
+ image: /images/user-guide/calculated-fields/export-calculated-field-1-ce.png,
+ title: To export a calculated field, navigate to the Calculated fields tab of the target entity or profile and click the Export button located in the row of the specific calculated field.
+'
+%}
+
+{% assign exportCalculatedFieldPE = '
+ ===
+ image: /images/user-guide/calculated-fields/export-calculated-field-1-pe.png,
+ title: To export a calculated field, navigate to the Calculated fields tab of the target entity or profile and click the Export button located in the row of the specific calculated field.
+'
+%}
+
+{% if docsPrefix == null %}
+{% include images-gallery.liquid imageCollection=exportCalculatedFieldCE %}
+{% endif %}
+{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
+{% include images-gallery.liquid imageCollection=exportCalculatedFieldPE %}
+{% endif %}
+
+ Import calculated field
+
+You can import a calculated field configuration from a JSON configuration file.
+This feature is particularly useful when transferring calculated field configurations between entities or profiles, ensuring consistency and reducing manual setup efforts.
+
+Steps to import:
+- Navigate to the "Calculated fields" tab of the target entity or profile.
+- Click the "plus" icon button, and select "**Import calculated field**" from the dropdown menu;
+- Upload the JSON file containing the calculated field configuration and click "Import";
+- Verify the imported configuration: when importing, the edit window will open to allow modifications.
+ > **Note**: ensure the imported field is correctly applied and update any necessary parameters.
+ > * if you import calculated field on any entity, no error occurs, since the original entity where it was created is not preserved during export.
+ > * if the referenced entity is the current entity, no error occurs.
+ > * if a referenced entity does not exist in your tenant, it will be highlighted as an error in the argument where it is used.
+ > * if the referenced entity is the current tenant and you import it into another tenant, it will automatically adjust to the new tenant without errors.
+
+- Click "Add" to complete the import.
+
+{% assign importCalculatedFieldCE = '
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-1-ce.png,
+ title: Navigate to the **Calculated fields** tab of the target entity or profile. Click the "**+**" icon button, and select **Import calculated field** from the dropdown menu.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-2-ce.png,
+ title: In the opened window, upload the JSON file with the calculated field configuration and click **Import**.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-3-ce.png,
+ title: When importing, the edit window will open to allow modifications.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-4-ce.png,
+ title: Ensure the imported field is correctly applied and update any necessary parameters.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-5-ce.png,
+ title: Click **Add** to complete the import.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-6-ce.png,
+ title: You have imported the calculated field configuration.
+'
+%}
+
+{% assign importCalculatedFieldPE = '
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-1-pe.png
+ title: Navigate to the **Calculated fields** tab of the target entity or profile. Click the "**+**" icon button, and select **Import calculated field** from the dropdown menu.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-2-pe.png
+ title: In the opened window, upload the JSON file with the calculated field configuration and click **Import**.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-3-pe.png
+ title: When importing, the edit window will open to allow modifications.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-4-pe.png
+ title: Ensure the imported field is correctly applied and update any necessary parameters.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-5-pe.png
+ title: Click **Add** to complete the import.
+ ===
+ image: /images/user-guide/calculated-fields/import-calculated-field-6-pe.png
+ title: You have imported the calculated field configuration.
+'
+%}
+
+{% if docsPrefix == null %}
+{% include images-gallery.liquid imageCollection=importCalculatedFieldCE %}
+{% endif %}
+{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
+{% include images-gallery.liquid imageCollection=importCalculatedFieldPE %}
+{% endif %}
+
+
+
+## Managing calculated fields
+
+After a calculated field is created, it appears in the Calculated fields table.
+The list provides a quick overview of key parameters such as name, entity type, entity, and calculated field type.
+
+Each row includes an action panel that allows you to manage the calculated field:
+1. **Copy** — duplicate the configuration to quickly create a new calculated field.
+2. **Export** — download the configuration as a JSON file for backup or migration.
+3. **Events** — view execution events, including state changes and errors.
+4. **Debug** — enable debug mode and inspect detailed execution data.
+5. **Edit** — modify the calculated field configuration.
+6. **Delete** — remove the calculated field from the system.
+
+{% assign calculatedFieldsParametersCE = '
+ ===
+ image: /images/user-guide/calculated-fields/calculated-fields-parameters-1-ce.png
+'
+%}
+
+{% assign calculatedFieldsParametersPE = '
+ ===
+ image: /images/user-guide/calculated-fields/calculated-fields-parameters-1-pe.png
+'
+%}
+
+{% if docsPrefix == null %}
+{% include images-gallery.liquid imageCollection=calculatedFieldsParametersCE %}
+{% endif %}
+{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
+{% include images-gallery.liquid imageCollection=calculatedFieldsParametersPE %}
+{% endif %}
+
+## Calculated fields overview video
+
+Prefer visual learning? Watch this short video for a quick introduction to **Calculated fields** in ThingsBoard.
+It covers the core concepts, supported calculation types, and practical examples for processing and transforming data in real time.
+
+
+
+
+
+
+
+
+
+
+## Your feedback
+
+Don't hesitate to star ThingsBoard on [github](https://github.com/thingsboard/thingsboard){:target="_blank"} to help us spread the word.
+If you have any questions about this sample, please [contact us](/docs/contact-us/){:target="_blank"}.
diff --git a/_includes/docs/user-guide/calculated-fields/propagation-calculated-field.md b/_includes/docs/user-guide/calculated-fields/propagation-calculated-field.md
new file mode 100644
index 0000000000..e5ad23b46d
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/propagation-calculated-field.md
@@ -0,0 +1,579 @@
+* TOC
+{:toc}
+
+Propagation is used to automatically transfer (copy or transform) data from the current entity to a related entity defined through an entity relation.
+
+This type of calculated field allows you to synchronize attributes and telemetry between entities, ensuring data consistency across different levels of the hierarchy.
+
+
+
+## Creating a calculated field
+
+{% include /docs/user-guide/calculated-fields/blocks/creating-calculated-field.md %}
+
+
+
+## Configuration
+
+Define the data sources, the propagation path and data, the output type, and the result processing strategy in the system.
+
+### General
+
+{% assign calculatedFieldType = "Select the **Propagation** calculated field type — it automatically transfers (copies or transforms) data to related entities." %}
+{% include /docs/user-guide/calculated-fields/blocks/general-configuration.md %}
+
+
+
+### Propagation path to related entities
+
+Defines a **single-level** path to the target entity that will receive the data.
+Propagation works only with **direct relationships** — without recursion or multi-level traversal.
+
+Relation direction
+Specifies the direction for locating the target entity:
+- **Up to parent** — data is propagated to the parent entity.
+- **Down to child** — data is propagated to the child entity
+
+Relation type
+The relation type used to identify the target entity, for example:
+- **Contains**
+- **Manages**
+- or **any custom relation types** defined in ThingsBoard
+
+If multiple entities match the selected direction and relation type, Propagation will send the defined data to **each** of them.
+
+{% assign propagationPathToRelatedEntities = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-path-to-related-entities-1-ce.png
+ title: Time series: function must return a JSON object or array with or without a timestamp containing the computed value.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=propagationPathToRelatedEntities %}
+
+
+
+### Data to propagate
+
+Defines which data will be sent to the related entity — either directly (as arguments) or as a computed value.
+
+Two modes are available:
+- [Arguments only](#arguments-only) — works as direct data copying to the related entity, with the ability to rename the key before saving.
+- [Calculation result](#calculation-result) — allows you to compute complex values before sending them to the related entity.
+
+#### Arguments only
+
+In this mode, propagation works as **direct data copying** with the option to rename the key before saving.
+
+Click **Add argument** and configure the following:
+
+Entity type
+The data source is the **current entity** to which the calculated field is applied.
+If the field is created at the **Device profile** or **Asset profile** level, the propagation is applied to each entity associated with that profile.
+
+Argument type
+Defines which entity data will be used for the propagations:
+- **Latest telemetry** - the latest telemetry value (for example, *temperature*, *speed*, *voltage*).
+- **Attribute** - static or semi-static entity data (for example, *model*, *maxTemperature*).
+ For attributes, you must also specify the scope: **Server**, **Client**, or **Shared**.
+
+Time series key / Attribute key
+The telemetry or attribute key whose value will be read.
+
+Output key
+The key under which the propagated data will be stored in the target entity.”
+
+Default value
+The default value used if the data is unavailable.
+
+After configuring the parameters, click **Add**.
+
+{% assign propagationArgument = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-argument-1-ce.png
+ title: Click **Add argument**. The data source will be the current entity to which the calculated field is applied.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-argument-2-ce.png
+ title: Specify the **argument type**, **time series key / attribute key**, **output key**, and **default value**, then click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-argument-3-ce.png
+'
+%}
+
+{% include images-gallery.liquid imageCollection=propagationArgument %}
+
+
+
+#### Calculation result
+
+This mode allows you to perform custom calculations using [TBEL](/docs/{{docsPrefix}}user-guide/tbel/){:target="_blank"} on telemetry and attribute data before sending them to the related entity.
+
+Click **Add argument** and configure the following:
+
+Entity type
+Specify the data source for the variable, which can be:
+- **Сurrent entity** — the entity on which the calculated field is created. If the field is created at the Device Profile or Asset Profile level, the calculation is executed for every entity associated with that profile.
+- Another **Device** or **Asset**: references a different device or asset.
+- **Customer**: retrieves data from the associated customer entity.
+- **Current tenant**: uses data from the tenant entity.
+- **Current owner**: refers to the owner of the current entity and uses its data.
+
+Argument type
+Defines which entity data will be used for the calculations:
+- **Attribute**: uses static or semi-static key-value pairs associated with an entity (e.g., model, max temperature).
+- **Latest telemetry**: uses the most recent telemetry data from an entity (e.g., temperature, speed, voltage).
+- **Time series rolling**: uses historical time series data over a specified time window for trend analysis.
+
+Select the desired argument type:
+
+{% capture calculatedfieldsargumenttype %}
+Attribute%,%attribute%,%templates/calculated-fields/propagation/attribute-argument-type.md%br%
+Latest telemetry%,%latestTelemetry%,%templates/calculated-fields/propagation/latest-telemetry-argument-type.md%br%
+Time series rolling%,%timeSeriesRolling%,%templates/calculated-fields/propagation/time-series-rolling-argument-type.md{% endcapture %}
+
+{% include content-toggle.liquid content-toggle-id="calculatedfieldsargumenttype" toggle-spec=calculatedfieldsargumenttype %}
+
+
+
+Script
+
+Define the function that performs the calculation based on the data specified in the [Arguments](#calculation-result) section.
+After the calculation is executed, the resulting value will be propagated to the target entity.
+
+> The variable name that stores the result must be defined directly inside the function body.
+
+**Example.** The provided script converts temperature readings (temperature) from Fahrenheit to Celsius.
+The calculation result is stored in the temperatureC variable and propagated to the related entity (entities).
+
+```js
+return {
+ "temperatureC": (temperature - 32) / 1.8
+};
+```
+
+{% assign scriptFunction = '
+ ===
+ image: /images/user-guide/calculated-fields/script-propagation-calculated-fields-1-ce.png
+ title: Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=scriptFunction %}
+
+
+
+Script reference
+
+Script calculated fields require the definition of a `calculate(ctx, ...)` function. This function receives the `ctx` object and arguments declared in the configuration.
+
+```javascript
+function calculate(ctx, arg1, arg2, ...): object | object[]
+```
+
+- `ctx`: context object that stores `latestTs` and provides access to all configured arguments.
+
+ Context structure:
+ - `ctx.latestTs`: the most recent timestamp (in milliseconds) from the arguments telemetry. Useful for aligning the result with the incoming data time instead of the server time.
+ - `ctx.args`: an object that contains all declared arguments, where each argument can be accessed using `.` notation:
+ - **single value arguments** (attribute or latest telemetry):
+ - `ctx.args..ts`: timestamp of the argument.
+ - `ctx.args..value`: actual value of the argument.
+ - **time series rolling arguments**:
+ - `ctx.args..timeWindow`: object with `startTs` and `endTs` timestamps.
+ - `ctx.args..values`: array of `{ ts, value }` records representing timestamped telemetry.
+ - `ctx.args..`: call built-in aggregation methods such as `mean()`, `sum()`, `min()`, `max()`, `first()`, `last()`, `merge(...)`, and others.
+ > For more details, refer to the [time series rolling argument](#arguments).
+- `arg1, arg2, ...`: direct access to arguments by name as function parameters. This can be useful for cleaner or more concise expressions. These arguments may be:
+ - single value arguments (attribute or latest telemetry arguments): telemetry value may be of type boolean, int64 (long), double, string, or JSON.
+ - time series rolling arguments: objects that contain time series data within a defined time window.
+
+Use either `ctx.args.` or direct parameter access depending on preference and context clarity.
+
+
+
+### Output
+
+The calculation result is returned as a JSON object, where each key represents a computed value.
+Further processing and data persistence are carried out according to the selected **output strategy**.
+
+Output type
+Select how the result should be stored:
+- [Time series](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"}. The function must return a JSON object or an array of objects containing the computed value — with or without an explicit ts field.
+ To synchronize the result with the timestamp of the input data, use ts: ctx.latestTs and assign it directly to the ts field in the returned object.
+- [Attribute](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"}.The function must return a JSON object with the computed value **without a timestamp**.
+ Select the attribute storage scope: **Server**, **Client**, or **Shared attributes**.
+
+{% assign propagationOutput = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-output-1-ce.png
+ title: Time series: function must return a JSON object or array with or without a timestamp containing the computed value.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-output-2-ce.png
+ title: Attribute: function must return a JSON object without timestamp information containing the computed value.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=propagationOutput %}
+
+
+
+{% include /docs/user-guide/calculated-fields/blocks/output-strategy.md %}
+
+
+
+### Result
+
+After clicking the **Add** button, the calculated field will be added to your entity or profile.
+
+{% assign propagationResult = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-result-1-ce.png
+ title: After clicking the **Add** button, the calculated field will be added to your entity or profile.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=propagationResult %}
+
+Let's check the debug events by clicking the **Events** icon button. The debugging window displays calculated field arguments and the computed result.
+
+> Please note that ThingsBoard stores all debug events for a calculated field during the first 15 minutes after creation. After that, only error events are saved.
+
+{% assign propagationEvent = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-events-1-ce.png
+ title: Check the debug events by clicking the "Events" icon button".
+ ===
+ image: /images/user-guide/calculated-fields/propagation-events-2-ce.png
+ title: The debugging window displays calculated field arguments and the computed result.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=propagationEvent %}
+
+
+
+## Example
+
+### Example 1: Propagate device battery level to the parent Asset
+
+Use case
+
+The **Tracker** device sends the battery charge level (**batteryLevel**).
+It is linked to the **Track 1** asset via the **Contains** relation.
+
+You need to automatically propagate the batteryLevel value to the asset level and store it as an attribute named **deviceBattery**.
+
+{% assign examplePropagationPreparation11 = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-11-ce.png
+ title: **Create a new calculated field** for the device and select the **Script** type.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-12-ce.png
+ title: Add an argument: - **Entity:** Current entity - **Argument type:** Latest telemetry - **Time series key:** temperature. Click **Add**.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=examplePropagationPreparation11 %}
+
+Configuration
+
+Create a calculated field at the device level with the following parameters:
+
+General
+- **Name:** Battery level propagation
+- **Type:** Propagation
+
+Propagation path to related entities
+- **Relation direction:** **Up to parent**
+- **Relation type:** **Contains**
+
+Data to propagate
+- **Mode:** **Arguments only**
+- **Add argument:**
+ - **Entity type:** Current entity
+ - **Argument type:** Latest telemetry
+ - **Time series key:** batteryLevel
+ - **Output key:** deviceBattery
+ - **Default value:** 0
+
+Output
+
+- **Output type:** Attribute
+- **Attribute scope:** Server attributes
+- **Strategy**: Process right away
+
+Click **Add** to save the calculated field.
+
+{% assign examplePropagation11 = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-13-ce.png
+ title: **Create a new calculated field** for the device and select the **Script** type.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-14-ce.png
+ title: Add an argument: - **Entity:** Current entity - **Argument type:** Latest telemetry - **Time series key:** temperature. Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-15-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-16-ce.png
+ title: **Create a new calculated field** for the device and select the **Script** type.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-17-ce.png
+ title: Add an argument: - **Entity:** Current entity - **Argument type:** Latest telemetry - **Time series key:** temperature. Click **Add**.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=examplePropagation11 %}
+
+
+
+Result
+
+On the **Track 1** asset, the following attribute will be stored:
+
+```json
+{
+ "deviceBattery": 78
+}
+```
+
+{% include images-gallery.html imageCollection="example-copy-device-battery-level-to-asset-3" showListImageTitles="true" %}
+
+{% assign examplePropagation12 = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-18-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-19-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-110-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=examplePropagation12 %}
+
+
+
+### Example 2: Dew point calculation and propagation to a parent Asset
+
+Use case
+
+The device sends temperature and humidity values.
+You need to:
+- Calculate the **dew point**.
+- Propagate the result to the related asset.
+- Store it as an attribute.
+
+
+
+Configuration
+
+Create a calculated field at the device level:
+
+General
+- **Name:** Dew point propagation
+- **Type:** Propagation
+
+Propagation path to related entities
+- **Relation direction:** Up to parent
+- **Relation type:** Contains
+
+Data to propagate
+- **Mode:** Calculation result
+
+**Add two arguments:**
+
+**Argument 1**
+- **Entity type:** Current entity
+- **Argument type:** Latest telemetry
+- **Time series key:** temperature
+- **Argument name:** temperature
+
+**Argument 2**
+- **Entity type:** Current entity
+- **Argument type:** Latest telemetry
+- **Time series key:** humidity
+- **Argument name:** humidity
+
+Script
+
+Insert the dew point calculation function into the **Script** field:
+
+**function calculate(ctx, temperatureF) {**
+```js
+// Constants for Magnus formula
+var a = 17.625;
+var b = 243.04;
+
+var alpha = ((a * temperature) / (b + temperature)) + Math.log(humidity / 100.0);
+var dewPoint = toFixed((b * alpha) / (a - alpha), 1);
+
+return {"dewPoint": dewPoint};
+```
+{: .copy-code}
+**}**
+
+Output
+
+- **Output type:** Time series
+- **Strategy**: Process right away
+
+Click **Add** to save the calculated field.
+
+{% assign examplePropagation21 = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-21-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-22-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-23-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-24-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-25-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-26-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-27-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-28-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=examplePropagation21 %}
+
+
+
+Result
+
+In the **Events** window, you will see:
+
+{% assign examplePropagation22 = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-29-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=examplePropagation22 %}
+
+On the related asset, a new telemetry key **dewPoint** will appear in the **Latest telemetry** tab.
+
+{% assign examplePropagation23 = '
+ ===
+ image: /images/user-guide/calculated-fields/propagation-example-210-ce.png
+ title: On the related asset, a new telemetry key **dewPoint** will appear in the **Latest telemetry** tab.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=examplePropagation23 %}
+
+
+
+### Example 3: Propagate HVAC mode to multiple child devices
+
+The **Building A** asset has multiple child HVAC devices linked via the **Manages** relation.
+The **hvacMode** attribute on the asset level defines the operating mode of the devices (_cooling_, _heating_, _off_).
+
+You need to automatically propagate this value to all child HVAC devices.
+
+
+
+Configuration
+
+Create a calculated field **at the Building A asset level**:
+
+General
+- **Name:** Cooling propagation
+- **Type:** Propagation
+
+Propagation path to related entities
+- **Relation direction:** Down to child
+- **Relation type:** Manages
+
+Data to propagate
+- **Mode:** Arguments only
+
+**Add two arguments:**
+
+**Argument 1**
+- **Entity type:** Current entity
+- **Argument type:** Attribute
+- **Time series key:** hvacMode
+- **Argument name:** hvacMode
+- **Default value:** `off`
+
+Output
+
+- **Output type:** Attribute
+- **Strategy**: Process right away
+
+Click **Add** to save the calculated field.
+
+
+
+
+
+
+
+
+
+
+
+
+The **Building A** asset has several child HVAC devices.
+The devices **HVAC 1**, **HVAC 2**, and **HVAC 3** are linked to **Building A** through a **Manages** relation.
+The **hvacMode** attribute on the Building A level defines the HVAC operating mode (e.g., cooling, heating, off).
+The goal is to automatically propagate the hvacMode value to all connected HVAC devices so they operate in the correct mode, such as **cooling**.
+
+Configuration
+
+Create a new **Calculated field** on the **Building A** asset with the following settings:
+
+General
+- **Name:** Cooling propagation
+- **Type:** Propagation
+
+Propagation path to related entities
+- **Relation direction:** **Down to child**
+- **Relation type:** **Manages**
+
+Data to propagate
+- **Mode:** **Arguments only**
+
+**Add argument:**
+- **Entity type:** Current entity
+- **Argument type:** Attribute
+- **Attribute key:** `hvacMode`
+- **Output key:** `hvacMode`
+- **Default value:** `"off"`
+
+Output
+- **Type:** Attribute
+
+Result
+
+Each child HVAC device will receive the following attribute:
+
+```json
+{
+ "hvacMode": "cooling"
+}
+```
+
+
+
+## Your feedback
+
+Don't hesitate to star ThingsBoard on [github](https://github.com/thingsboard/thingsboard){:target="_blank"} to help us spread the word.
+If you have any questions about this sample, please [contact us](/docs/contact-us/){:target="_blank"}.
\ No newline at end of file
diff --git a/_includes/docs/user-guide/calculated-fields/related-entities-aggregation-calculated-field.md b/_includes/docs/user-guide/calculated-fields/related-entities-aggregation-calculated-field.md
new file mode 100644
index 0000000000..814cf0568f
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/related-entities-aggregation-calculated-field.md
@@ -0,0 +1,130 @@
+* TOC
+{:toc}
+
+**Related entities aggregation** — this type of calculated field performs data aggregation from related entities (devices, assets, customers, or the tenant) at a single relation level.
+
+Aggregation is executed only across **direct (single-level) relations**, ensuring precise and predictable selection of entities for processing.
+
+
+
+## Creating a calculated field
+
+{% include /docs/user-guide/calculated-fields/blocks/creating-calculated-field.md %}
+
+
+
+## General
+
+{% assign calculatedFieldType = "Select the **Related entities aggregation** calculated field type — it aggregates data from related entities (min, max, average, count, etc.)." %}
+{% include /docs/user-guide/calculated-fields/blocks/general-configuration.md %}
+
+
+
+## Aggregation path to related entities
+
+Defines a **single-level** path to the entities from which data will be retrieved for aggregation.
+Only **direct relations** are supported between:
+
+**Device ↔ Asset ↔ Customer ↔ Tenant**
+
+**Relation direction**
+
+Specifies the direction for locating the target entity:
+- **Up to parent** — data is propagated to the parent entity.
+- **Down to child** — data is propagated to the child entity
+
+**Relation type**
+
+The relation type used to identify the target entity, for example:
+- **Contains**
+- **Manages**
+- or **any custom relation types** defined in ThingsBoard
+
+### Arguments
+
+Arguments define which data will be retrieved from the related entities before performing aggregation.
+
+Click **Add argument** and configure the following:
+
+**Argument settings**
+(Data is fetched from related entities)
+
+- **Argument type**: defines which entity data will be used for the calculations:
+ - **Latest telemetry** — the most recent telemetry value of the entity (for example, *temperature*, *speed*, *voltage*).
+ - **Attribute** — static or semi-static data associated with the entity (for example, *model*, *maxTemperature*).
+ For attributes, also specify the scope: **Server**, **Client**, or **Shared attributes**.
+- **Time series key / Attribute key**
+ The key of the data that will be read from the related entity.
+- **Argument name**
+ A logical variable name used in Metrics and Filter expressions.
+- **Default value**
+ A fallback value to use if the data source is unavailable.
+- Finally, click **Add** button.
+
+{% include content-toggle.liquid content-toggle-id="simplecalculatedfieldsargumenttype" toggle-spec=simplecalculatedfieldsargumenttype %}
+
+### Metrics
+
+Metrics define which aggregated values should be calculated based on the collected arguments.
+
+Click **Add metric** and configure the following:
+
+**Metric settings**
+- **Metric name**
+ The key under which the aggregated result will be stored.
+- **Aggregation**
+ Available aggregation functions:
+ - **Average**
+ - **Minimum**
+ - **Maximum**
+ - **Sum**
+ - **Count**
+ - **Count unique**
+- **Filter (on/off)**
+ Allows filtering entities before aggregation.
+ A filter is a function that must return a boolean value (true/false) and may use any of the defined arguments.
+ Example:
+
+```js
+return temperature > 10 && status == "active";
+```
+
+- **Value source**
+ Choose which value should be used in the metric:
+ - **Key** — use the argument value directly
+ - **Function** — use the result of a function (e.g., in Script-based aggregations)
+- **Argument name**
+ Select the argument that will serve as the data source for this metric.
+
+**Deduplication interval**
+This parameter defines the minimum time interval between two identical results.
+If the result does not change within this interval, the system will not generate an update.
+
+### Output
+
+The calculated values are returned as a JSON object containing **keys** that represent the computed results, which are then used to store those values in the system.
+Further processing and persistence depend on the selected [Output strategy](#output-strategy-1).
+
+- **Output type**
+ Choose how the aggregated result will be stored:
+ - [Time series](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"}: function must return a JSON object or array with or without a timestamp containing the computed value.
+ > To align the result with the latest timestamp of the input arguments telemetry, use `ctx.latestTs` and assign it explicitly to the `ts` field in the returned object.
+ - [Attribute](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"}: function must return a JSON object **without timestamp** information containing the computed value.
+ For attributes, also specify the scope: **Server**, **Client**, or **Shared attributes**.
+- **Decimals (optional)**
+ The number of decimal places to round the result to. If left empty, no rounding is applied.
+- **Output strategy (optional)**
+ Select how the result should be processed. By default, the value is processed and saved immediately.
+ Learn more about the output strategy in the section [below](#output-strategy).
+- To finish adding the calculated field, click **Add**.
+
+> **[Only for Time series]**
+"**Use latest timestamp**" option — when enabled, the calculated value will be saved using the latest timestamp from the arguments, rather than the server time.
+
+{% include images-gallery.html imageCollection="output-script-1" %}
+
+
+
+{% include /docs/user-guide/calculated-fields/blocks/output-strategy.md %}
+
+
\ No newline at end of file
diff --git a/_includes/docs/user-guide/calculated-fields/script-calculated-field.md b/_includes/docs/user-guide/calculated-fields/script-calculated-field.md
new file mode 100644
index 0000000000..d2a5a1ef9d
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/script-calculated-field.md
@@ -0,0 +1,572 @@
+* TOC
+{:toc}
+
+For complex calculations, [TBEL](/docs/{{docsPrefix}}user-guide/tbel/){:target="_blank"} (ThingsBoard Expression Language) is used.
+Script calculated fields support conditional logic, loops, working with historical data, and can return multiple results in a single execution.
+
+
+
+## Creating a calculated field
+
+{% include /docs/user-guide/calculated-fields/blocks/creating-calculated-field.md %}
+
+
+
+## Configuration
+
+Define the data sources, calculation logic, result format, and how it will be further processed in the system.
+
+### General
+
+{% assign calculatedFieldType = "Select **Script** — this type allows you to perform complex calculations using **TBEL** and return one or more results." %}
+{% include /docs/user-guide/calculated-fields/blocks/general-configuration.md %}
+
+
+
+### Arguments
+
+To configure calculated field, you must add at least one argument.
+
+Click **Add argument** and configure the following:
+
+Entity type
+Defines the data source that will be used in calculations:
+- **Current entity**: refers to the same entity where the calculated field is applied.
+ If the calculated field is created at the **Asset Profile** or **Device Profile** level, the calculation will be executed for each entity associated with that profile.
+- Another **Device** or **Asset**: references a different device or asset for data processing.
+- **Customer**: retrieves data from the associated customer entity.
+- **Current tenant**: uses data from the tenant entity.
+- **Current owner**: refers to the owner of the current entity and uses its data.
+
+{% assign simpleExpression = '
+ ===
+ image: /images/user-guide/calculated-fields/script-argument-1-ce.png
+ title: Click "Add argument" and fill in the required fields.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=simpleExpression %}
+
+{% include images-gallery.html imageCollection="argument-name" %}
+
+Argument type
+Defines the data type:
+- **Attribute**: uses static or semi-static key-value pairs associated with an entity (e.g., model, max temperature).
+- **Latest telemetry**: uses the most recent telemetry data from an entity (e.g., temperature, speed, voltage).
+- **Time series rolling**: uses historical time series data over a specified time window for trend analysis.
+
+Select the desired argument type:
+
+{% capture calculatedfieldsargumenttype %}
+Attribute%,%attribute%,%templates/calculated-fields/script/attribute-argument-type.md%br%
+Latest telemetry%,%latestTelemetry%,%templates/calculated-fields/script/latest-telemetry-argument-type.md%br%
+Time series rolling%,%timeSeriesRolling%,%templates/calculated-fields/script/time-series-rolling-argument-type.md{% endcapture %}
+
+{% include content-toggle.liquid content-toggle-id="calculatedfieldsargumenttype" toggle-spec=calculatedfieldsargumenttype %}
+
+
+
+### Script
+
+In this section, the calculation function is defined using the variables specified in the ["Arguments"](#arguments) section.
+
+> The variable name that will store the calculation result is defined within the function itself.
+
+Example: the function below uses the `temperature` and `humidity` arguments to calculate the dew point value.
+The calculation result will be stored in the variable `dewPoint`, rounding the value to one decimal places.
+
+```js
+// Constants for Magnus formula
+var a = 17.625;
+var b = 243.04;
+
+var alpha = ((a * temperature) / (b + temperature)) + Math.log(humidity / 100.0);
+var dewPoint = toFixed((b * alpha) / (a - alpha), 1);
+
+return {"dewPoint": dewPoint};
+```
+{: .copy-code}
+
+{% assign scriptFunction = '
+ ===
+ image: /images/user-guide/calculated-fields/script-calculated-fields-1-ce.png
+ title: Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=scriptFunction %}
+
+Script calculated fields require the definition of a `calculate(ctx, ...)` function. This function receives the `ctx` object and arguments declared in the configuration.
+
+```javascript
+function calculate(ctx, arg1, arg2, ...): object | object[]
+```
+
+- `ctx`: context object that stores `latestTs` and provides access to all configured arguments.
+
+ Context structure:
+ - `ctx.latestTs`: the most recent timestamp (in milliseconds) from the arguments telemetry. Useful for aligning the result with the incoming data time instead of the server time.
+ - `ctx.args`: an object that contains all declared arguments, where each argument can be accessed using `.` notation:
+ - **single value arguments** (attribute or latest telemetry):
+ - `ctx.args..ts`: timestamp of the argument.
+ - `ctx.args..value`: actual value of the argument.
+ - **time series rolling arguments**:
+ - `ctx.args..timeWindow`: object with `startTs` and `endTs` timestamps.
+ - `ctx.args..values`: array of `{ ts, value }` records representing timestamped telemetry.
+ - `ctx.args..`: call built-in aggregation methods such as `mean()`, `sum()`, `min()`, `max()`, `first()`, `last()`, `merge(...)`, and others.
+ > For more details, refer to the [time series rolling argument](#arguments).
+- `arg1, arg2, ...`: direct access to arguments by name as function parameters. This can be useful for cleaner or more concise expressions. These arguments may be:
+ - single value arguments (attribute or latest telemetry arguments): telemetry value may be of type boolean, int64 (long), double, string, or JSON.
+ - time series rolling arguments: objects that contain time series data within a defined time window.
+
+Use either `ctx.args.` or direct parameter access depending on preference and context clarity.
+
+
+
+### Output
+
+The result is returned as a JSON object and processed according to the selected strategy.
+
+Output type
+Select how the result should be stored:
+- [Time series](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"}: the function returns a JSON object or array, **with or without a timestamp**, containing the calculated value.
+ > To align the result with the latest timestamp of the input arguments telemetry, use `ctx.latestTs` and assign it explicitly to the `ts` field in the returned object.
+- [Attribute](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"}: the function returns a JSON object **without timestamp** information containing the computed value.
+ For attributes, also specify the scope: **Server**, **Client**, or **Shared attributes**.
+
+{% assign scriptOutput = '
+ ===
+ image: /images/user-guide/calculated-fields/script-output-1-ce.png
+ title: Time series: function must return a JSON object or array with or without a timestamp containing the computed value.
+ ===
+ image: /images/user-guide/calculated-fields/script-output-2-ce.png
+ title: Attribute: function must return a JSON object without timestamp information containing the computed value.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=scriptOutput %}
+
+
+
+{% include /docs/user-guide/calculated-fields/blocks/output-strategy.md %}
+
+
+
+### Result
+
+After clicking the **Add** button, the calculated field will be added to your entity or profile.
+
+{% assign scriptResult = '
+ ===
+ image: /images/user-guide/calculated-fields/script-result-1-ce.png
+ title: After clicking the **Add** button, the calculated field will be added to your entity or profile.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=scriptResult %}
+
+Let's check the debug events by clicking the **Events** icon button. The debugging window displays calculated field arguments and the computed result.
+
+> Please note that ThingsBoard stores all debug events for a calculated field during the first 15 minutes after creation. After that, only error events are saved.
+
+{% assign scriptEvent = '
+ ===
+ image: /images/user-guide/calculated-fields/script-events-1-ce.png
+ title: Check the debug events by clicking the "Events" icon button".
+ ===
+ image: /images/user-guide/calculated-fields/script-events-2-ce.png
+ title: The debugging window displays calculated field arguments and the computed result.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=scriptEvent %}
+
+
+
+## Examples
+
+### Example 1: Fahrenheit to Celsius
+
+Scenario
+
+The device sends the room temperature in degrees Fahrenheit (**temperature**).
+You need to convert the value to degrees Celsius, round the result to two decimal places, and store it as telemetry with the same timestamp.
+
+
+
+Configuration steps
+
+Create a calculated field at the device level with the following parameters:
+
+General
+- **Name:** C to F
+- **Type:** Script
+
+Arguments
+
+Add an argument:
+- **Entity:** Current entity
+- **Argument type:** Latest telemetry
+- **Time series key:** temperature
+- **Argument name:** temperature
+
+Script
+
+Insert the calculation function into the **Script** field:
+
+**function calculate(ctx, temperatureF) {**
+```js
+var temperatureC = (temperature - 32) / 1.8;
+return {
+ "ts": ctx.latestTs,
+ "values": {
+ "temperatureC": toFixed(temperatureC, 2)
+ }
+}
+```
+{: .copy-code}
+**}**
+
+Output
+
+- **Output type:** Time series
+- **Strategy**: Process right away
+
+Click **Add** to save the calculated field.
+
+{% assign exampleScript11 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-11-ce.png
+ title: **Create a new calculated field** for the device and select the **Script** type.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-12-ce.png
+ title: Add an argument: - **Entity:** Current entity - **Argument type:** Latest telemetry - **Time series key:** temperature. Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-13-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field. The calculated field has been added.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript11 %}
+
+
+
+Result
+
+In the **Events** window, you will see:
+- the input message with **temperature**,
+- the output message with **temperatureC**.
+
+Both messages will have the same timestamp.
+
+{% assign exampleScript12 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-14-ce.png
+ title: Open the **Events** pop-up window of the calculated field.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-15-ce.png
+ title: You will see the input message with **temperature** and the output message with **temperatureC**. Both messages will have the same timestamp.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript12 %}
+
+In the **Latest telemetry** tab, the **temperatureC** key will appear.
+
+{% assign exampleScript13 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-16-ce.png
+ title: In the **Latest telemetry** tab, the following key will appear: **temperatureC** — the result of the calculation, which displays the temperature in degrees Celsius.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript13 %}
+
+
+
+### Example 2: Air density calculation
+
+Scenario
+
+The **Building A** asset has two associated devices:
+- **Smart Device** — sends the temperature value as telemetry (**temperature**).
+- **Altimeter** — sends the altitude value as an attribute (**altitude**).
+
+You need to calculate the **air density** based on these data and store the result as telemetry.
+
+Prerequisites
+
+{% assign examplePrepareScript2 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-prepare-1-ce.png
+ title: An asset: **Building A**.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-prepare-2-ce.png
+ title: A device: **Smart Device** (sends **temperature** telemetry)
+ ===
+ image: /images/user-guide/calculated-fields/script-example-prepare-3-ce.png
+ title: A device: **Altimeter** (sends **altitude** as an attribute)
+'
+%}
+
+{% include images-gallery.liquid imageCollection=examplePrepareScript2 %}
+
+
+
+Configuration steps
+
+Create a calculated field at the asset level with the following parameters:
+
+General
+- **Name:** Air density calculation
+- **Type:** Script
+
+Arguments
+
+Add two arguments:
+
+**Argument 1**
+- **Entity type:** Device
+- **Device name:** Smart Device
+- **Argument type:** Time series rolling
+- **Time series key:** temperature
+- **Argument name:** temperature
+- **Time window:** 15 minutes
+- **Max value:** 100
+
+**Argument 2**
+- **Entity type:** Device
+- **Device name:** Altimeter
+- **Argument type:** Attribute
+- **Attribute scope:** Shared attribute
+- **Attribute key:** altitude
+- **Argument name:** altitude
+
+Script
+
+Paste the calculation function into the **Script** field:
+
+**function calculate(ctx, altitude, temperature) {**
+```js
+var avgTemperature = temperature.mean(); // Get average temperature
+var temperatureK = (avgTemperature - 32) * (5 / 9) + 273.15; // Convert Fahrenheit to Kelvin
+
+// Estimate air pressure based on altitude
+var pressure = 101325 * Math.pow((1 - 2.25577e-5 * altitude), 5.25588);
+
+// Air density formula
+var airDensity = pressure / (287.05 * temperatureK);
+
+return {
+ "airDensity": toFixed(airDensity, 2)
+};
+
+```
+{: .copy-code}
+**}**
+
+Output
+
+- **Output type:** Time series
+- **Strategy**: Process right away
+
+Click **Add** to save the calculated field.
+
+{% assign exampleScript21 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-21-ce.png
+ title: **Create a new calculated field** for the asset **Building A** and select the **Script** type.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-22-ce.png
+ title: Add a first argument: - **Entity:** Smart Device - **Argument type:** Time series rolling - **Time series key:** temperature. Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-23-ce.png
+ title: Add a second argument: - **Entity:** Altimeter - **Argument type:** Attribute - **Attribute key:** altitude. Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-24-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-25-ce.png
+ title: The calculated field has been added.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript21 %}
+
+
+
+Result
+
+In the **Events** window, the arguments and the calculation result are displayed.
+
+{% assign exampleScript22 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-26-ce.png
+ title: In the **Events** window, the arguments and the calculation result are displayed.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-27-ce.png
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript22 %}
+
+In the **Latest telemetry** tab of the **Building A** asset, the **airDensity** key will appear.
+
+{% assign exampleScript23 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-28-ce.png
+ title: In the **Latest telemetry** tab of the **Building A** asset, the **airDensity** key will appear.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript23 %}
+
+
+
+### Example 3: Freezer temperature analysis
+
+Scenario
+
+This example demonstrates freezer operation analysis based on two telemetry parameters:
+- **temperature** — internal temperature (rolling time series)
+- **defrost** — defrost mode status
+ (0 — off, 1 — on)
+
+The goal is to detect situations where:
+- the freezer is **not** in defrost mode, **and**
+- the air temperature exceeds **-5 °C**.
+
+In such cases, the system should generate a telemetry event containing information about the issue.
+
+
+
+Configuration steps
+
+Create a calculated field at the device level with the following parameters:
+
+General
+- **Name:** Freezer temperature analysis
+- **Type:** Script
+
+Arguments
+
+Add two arguments:
+
+**Argument 1**
+- **Entity type:** Current entity
+- **Argument type:** Time series rolling
+- **Time series key:** defrost
+- **Argument name:** defrost
+- **Time window:** 15 minutes
+- **Max value:** 100
+
+**Argument 2**
+- **Entity type:** Current entity
+- **Argument type:** Time series rolling
+- **Time series key:** temperature
+- **Argument name:** temperature
+- **Time window:** 15 minutes
+- **Max value:** 100
+
+Script
+
+Paste the calculation function into the **Script** field:
+
+**function calculate(ctx, defrost, temperature) {**
+```js
+var merged = temperature.merge(defrost);
+var result = [];
+
+foreach(item: merged) {
+ if (item.v1 > -5.0 && item.v2 == 0) {
+ result.add({
+ ts: item.ts,
+ values: {
+ issue: {
+ temperature: item.v1,
+ defrostState: false
+ }
+ }
+ });
+ }
+}
+
+return result;
+```
+{: .copy-code}
+**}**
+
+Output
+
+- **Output type:** Time series
+- **Strategy**: Process right away
+
+Click **Add** to save the calculated field.
+
+{% assign exampleScript31 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-31-ce.png
+ title: **Create a new calculated field** for the device and select the **Script** type.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-32-ce.png
+ title: Add first argument: - **Entity type:** Current entity - **Argument type:** Time series rolling - **Time series key:** defrost - **Argument name:** defrost. - Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-33-ce.png
+ title: Add a second argument: - **Entity type:** Current entity - **Argument type:** Time series rolling - **Time series key:** temperature - **Argument name:** temperature. - Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-34-ce.png
+ title: Paste the calculation function into the **Script** field. - In the **Output** section, select **type:** Time series. - Click **Add** to save the calculated field.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-35-ce.png
+ title: The calculated field has been added.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript31 %}
+
+
+
+Result
+
+In the **Events** window, you can view the generated events.
+
+{% assign exampleScript32 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-36-ce.png
+ title: In the **Events** window, you can view the generated events.
+ ===
+ image: /images/user-guide/calculated-fields/script-example-37-ce.png
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript32 %}
+
+the **Latest telemetry** tab, the issue key will appear, for example:
+
+```json
+{
+ "issue": {
+ "temperature": 0.8,
+ "defrostState": false
+ }
+}
+
+```
+
+This indicates that the freezer is in a potentially critical state.
+
+{% assign exampleScript33 = '
+ ===
+ image: /images/user-guide/calculated-fields/script-example-38-ce.png
+ title: Go to the **Latest telemetry** tab. The **issue** key is the result of the calculation.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleScript33 %}
+
+
+
+## Your feedback
+
+Don't hesitate to star ThingsBoard on [github](https://github.com/thingsboard/thingsboard){:target="_blank"} to help us spread the word.
+If you have any questions about this sample, please [contact us](/docs/contact-us/){:target="_blank"}.
\ No newline at end of file
diff --git a/_includes/docs/user-guide/calculated-fields/simple-calculated-field.md b/_includes/docs/user-guide/calculated-fields/simple-calculated-field.md
new file mode 100644
index 0000000000..9e79afc46f
--- /dev/null
+++ b/_includes/docs/user-guide/calculated-fields/simple-calculated-field.md
@@ -0,0 +1,261 @@
+* TOC
+{:toc}
+
+Simple calculated fields use basic arithmetic operations (+, -, *, /) and standard functions such as `sqrt` (square root), `pow` (power), `abs` (absolute value), etc.
+
+
+
+## Creating a calculated field
+
+{% include /docs/user-guide/calculated-fields/blocks/creating-calculated-field.md %}
+
+
+
+## Configuration
+
+Define the data sources, calculation logic, result format, and how it will be further processed in the system.
+
+### General
+
+{% assign calculatedFieldType = "Select the **Simple** calculated field type — it uses basic mathematical operations and standard functions." %}
+{% include /docs/user-guide/calculated-fields/blocks/general-configuration.md %}
+
+
+
+### Arguments
+
+To configure a calculated field, you must add at least one argument.
+
+Click **Add argument** and configure the following:
+
+Entity type
+Defines the data source that will be used in calculations:
+- **Current entity** - the current entity to which the calculated field is applied.
+ If the field is created at the **Device profile** or **Asset profile** level, the calculation is performed for each entity associated with that profile.
+- Another **Device** or **Asset** — another entity from which data is read.
+- **Customer** — the associated customer.
+- **Current tenant** — the current tenant.
+- **Current owner** — the owner of the current entity.
+
+Entity type
+Defines the type of data used in calculations:
+- **Latest telemetry** - the latest telemetry value (for example, *temperature*, *speed*, *voltage*).
+- **Attribute** - static or semi-static entity data (for example, *model*, *maxTemperature*).
+ For attributes, you must also specify the scope: **Server**, **Client**, or **Shared**.
+
+Time series key / Attribute key
+The telemetry or attribute key whose value will be read.
+
+Argument name
+The name of the variable used in the formula or script.
+
+Default value
+The default value used if the data is unavailable.
+
+After configuring the parameters, click **Add**.
+
+{% assign simpleArgument = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-argument-1-ce.png
+ title: Click **Add argument** and define the data source.
+ ===
+ image: /images/user-guide/calculated-fields/simple-argument-2-ce.png
+ title: Specify the **entity type**, **time series key / attribute key**, **argument name**, and **default value**, then click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/simple-argument-3-ce.png
+'
+%}
+
+{% include images-gallery.liquid imageCollection=simpleArgument %}
+
+
+
+### Expression
+
+In the **Expression** section, enter the mathematical expression for the calculation using the variables defined in the [Arguments](#arguments) section.
+
+{% assign simpleExpression = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-expression-1-ce.png
+ title: In the **Expression** section, enter the mathematical expression for the calculation using the variables defined in the **Arguments** section.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=simpleExpression %}
+
+
+
+### Output
+
+The calculation result can be stored either as [Time series](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"} or as an [Attribute](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"}.
+Further processing and persistence depend on the selected [Output strategy](#output-strategy).
+
+Output type
+Select how the result should be stored:
+- **Time series** or
+- **Attribute**.
+ For attributes, also specify the scope: **Server**, **Client**, or **Shared attributes**.
+
+Output type
+Specify the key under which the calculated value will be stored.
+
+Decimals (optional)
+Define the number of decimal places to round the result to.
+If not specified, the value will not be rounded.
+
+> **[Only for Time series]**
+"**Use latest timestamp**" option — when enabled, the calculated value will be stored using the most recent timestamp from the arguments telemetry instead of the server time.
+
+{% assign simpleOutput = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-output-1-ce.png
+ title: Select the output type as **Time series**. Set a name to the variable that will store the calculation result. Optionally, specify the number of decimal places.
+ ===
+ image: /images/user-guide/calculated-fields/simple-output-2-ce.png
+ title: Select the output type as **Attribute** and choose its scope: **Server attributes**, **Client attributes**, or **Shared attributes**. Set a name to the variable that will store the calculation result. Optionally, set the number of decimal places.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=simpleOutput %}
+
+
+
+{% include /docs/user-guide/calculated-fields/blocks/output-strategy.md %}
+
+
+
+### Result
+
+After clicking the **Add** button, the calculated field will be added to your entity or profile.
+
+{% assign scriptResult = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-result-1-ce.png
+ title: After clicking the **Add** button, the calculated field will be added to your entity or profile.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=scriptResult %}
+
+Let's check the debug events by clicking the **Events** icon button. The debugging window displays calculated field arguments and the computed result.
+
+> Please note that ThingsBoard stores all debug events for a calculated field during the first 15 minutes after creation. After that, only error events are saved.
+
+{% assign scriptEvent = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-events-1-ce.png
+ title: Check the debug events by clicking the "Events" icon button".
+ ===
+ image: /images/user-guide/calculated-fields/simple-events-2-ce.png
+ title: The debugging window displays calculated field arguments and the computed result.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=scriptEvent %}
+
+
+
+## Example: Dew point calculation
+
+Scenario
+
+The **Smart Device** sends **temperature** and **humidity** values in real time.
+Based on these data, you need to calculate the **dew point** and store the result as telemetry.
+
+
+
+Configuration steps
+
+Create a calculated field at the device level with the following parameters:
+
+General
+- **Name:** Dew point calculation
+- **Type:** Simple
+
+Arguments
+
+Add two arguments:
+
+**Argument 1**
+- **Entity type:** Current entity
+- **Argument type:** Latest telemetry
+- **Time series key:** temperature
+- **Argument name:** temperature
+
+**Argument 2**
+- **Entity type:** Current entity
+- **Argument type:** Latest telemetry
+- **Time series key:** humidity
+- **Argument name:** humidity
+
+Expression
+
+The following mathematical expression, based on temperature and humidity values, is used to calculate the dew point.
+
+```text
+(243.04 * (ln(humidity / 100) + 17.625 * temperature / (243.04 + temperature)) / (17.625 - (ln(humidity / 100) + 17.625 * temperature / (243.04 + temperature))))
+```
+{: .copy-code}
+
+Output
+
+- **Output type:** Time series
+- **Strategy**: Process right away
+
+Click **Add** to save the calculated field.
+
+{% assign exampleSimple1 = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-1-ce.png
+ title: Create a **"Simple"** calculated field at the device level.
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-2-ce.png
+ title: Add first argument: - **Entity type:** Current entity - **Argument type:** Latest telemetry - **Time series key:** temperature Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-3-ce.png
+ title: Add a second argument: - **Entity type:** Current entity - **Argument type:** Latest telemetry - **Time series key:** humidity Click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-4-ce.png
+ title: Insert the mathematical **expression** to calculate the dew point. In the **Output** section - Select **type:** Time series. - Specify the name of the calculated variable — **dewPoint** — under which the calculation result will be saved. Click **Add** to save the calculated field.
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-5-ce.png
+ title: The calculated field has been added.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleSimple1 %}
+
+
+
+Result
+
+In the **Events** window, you can view the input arguments and the calculation result.
+
+{% assign exampleSimple2 = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-6-ce.png
+ title: In the **Events** window, you can view the input arguments and the calculation result.
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-7-ce.png
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleSimple2 %}
+
+In the **Latest telemetry** tab, you'll see the **temperature** and **humidity** telemetry values from the device, along with **dewPoint** — the calculated dew point result.
+
+{% assign exampleSimple3 = '
+ ===
+ image: /images/user-guide/calculated-fields/simple-example-8-ce.png
+ title: In the **Latest telemetry** tab, you'll see the **temperature** and **humidity** telemetry values from the device, along with **dewPoint** — the calculated dew point result.
+'
+%}
+
+{% include images-gallery.liquid imageCollection=exampleSimple3 %}
+
+
+
+## Your feedback
+
+Don't hesitate to star ThingsBoard on [github](https://github.com/thingsboard/thingsboard){:target="_blank"} to help us spread the word.
+If you have any questions about this sample, please [contact us](/docs/contact-us/){:target="_blank"}.
\ No newline at end of file
diff --git a/_includes/docs/user-guide/calculated-fields/time-series-data-aggregation-calculated-field.md b/_includes/docs/user-guide/calculated-fields/time-series-data-aggregation-calculated-field.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/_includes/templates/calculated-fields/output-strategy/process-right-away.md b/_includes/templates/calculated-fields/output-strategy/process-right-away.md
new file mode 100644
index 0000000000..907f44c996
--- /dev/null
+++ b/_includes/templates/calculated-fields/output-strategy/process-right-away.md
@@ -0,0 +1,18 @@
+In this mode, the result is handled immediately, bypassing the Rule Chain.
+This ensures minimal latency and guaranteed DB persistence.
+
+**Options for Time series:**
+- **Save to time series** — stores the value as historical data (ts_kv).
+- **Save to latest values** — updates the latest value in ts_kv_latest if the timestamp is newer.
+- **Send to WebSockets** — delivers updates to active WebSocket subscribers (without storing in DB).
+- **Send to Calculated fields** — forwards updates to other calculated fields.
+ This enables building *chains of dependent fields*, where a single event can trigger multiple secondary calculations without using Rule Chains.
+- **Custom TTL** — sets a custom storage duration (TTL) for this time series.
+ If disabled, the TTL defined in the **Tenant Profile** is used.
+
+**Options for Attributes:**
+- **Save to database** — writes the attribute to persistent storage.
+- **Send to WebSockets** — instantly sends an update to WebSocket subscribers (without DB write).
+- **Send to Calculated fields** — notifies other calculated fields about the attribute change, enabling cascaded calculations.
+- **Update attribute only on value change** — updates the attribute only when the value actually changes.
+- **Send attributes updates notification** — generates an Attributes Updated event and sends it to the Default Rule Chain.
diff --git a/_includes/templates/calculated-fields/output-strategy/process-via-rule-chains.md b/_includes/templates/calculated-fields/output-strategy/process-via-rule-chains.md
new file mode 100644
index 0000000000..6a4a34a0e3
--- /dev/null
+++ b/_includes/templates/calculated-fields/output-strategy/process-via-rule-chains.md
@@ -0,0 +1,16 @@
+In this mode, the result is **NOT written directly to the database**.
+Instead, ThingsBoard generates an internal message:
+- POST_TELEMETRY_REQUEST, or
+- POST_ATTRIBUTES_REQUEST
+
+and routes it to the entity's **Default Rule Chain**.
+
+Use this option when you need to:
+- execute complex processing logic
+- apply filters, scripts, or conversions
+- control data persistence based on conditions
+- perform enrichment, routing, or forwarding
+
+To actually store the result, the Rule Chain must include a [save time series](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node){:target="_blank"} or [save attributes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-attributes-node){:target="_blank"} node.
+
+> This is the classic Calculated Field processing model used prior to the introduction of direct processing.
diff --git a/_includes/templates/calculated-fields/propagation/attribute-argument-type.md b/_includes/templates/calculated-fields/propagation/attribute-argument-type.md
new file mode 100644
index 0000000000..479ff28221
--- /dev/null
+++ b/_includes/templates/calculated-fields/propagation/attribute-argument-type.md
@@ -0,0 +1,20 @@
+- Choose the scope: **Server**, **Client**, or **Shared**.
+- Specify the **attribute key**.
+- Set the **argument name** - the variable name used in the script logic.
+- Optionally, set **default value** for attribute.
+
+Finally, click **Add** button.
+
+A new argument has been added.
+
+{% assign attributeArgumentType = '
+ ===
+ image: /images/user-guide/calculated-fields/script-attribute-argument-1-ce.png
+ title: Select the **attribute** argument type, choose the **attribute scope**, specify the **attribute key**, and set the **argument name**. Optionally, define a default value. Click **Add** to add the argument.
+ ===
+ image: /images/user-guide/calculated-fields/script-attribute-argument-2-ce.png
+ title: A new argument has been added.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=attributeArgumentType %}
diff --git a/_includes/templates/calculated-fields/propagation/latest-telemetry-argument-type.md b/_includes/templates/calculated-fields/propagation/latest-telemetry-argument-type.md
new file mode 100644
index 0000000000..cbb7206198
--- /dev/null
+++ b/_includes/templates/calculated-fields/propagation/latest-telemetry-argument-type.md
@@ -0,0 +1,19 @@
+- Specify the **time series key**.
+- Set the **argument name** - the variable name used in the script logic.
+- Optionally, set **default value** for time series.
+
+Finally, click **Add** button.
+
+A new argument has been added.
+
+{% assign latestTelemetryArgumentType = '
+ ===
+ image: /images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce.png
+ title: Select the **latest telemetry** argument type and specify the **time series key**. Optionally, define a default value. Finally, click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce.png
+ title: A new argument has been added.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=latestTelemetryArgumentType %}
diff --git a/_includes/templates/calculated-fields/propagation/time-series-rolling-argument-type.md b/_includes/templates/calculated-fields/propagation/time-series-rolling-argument-type.md
new file mode 100644
index 0000000000..e6b8e2a1a3
--- /dev/null
+++ b/_includes/templates/calculated-fields/propagation/time-series-rolling-argument-type.md
@@ -0,0 +1,21 @@
+- Specify the **time series key**.
+- Set the **argument name** - the variable name used in the script logic.
+- Define the **time window** for data collection, which determines the period over which historical telemetry is gathered for calculations.
+- Set the **maximum number of values** to be processed.
+ > **Note**: This setting is configured in the [Tenant profile](/docs/{{docsPrefix}}user-guide/tenant-profiles/#api-limits--usage){:target="_blank"} by the system administrator.
+
+Finally, click **Add** button.
+
+A new argument has been added.
+
+{% assign rollingArgumentType = '
+===
+image: /images/user-guide/calculated-fields/script-rolling-argument-1-ce.png
+title: Select the **time series rolling** argument type and specify the **time series key**. Define the **time window for data collection** and the maximum number of values to be processed, then click **Add**.
+===
+image: /images/user-guide/calculated-fields/script-rolling-argument-2-ce.png
+title: A new argument has been added.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=rollingArgumentType %}
\ No newline at end of file
diff --git a/_includes/templates/calculated-fields/script/attribute-argument-type.md b/_includes/templates/calculated-fields/script/attribute-argument-type.md
new file mode 100644
index 0000000000..4c88cde4b6
--- /dev/null
+++ b/_includes/templates/calculated-fields/script/attribute-argument-type.md
@@ -0,0 +1,20 @@
+- Choose the scope: **Server**, **Client**, or **Shared**.
+- Specify the **attribute key**.
+- Set the **argument name** - the variable name used in the script logic.
+- Optionally, set **default value** for attribute.
+
+Finally, click **Add** button.
+
+A new argument has been added.
+
+{% assign attributeArgumentType = '
+ ===
+ image: /images/user-guide/calculated-fields/script-attribute-argument-1-ce.png
+ title: Select the **attribute** argument type, choose the **attribute scope**, specify the **attribute key**, and set the **argument name**. Optionally, define a default value. Click **Add** to add the argument.
+ ===
+ image: /images/user-guide/calculated-fields/script-attribute-argument-2-ce.png
+ title: A new argument has been added.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=attributeArgumentType %}
\ No newline at end of file
diff --git a/_includes/templates/calculated-fields/script/latest-telemetry-argument-type.md b/_includes/templates/calculated-fields/script/latest-telemetry-argument-type.md
new file mode 100644
index 0000000000..402a5aa9eb
--- /dev/null
+++ b/_includes/templates/calculated-fields/script/latest-telemetry-argument-type.md
@@ -0,0 +1,19 @@
+- Specify the **time series key**.
+- Set the **argument name** - the variable name used in the script logic.
+- Optionally, set **default value** for time series.
+
+Finally, click **Add** button.
+
+A new argument has been added.
+
+{% assign latestTelemetryArgumentType = '
+ ===
+ image: /images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce.png
+ title: Select the **latest telemetry** argument type and specify the **time series key**. Optionally, define a default value. Finally, click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce.png
+ title: A new argument has been added.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=latestTelemetryArgumentType %}
\ No newline at end of file
diff --git a/_includes/templates/calculated-fields/script/time-series-rolling-argument-type.md b/_includes/templates/calculated-fields/script/time-series-rolling-argument-type.md
new file mode 100644
index 0000000000..23bbdfc1e7
--- /dev/null
+++ b/_includes/templates/calculated-fields/script/time-series-rolling-argument-type.md
@@ -0,0 +1,21 @@
+- Specify the **time series key**.
+- Set the **argument name** - the variable name used in the script logic.
+- Define the **time window** for data collection, which determines the period over which historical telemetry is gathered for calculations.
+- Set the **maximum number of values** to be processed.
+ > **Note**: This setting is configured in the [Tenant profile](/docs/{{docsPrefix}}user-guide/tenant-profiles/#api-limits--usage){:target="_blank"} by the system administrator.
+
+Finally, click **Add** button.
+
+A new argument has been added.
+
+{% assign rollingArgumentType = '
+ ===
+ image: /images/user-guide/calculated-fields/script-rolling-argument-1-ce.png
+ title: Select the **time series rolling** argument type and specify the **time series key**. Define the **time window for data collection** and the maximum number of values to be processed, then click **Add**.
+ ===
+ image: /images/user-guide/calculated-fields/script-rolling-argument-2-ce.png
+ title: A new argument has been added.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=rollingArgumentType %}
\ No newline at end of file
diff --git a/css/docs.sass b/css/docs.sass
index 6d62de8d11..6691527ea2 100644
--- a/css/docs.sass
+++ b/css/docs.sass
@@ -25,6 +25,7 @@
@import "../_includes/content-toggle-liquid"
@import "../_includes/images-gallery"
@import "../_includes/rule-node-cards"
+@import "../_includes/calculated-fields-cards"
@import "../_includes/manual-breadcrumbs"
@import "../_includes/usecase-nav"
@import "../_includes/trendz-wizard"
diff --git a/docs/paas/eu/user-guide/calculated-fields.md b/docs/paas/eu/user-guide/calculated-fields/index.md
similarity index 89%
rename from docs/paas/eu/user-guide/calculated-fields.md
rename to docs/paas/eu/user-guide/calculated-fields/index.md
index 7601c35c61..4204b505f8 100644
--- a/docs/paas/eu/user-guide/calculated-fields.md
+++ b/docs/paas/eu/user-guide/calculated-fields/index.md
@@ -47,32 +47,6 @@ time-series-rolling-argument-type:
image: /images/user-guide/calculated-fields/time-series-rolling-argument-type-2-pe.png
title: 'A new argument has been added.'
-expression-simple-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe.png
- title: 'In the "Expression" section, enter the mathematical expression for the calculation using the variables defined in the "Arguments" section.'
-
-output-simple-1:
- 0:
- image: /images/user-guide/calculated-fields/output-simple-1-pe.png
- title: 'Select the output type as "Time series". Set a name to the variable that will store the calculation result. Optionally, specify the number of decimal places.'
- 1:
- image: /images/user-guide/calculated-fields/output-simple-2-pe.png
- title: 'Select the output type as "Attribute" and choose its scope: "Server attributes", "Client attributes", or "Shared attributes". Set a name to the variable that will store the calculation result. Optionally, set the number of decimal places.'
-
-expression-script-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe.png
- title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
-
-output-script-1:
- 0:
- image: /images/user-guide/calculated-fields/output-script-1-pe.png
- title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
- 1:
- image: /images/user-guide/calculated-fields/output-script-2-pe.png
- title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
-
calculated-field-result:
0:
image: /images/user-guide/calculated-fields/calculated-field-result-1-pe.png
@@ -238,4 +212,4 @@ example-script-calculated-fields-3:
{% assign docsPrefix = "paas/eu/" %}
{% include get-hosts-name.html docsPrefix=docsPrefix %}
-{% include docs/user-guide/calculated-fields.md %}
\ No newline at end of file
+{% include docs/user-guide/calculated-fields/index.md %}
\ No newline at end of file
diff --git a/docs/paas/user-guide/calculated-fields.md b/docs/paas/user-guide/calculated-fields/index.md
similarity index 89%
rename from docs/paas/user-guide/calculated-fields.md
rename to docs/paas/user-guide/calculated-fields/index.md
index 1777e8658b..89d1184f8c 100644
--- a/docs/paas/user-guide/calculated-fields.md
+++ b/docs/paas/user-guide/calculated-fields/index.md
@@ -47,32 +47,6 @@ time-series-rolling-argument-type:
image: /images/user-guide/calculated-fields/time-series-rolling-argument-type-2-pe.png
title: 'A new argument has been added.'
-expression-simple-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe.png
- title: 'In the "Expression" section, enter the mathematical expression for the calculation using the variables defined in the "Arguments" section.'
-
-output-simple-1:
- 0:
- image: /images/user-guide/calculated-fields/output-simple-1-pe.png
- title: 'Select the output type as "Time series". Set a name to the variable that will store the calculation result. Optionally, specify the number of decimal places.'
- 1:
- image: /images/user-guide/calculated-fields/output-simple-2-pe.png
- title: 'Select the output type as "Attribute" and choose its scope: "Server attributes", "Client attributes", or "Shared attributes". Set a name to the variable that will store the calculation result. Optionally, set the number of decimal places.'
-
-expression-script-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe.png
- title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
-
-output-script-1:
- 0:
- image: /images/user-guide/calculated-fields/output-script-1-pe.png
- title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
- 1:
- image: /images/user-guide/calculated-fields/output-script-2-pe.png
- title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
-
calculated-field-result:
0:
image: /images/user-guide/calculated-fields/calculated-field-result-1-pe.png
@@ -238,4 +212,4 @@ example-script-calculated-fields-3:
{% assign docsPrefix = "paas/" %}
{% include get-hosts-name.html docsPrefix=docsPrefix %}
-{% include docs/user-guide/calculated-fields.md %}
\ No newline at end of file
+{% include docs/user-guide/calculated-fields/index.md %}
\ No newline at end of file
diff --git a/docs/pe/user-guide/calculated-fields.md b/docs/pe/user-guide/calculated-fields/index.md
similarity index 89%
rename from docs/pe/user-guide/calculated-fields.md
rename to docs/pe/user-guide/calculated-fields/index.md
index ada3675bf7..6a8ff1705b 100644
--- a/docs/pe/user-guide/calculated-fields.md
+++ b/docs/pe/user-guide/calculated-fields/index.md
@@ -47,32 +47,6 @@ time-series-rolling-argument-type:
image: /images/user-guide/calculated-fields/time-series-rolling-argument-type-2-pe.png
title: 'A new argument has been added.'
-expression-simple-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe.png
- title: 'In the "Expression" section, enter the mathematical expression for the calculation using the variables defined in the "Arguments" section.'
-
-output-simple-1:
- 0:
- image: /images/user-guide/calculated-fields/output-simple-1-pe.png
- title: 'Select the output type as "Time series". Set a name to the variable that will store the calculation result. Optionally, specify the number of decimal places.'
- 1:
- image: /images/user-guide/calculated-fields/output-simple-2-pe.png
- title: 'Select the output type as "Attribute" and choose its scope: "Server attributes", "Client attributes", or "Shared attributes". Set a name to the variable that will store the calculation result. Optionally, set the number of decimal places.'
-
-expression-script-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe.png
- title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
-
-output-script-1:
- 0:
- image: /images/user-guide/calculated-fields/output-script-1-pe.png
- title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
- 1:
- image: /images/user-guide/calculated-fields/output-script-2-pe.png
- title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
-
calculated-field-result:
0:
image: /images/user-guide/calculated-fields/calculated-field-result-1-pe.png
@@ -238,4 +212,4 @@ example-script-calculated-fields-3:
{% assign docsPrefix = "pe/" %}
{% include get-hosts-name.html docsPrefix=docsPrefix %}
-{% include docs/user-guide/calculated-fields.md %}
\ No newline at end of file
+{% include docs/user-guide/calculated-fields/index.md %}
\ No newline at end of file
diff --git a/docs/user-guide/calculated-fields/geofencing-calculated-field.md b/docs/user-guide/calculated-fields/geofencing-calculated-field.md
new file mode 100644
index 0000000000..75b8b4a8e9
--- /dev/null
+++ b/docs/user-guide/calculated-fields/geofencing-calculated-field.md
@@ -0,0 +1,25 @@
+---
+layout: docwithnav
+title: Geofencing calculated field
+description: For complex calculations, TBEL is used. It enables advanced operations such as conditional statements, loops, and access to historical data.
+breadcrumbs: "true"
+breadcrumbs-steps: "1"
+hidetoc: "true"
+
+expression-script-calculated-fields-1:
+ 0:
+ image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png
+ title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
+
+output-script-1:
+ 0:
+ image: /images/user-guide/calculated-fields/output-script-1-ce.png
+ title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
+ 1:
+ image: /images/user-guide/calculated-fields/output-script-2-ce.png
+ title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
+
+---
+
+{% include get-hosts-name.html docsPrefix=docsPrefix %}
+{% include docs/user-guide/calculated-fields/geofencing-calculated-field.md %}
diff --git a/docs/user-guide/calculated-fields.md b/docs/user-guide/calculated-fields/index.md
similarity index 87%
rename from docs/user-guide/calculated-fields.md
rename to docs/user-guide/calculated-fields/index.md
index 42e71f78dd..eb4143f34f 100644
--- a/docs/user-guide/calculated-fields.md
+++ b/docs/user-guide/calculated-fields/index.md
@@ -47,32 +47,6 @@ time-series-rolling-argument-type:
image: /images/user-guide/calculated-fields/time-series-rolling-argument-type-2-ce.png
title: 'A new argument has been added.'
-expression-simple-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce.png
- title: 'In the "Expression" section, enter the mathematical expression for the calculation using the variables defined in the "Arguments" section.'
-
-output-simple-1:
- 0:
- image: /images/user-guide/calculated-fields/output-simple-1-ce.png
- title: 'Select the output type as "Time series". Set a name to the variable that will store the calculation result. Optionally, specify the number of decimal places.'
- 1:
- image: /images/user-guide/calculated-fields/output-simple-2-ce.png
- title: 'Select the output type as "Attribute" and choose its scope: "Server attributes", "Client attributes", or "Shared attributes". Set a name to the variable that will store the calculation result. Optionally, set the number of decimal places.'
-
-expression-script-calculated-fields-1:
- 0:
- image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png
- title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
-
-output-script-1:
- 0:
- image: /images/user-guide/calculated-fields/output-script-1-ce.png
- title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
- 1:
- image: /images/user-guide/calculated-fields/output-script-2-ce.png
- title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
-
calculated-field-result:
0:
image: /images/user-guide/calculated-fields/calculated-field-result-1-ce.png
@@ -200,4 +174,4 @@ example-script-calculated-fields-3:
---
{% include get-hosts-name.html docsPrefix=docsPrefix %}
-{% include docs/user-guide/calculated-fields.md %}
\ No newline at end of file
+{% include docs/user-guide/calculated-fields/index.md %}
\ No newline at end of file
diff --git a/docs/user-guide/calculated-fields/propagation-calculated-field.md b/docs/user-guide/calculated-fields/propagation-calculated-field.md
new file mode 100644
index 0000000000..54f7f3f57a
--- /dev/null
+++ b/docs/user-guide/calculated-fields/propagation-calculated-field.md
@@ -0,0 +1,25 @@
+---
+layout: docwithnav
+title: Propagation calculated field
+description: For complex calculations, TBEL is used. It enables advanced operations such as conditional statements, loops, and access to historical data.
+breadcrumbs: "true"
+breadcrumbs-steps: "1"
+hidetoc: "true"
+
+expression-script-calculated-fields-1:
+ 0:
+ image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png
+ title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
+
+output-script-1:
+ 0:
+ image: /images/user-guide/calculated-fields/output-script-1-ce.png
+ title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
+ 1:
+ image: /images/user-guide/calculated-fields/output-script-2-ce.png
+ title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
+
+---
+
+{% include get-hosts-name.html docsPrefix=docsPrefix %}
+{% include docs/user-guide/calculated-fields/propagation-calculated-field.md %}
diff --git a/docs/user-guide/calculated-fields/related-entities-aggregation-calculated-field.md b/docs/user-guide/calculated-fields/related-entities-aggregation-calculated-field.md
new file mode 100644
index 0000000000..6d2783e759
--- /dev/null
+++ b/docs/user-guide/calculated-fields/related-entities-aggregation-calculated-field.md
@@ -0,0 +1,25 @@
+---
+layout: docwithnav
+title: Related entities aggregation calculated field
+description: For complex calculations, TBEL is used. It enables advanced operations such as conditional statements, loops, and access to historical data.
+breadcrumbs: "true"
+breadcrumbs-steps: "1"
+hidetoc: "true"
+
+expression-script-calculated-fields-1:
+ 0:
+ image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png
+ title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
+
+output-script-1:
+ 0:
+ image: /images/user-guide/calculated-fields/output-script-1-ce.png
+ title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
+ 1:
+ image: /images/user-guide/calculated-fields/output-script-2-ce.png
+ title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
+
+---
+
+{% include get-hosts-name.html docsPrefix=docsPrefix %}
+{% include docs/user-guide/calculated-fields/related-entities-aggregation-calculated-field.md %}
diff --git a/docs/user-guide/calculated-fields/script-calculated-field.md b/docs/user-guide/calculated-fields/script-calculated-field.md
new file mode 100644
index 0000000000..ba200e43c1
--- /dev/null
+++ b/docs/user-guide/calculated-fields/script-calculated-field.md
@@ -0,0 +1,25 @@
+---
+layout: docwithnav
+title: Script calculated field
+description: For complex calculations, TBEL is used. It enables advanced operations such as conditional statements, loops, and access to historical data.
+breadcrumbs: "true"
+breadcrumbs-steps: "1"
+hidetoc: "true"
+
+expression-script-calculated-fields-1:
+ 0:
+ image: /images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png
+ title: 'Define a function that will perform calculations using the variables defined in the "Arguments" section. The variable name that will store the calculation result is defined within the function itself.'
+
+output-script-1:
+ 0:
+ image: /images/user-guide/calculated-fields/output-script-1-ce.png
+ title: 'Time series: function must return a JSON object or array with or without a timestamp containing the computed value.'
+ 1:
+ image: /images/user-guide/calculated-fields/output-script-2-ce.png
+ title: 'Attribute: function must return a JSON object without timestamp information containing the computed value.'
+
+---
+
+{% include get-hosts-name.html docsPrefix=docsPrefix %}
+{% include docs/user-guide/calculated-fields/script-calculated-field.md %}
\ No newline at end of file
diff --git a/docs/user-guide/calculated-fields/simple-calculated-field.md b/docs/user-guide/calculated-fields/simple-calculated-field.md
new file mode 100644
index 0000000000..4180e4262b
--- /dev/null
+++ b/docs/user-guide/calculated-fields/simple-calculated-field.md
@@ -0,0 +1,25 @@
+---
+layout: docwithnav
+title: Simple calculated field
+description: Simple calculated fields use basic arithmetic operations (+, -, *, /) and standard functions such as sqrt (square root), pow (power), abs (absolute value), etc.
+breadcrumbs: "true"
+breadcrumbs-steps: "1"
+hidetoc: "true"
+
+expression-simple-calculated-fields-1:
+ 0:
+ image: /images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce.png
+ title: 'In the "Expression" section, enter the mathematical expression for the calculation using the variables defined in the "Arguments" section.'
+
+output-simple-1:
+ 0:
+ image: /images/user-guide/calculated-fields/output-simple-1-ce.png
+ title: 'Select the output type as "Time series". Set a name to the variable that will store the calculation result. Optionally, specify the number of decimal places.'
+ 1:
+ image: /images/user-guide/calculated-fields/output-simple-2-ce.png
+ title: 'Select the output type as "Attribute" and choose its scope: "Server attributes", "Client attributes", or "Shared attributes". Set a name to the variable that will store the calculation result. Optionally, set the number of decimal places.'
+
+---
+
+{% include get-hosts-name.html docsPrefix=docsPrefix %}
+{% include docs/user-guide/calculated-fields/simple-calculated-field.md %}
\ No newline at end of file
diff --git a/docs/user-guide/calculated-fields/time-series-data-aggregation-calculated-field.md b/docs/user-guide/calculated-fields/time-series-data-aggregation-calculated-field.md
new file mode 100644
index 0000000000..e3f1d29a39
--- /dev/null
+++ b/docs/user-guide/calculated-fields/time-series-data-aggregation-calculated-field.md
@@ -0,0 +1,25 @@
+---
+layout: docwithnav
+title: Time series data aggregation calculated field
+description: Simple calculated fields use basic arithmetic operations (+, -, *, /) and standard functions such as sqrt (square root), pow (power), abs (absolute value), etc.
+breadcrumbs: "true"
+breadcrumbs-steps: "1"
+hidetoc: "true"
+
+expression-simple-calculated-fields-1:
+ 0:
+ image: /images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce.png
+ title: 'In the "Expression" section, enter the mathematical expression for the calculation using the variables defined in the "Arguments" section.'
+
+output-simple-1:
+ 0:
+ image: /images/user-guide/calculated-fields/output-simple-1-ce.png
+ title: 'Select the output type as "Time series". Set a name to the variable that will store the calculation result. Optionally, specify the number of decimal places.'
+ 1:
+ image: /images/user-guide/calculated-fields/output-simple-2-ce.png
+ title: 'Select the output type as "Attribute" and choose its scope: "Server attributes", "Client attributes", or "Shared attributes". Set a name to the variable that will store the calculation result. Optionally, set the number of decimal places.'
+
+---
+
+{% include get-hosts-name.html docsPrefix=docsPrefix %}
+{% include docs/user-guide/calculated-fields/time-series-data-aggregation-calculated-field.md %}
diff --git a/images/user-guide/calculated-fields/argument-name-1-ce-preview.png b/images/user-guide/calculated-fields/argument-name-1-ce-preview.png
deleted file mode 100644
index 7bd5c433e4..0000000000
Binary files a/images/user-guide/calculated-fields/argument-name-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/argument-name-1-ce.png b/images/user-guide/calculated-fields/argument-name-1-ce.png
deleted file mode 100755
index e13538e20a..0000000000
Binary files a/images/user-guide/calculated-fields/argument-name-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/argument-name-1-pe-preview.png b/images/user-guide/calculated-fields/argument-name-1-pe-preview.png
deleted file mode 100644
index 506267d083..0000000000
Binary files a/images/user-guide/calculated-fields/argument-name-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/argument-name-1-pe.png b/images/user-guide/calculated-fields/argument-name-1-pe.png
deleted file mode 100644
index af2f3e9980..0000000000
Binary files a/images/user-guide/calculated-fields/argument-name-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-1-ce-preview.png b/images/user-guide/calculated-fields/attribute-argument-type-1-ce-preview.png
deleted file mode 100644
index 261b6765eb..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-1-ce.png b/images/user-guide/calculated-fields/attribute-argument-type-1-ce.png
deleted file mode 100755
index 171ce2bb91..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-1-pe-preview.png b/images/user-guide/calculated-fields/attribute-argument-type-1-pe-preview.png
deleted file mode 100644
index 95e4bc1dd5..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-1-pe.png b/images/user-guide/calculated-fields/attribute-argument-type-1-pe.png
deleted file mode 100755
index 6735872c66..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-2-ce-preview.png b/images/user-guide/calculated-fields/attribute-argument-type-2-ce-preview.png
deleted file mode 100644
index 5aaec923a2..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-2-ce.png b/images/user-guide/calculated-fields/attribute-argument-type-2-ce.png
deleted file mode 100755
index 01b4baea9f..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-2-pe-preview.png b/images/user-guide/calculated-fields/attribute-argument-type-2-pe-preview.png
deleted file mode 100644
index 1cfc61a520..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/attribute-argument-type-2-pe.png b/images/user-guide/calculated-fields/attribute-argument-type-2-pe.png
deleted file mode 100755
index 9faef7f640..0000000000
Binary files a/images/user-guide/calculated-fields/attribute-argument-type-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-2-ce-preview.png b/images/user-guide/calculated-fields/calculated-field-debug-events-2-ce-preview.png
deleted file mode 100644
index 5609b503af..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-2-ce.png b/images/user-guide/calculated-fields/calculated-field-debug-events-2-ce.png
deleted file mode 100644
index 3f743ffe60..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-2-pe-preview.png b/images/user-guide/calculated-fields/calculated-field-debug-events-2-pe-preview.png
deleted file mode 100644
index f867624594..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-2-pe.png b/images/user-guide/calculated-fields/calculated-field-debug-events-2-pe.png
deleted file mode 100644
index 5a79546923..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-3-ce-preview.png b/images/user-guide/calculated-fields/calculated-field-debug-events-3-ce-preview.png
deleted file mode 100644
index 7aad9d7a01..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-3-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-3-ce.png b/images/user-guide/calculated-fields/calculated-field-debug-events-3-ce.png
deleted file mode 100755
index 580d1f64f6..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-3-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-3-pe-preview.png b/images/user-guide/calculated-fields/calculated-field-debug-events-3-pe-preview.png
deleted file mode 100644
index 82f161cb2b..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-3-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-debug-events-3-pe.png b/images/user-guide/calculated-fields/calculated-field-debug-events-3-pe.png
deleted file mode 100644
index 2b7c234113..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-debug-events-3-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-general-1-ce-preview.png b/images/user-guide/calculated-fields/calculated-field-general-1-ce-preview.png
index eb4f027d2b..15dacc9897 100644
Binary files a/images/user-guide/calculated-fields/calculated-field-general-1-ce-preview.png and b/images/user-guide/calculated-fields/calculated-field-general-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/calculated-field-general-1-ce.png b/images/user-guide/calculated-fields/calculated-field-general-1-ce.png
old mode 100755
new mode 100644
index dda4a6e69a..44f7c21cf8
Binary files a/images/user-guide/calculated-fields/calculated-field-general-1-ce.png and b/images/user-guide/calculated-fields/calculated-field-general-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/calculated-field-general-1-pe-preview.png b/images/user-guide/calculated-fields/calculated-field-general-1-pe-preview.png
deleted file mode 100644
index 6b16686578..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-general-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-general-1-pe.png b/images/user-guide/calculated-fields/calculated-field-general-1-pe.png
deleted file mode 100755
index cfe9aa1901..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-general-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-result-1-ce-preview.png b/images/user-guide/calculated-fields/calculated-field-result-1-ce-preview.png
deleted file mode 100644
index e3fc100fa1..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-result-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-result-1-ce.png b/images/user-guide/calculated-fields/calculated-field-result-1-ce.png
deleted file mode 100644
index afbb9ff7a3..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-result-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-result-1-pe-preview.png b/images/user-guide/calculated-fields/calculated-field-result-1-pe-preview.png
deleted file mode 100644
index 684b11c47e..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-result-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-field-result-1-pe.png b/images/user-guide/calculated-fields/calculated-field-result-1-pe.png
deleted file mode 100644
index 213f8e6c61..0000000000
Binary files a/images/user-guide/calculated-fields/calculated-field-result-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/calculated-fields-parameters-1-ce-preview.png b/images/user-guide/calculated-fields/calculated-fields-parameters-1-ce-preview.png
new file mode 100644
index 0000000000..db08f3c6b9
Binary files /dev/null and b/images/user-guide/calculated-fields/calculated-fields-parameters-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/calculated-fields-parameters-1-ce.png b/images/user-guide/calculated-fields/calculated-fields-parameters-1-ce.png
new file mode 100644
index 0000000000..aff5651fd4
Binary files /dev/null and b/images/user-guide/calculated-fields/calculated-fields-parameters-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/calculated-fields-parameters-1-pe-preview.png b/images/user-guide/calculated-fields/calculated-fields-parameters-1-pe-preview.png
new file mode 100644
index 0000000000..507dcd020b
Binary files /dev/null and b/images/user-guide/calculated-fields/calculated-fields-parameters-1-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/calculated-fields-parameters-1-pe.png b/images/user-guide/calculated-fields/calculated-fields-parameters-1-pe.png
new file mode 100644
index 0000000000..39f228e25e
Binary files /dev/null and b/images/user-guide/calculated-fields/calculated-fields-parameters-1-pe.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-1-pe-preview.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-1-pe-preview.png
new file mode 100644
index 0000000000..dee5b09a7d
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-1-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-1-pe.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-1-pe.png
new file mode 100644
index 0000000000..14230e8e6f
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-1-pe.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-2-pe-preview.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-2-pe-preview.png
new file mode 100644
index 0000000000..8f693412ef
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-2-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-2-pe.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-2-pe.png
new file mode 100644
index 0000000000..669d31c2ce
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-2-pe.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-3-pe-preview.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-3-pe-preview.png
new file mode 100644
index 0000000000..836ece4290
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-3-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-3-pe.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-3-pe.png
new file mode 100644
index 0000000000..e68835718a
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-3-pe.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-4-pe-preview.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-4-pe-preview.png
new file mode 100644
index 0000000000..8460e21c76
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-4-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-4-pe.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-4-pe.png
new file mode 100644
index 0000000000..e98dc6e507
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-4-pe.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-5-pe-preview.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-5-pe-preview.png
new file mode 100644
index 0000000000..0f71a39356
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-5-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-5-pe.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-5-pe.png
new file mode 100644
index 0000000000..1422c1a349
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-5-pe.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-6-pe-preview.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-6-pe-preview.png
new file mode 100644
index 0000000000..eaa5e3427d
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-6-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-6-pe.png b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-6-pe.png
new file mode 100644
index 0000000000..2450e2543f
Binary files /dev/null and b/images/user-guide/calculated-fields/copy-device-battery-level-to-asset-6-pe.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-1-ce-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-1-ce-preview.png
index 7d7f99555f..bedc65f46e 100644
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-1-ce-preview.png and b/images/user-guide/calculated-fields/create-new-calculated-field-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-1-ce.png b/images/user-guide/calculated-fields/create-new-calculated-field-1-ce.png
old mode 100755
new mode 100644
index 69a58d8528..ebad0f612b
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-1-ce.png and b/images/user-guide/calculated-fields/create-new-calculated-field-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-1-pe-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-1-pe-preview.png
index ae291d4983..7546efae67 100644
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-1-pe-preview.png and b/images/user-guide/calculated-fields/create-new-calculated-field-1-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-1-pe.png b/images/user-guide/calculated-fields/create-new-calculated-field-1-pe.png
old mode 100755
new mode 100644
index 5a58b3c0e5..abc83d47bf
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-1-pe.png and b/images/user-guide/calculated-fields/create-new-calculated-field-1-pe.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-2-ce-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-2-ce-preview.png
index 6d3677d137..6a21daa84f 100644
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-2-ce-preview.png and b/images/user-guide/calculated-fields/create-new-calculated-field-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-2-ce.png b/images/user-guide/calculated-fields/create-new-calculated-field-2-ce.png
old mode 100755
new mode 100644
index dec021fdf5..a800e2347f
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-2-ce.png and b/images/user-guide/calculated-fields/create-new-calculated-field-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-2-pe-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-2-pe-preview.png
index cab8f62174..8c0977b9f1 100644
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-2-pe-preview.png and b/images/user-guide/calculated-fields/create-new-calculated-field-2-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-2-pe.png b/images/user-guide/calculated-fields/create-new-calculated-field-2-pe.png
old mode 100755
new mode 100644
index 259353745a..b837d3e6ac
Binary files a/images/user-guide/calculated-fields/create-new-calculated-field-2-pe.png and b/images/user-guide/calculated-fields/create-new-calculated-field-2-pe.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-3-ce-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-3-ce-preview.png
new file mode 100644
index 0000000000..c4feea5668
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-3-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-3-ce.png b/images/user-guide/calculated-fields/create-new-calculated-field-3-ce.png
new file mode 100644
index 0000000000..4ff7131221
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-3-ce.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-3-pe-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-3-pe-preview.png
new file mode 100644
index 0000000000..f60e30b924
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-3-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-3-pe.png b/images/user-guide/calculated-fields/create-new-calculated-field-3-pe.png
new file mode 100644
index 0000000000..95ec43bd45
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-3-pe.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-4-ce-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-4-ce-preview.png
new file mode 100644
index 0000000000..ef06dddb40
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-4-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-4-ce.png b/images/user-guide/calculated-fields/create-new-calculated-field-4-ce.png
new file mode 100644
index 0000000000..89de3374e9
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-4-ce.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-4-pe-preview.png b/images/user-guide/calculated-fields/create-new-calculated-field-4-pe-preview.png
new file mode 100644
index 0000000000..53604a124e
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-4-pe-preview.png differ
diff --git a/images/user-guide/calculated-fields/create-new-calculated-field-4-pe.png b/images/user-guide/calculated-fields/create-new-calculated-field-4-pe.png
new file mode 100644
index 0000000000..1f8f116d72
Binary files /dev/null and b/images/user-guide/calculated-fields/create-new-calculated-field-4-pe.png differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-ce-preview.png
deleted file mode 100644
index e5f499f3f0..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-ce.png
deleted file mode 100755
index 689049a49d..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-pe-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-pe-preview.png
deleted file mode 100644
index 7ff7974e65..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-pe.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-pe.png
deleted file mode 100755
index 9f8433460a..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-ce-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-ce-preview.png
deleted file mode 100644
index 40084c43f5..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-ce.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-ce.png
deleted file mode 100755
index 599a2c006a..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-pe-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-pe-preview.png
deleted file mode 100644
index 7561ed6e5c..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-pe.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-pe.png
deleted file mode 100755
index 29e43d03af..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-ce-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-ce-preview.png
deleted file mode 100644
index fde01bbd4a..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-ce.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-ce.png
deleted file mode 100755
index 1f4aa69e7b..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-pe-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-pe-preview.png
deleted file mode 100644
index c02d52ca58..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-pe.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-pe.png
deleted file mode 100755
index 0326413284..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-3-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-ce-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-ce-preview.png
deleted file mode 100644
index 8dccf93e9b..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-ce.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-ce.png
deleted file mode 100755
index d15e27cd55..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-pe-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-pe-preview.png
deleted file mode 100644
index 8cbe2a6830..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-pe.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-pe.png
deleted file mode 100755
index 306d062a3f..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-4-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-ce-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-ce-preview.png
deleted file mode 100644
index d415840e34..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-ce.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-ce.png
deleted file mode 100755
index d999cab7a1..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-pe-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-pe-preview.png
deleted file mode 100644
index ff8ea2d40e..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-pe.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-pe.png
deleted file mode 100755
index 4013678bbb..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-5-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-ce-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-ce-preview.png
deleted file mode 100644
index 2f32458093..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-ce.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-ce.png
deleted file mode 100755
index 307fbd54d5..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-pe-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-pe-preview.png
deleted file mode 100644
index dc3051f91d..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-pe.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-pe.png
deleted file mode 100755
index 1c934998f8..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-6-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-ce-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-ce-preview.png
deleted file mode 100644
index de6cacfecb..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-ce.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-ce.png
deleted file mode 100755
index d6de37ba8c..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-pe-preview.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-pe-preview.png
deleted file mode 100644
index 318325df8d..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-pe.png b/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-pe.png
deleted file mode 100755
index 5f9ea7d615..0000000000
Binary files a/images/user-guide/calculated-fields/example-2-script-calculated-fields-7-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-ce-preview.png
deleted file mode 100644
index 9c67299bd2..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-ce.png
deleted file mode 100755
index afc35d1277..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-pe-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-pe-preview.png
deleted file mode 100644
index 1d1a8eba4d..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-pe.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-pe.png
deleted file mode 100755
index 60d76cbd0f..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-ce-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-ce-preview.png
deleted file mode 100644
index 6f21714fcc..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-ce.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-ce.png
deleted file mode 100755
index 7d8ec52078..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-pe-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-pe-preview.png
deleted file mode 100644
index 5673336d32..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-pe.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-pe.png
deleted file mode 100755
index 28c998f592..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-ce-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-ce-preview.png
deleted file mode 100644
index bafc3377e6..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-ce.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-ce.png
deleted file mode 100755
index 758f71acd1..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-pe-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-pe-preview.png
deleted file mode 100644
index 6aaab33974..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-pe.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-pe.png
deleted file mode 100755
index 4b5d6d39e7..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-3-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-ce-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-ce-preview.png
deleted file mode 100644
index b2bcf4a4a5..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-ce.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-ce.png
deleted file mode 100755
index 9f67d342d3..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-pe-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-pe-preview.png
deleted file mode 100644
index 311d851afb..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-pe.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-pe.png
deleted file mode 100755
index 4176ae6538..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-4-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-ce-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-ce-preview.png
deleted file mode 100644
index 69a6b2f84e..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-ce.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-ce.png
deleted file mode 100755
index c5b0611dd9..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-pe-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-pe-preview.png
deleted file mode 100644
index 886ff167cf..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-pe.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-pe.png
deleted file mode 100755
index 89212bdfc7..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-5-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-ce-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-ce-preview.png
deleted file mode 100644
index a90a1ed3ba..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-ce.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-ce.png
deleted file mode 100755
index dc0a8c14d3..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-pe-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-pe-preview.png
deleted file mode 100644
index 4cf2689160..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-pe.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-pe.png
deleted file mode 100755
index b2face0e7a..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-6-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-ce-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-ce-preview.png
deleted file mode 100644
index 1f97433737..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-ce.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-ce.png
deleted file mode 100755
index 06596ec82d..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-pe-preview.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-pe-preview.png
deleted file mode 100644
index 9209696df2..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-pe.png b/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-pe.png
deleted file mode 100755
index f67763aeca..0000000000
Binary files a/images/user-guide/calculated-fields/example-3-script-calculated-fields-7-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-ce-preview.png
deleted file mode 100644
index d5cb735074..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-ce.png
deleted file mode 100644
index 1fe788df15..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-pe-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-pe-preview.png
deleted file mode 100644
index dea67e6eb4..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-pe.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-pe.png
deleted file mode 100755
index cdfd13f250..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-ce-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-ce-preview.png
deleted file mode 100644
index df4b021fd8..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-ce.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-ce.png
deleted file mode 100644
index ed56a36350..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-pe-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-pe-preview.png
deleted file mode 100644
index fa42919fa7..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-pe.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-pe.png
deleted file mode 100755
index d60d81e0cf..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-ce-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-ce-preview.png
deleted file mode 100644
index 2e79da73ce..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-ce.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-ce.png
deleted file mode 100644
index d5e01147f0..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-pe-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-pe-preview.png
deleted file mode 100644
index f6ce0849d3..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-pe.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-pe.png
deleted file mode 100644
index 6cadfd87f4..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-3-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-ce-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-ce-preview.png
deleted file mode 100644
index 2036e86c8d..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-ce.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-ce.png
deleted file mode 100755
index 8d2e0ba02d..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-pe-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-pe-preview.png
deleted file mode 100644
index 6d54f781ee..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-pe.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-pe.png
deleted file mode 100644
index 2034a38b90..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-4-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-ce-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-ce-preview.png
deleted file mode 100644
index 2b0c4c1bb2..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-ce.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-ce.png
deleted file mode 100644
index 6c5f634569..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-pe-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-pe-preview.png
deleted file mode 100644
index ce725dc9f6..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-pe.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-pe.png
deleted file mode 100755
index 15867f8d3f..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-5-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-ce-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-ce-preview.png
deleted file mode 100644
index d491056130..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-ce.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-ce.png
deleted file mode 100755
index dd365657ca..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-pe-preview.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-pe-preview.png
deleted file mode 100644
index 27cc083819..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-pe.png b/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-pe.png
deleted file mode 100755
index cd67cf5660..0000000000
Binary files a/images/user-guide/calculated-fields/example-dew-point-calculated-fields-6-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-1-ce-preview.png
deleted file mode 100644
index d879289c15..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/example-script-calculated-fields-1-ce.png
deleted file mode 100644
index 101904f744..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-1-pe-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-1-pe-preview.png
deleted file mode 100644
index 33d9700912..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-1-pe.png b/images/user-guide/calculated-fields/example-script-calculated-fields-1-pe.png
deleted file mode 100644
index d96d058630..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-2-ce-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-2-ce-preview.png
deleted file mode 100644
index b5aa28aa98..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-2-ce.png b/images/user-guide/calculated-fields/example-script-calculated-fields-2-ce.png
deleted file mode 100644
index 4434f6239a..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-2-pe-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-2-pe-preview.png
deleted file mode 100644
index 8f00b1e58d..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-2-pe.png b/images/user-guide/calculated-fields/example-script-calculated-fields-2-pe.png
deleted file mode 100644
index a42b69175a..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-3-ce-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-3-ce-preview.png
deleted file mode 100644
index f0ed2bfaaf..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-3-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-3-ce.png b/images/user-guide/calculated-fields/example-script-calculated-fields-3-ce.png
deleted file mode 100644
index 114485a2e1..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-3-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-3-pe-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-3-pe-preview.png
deleted file mode 100644
index a623818b75..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-3-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-3-pe.png b/images/user-guide/calculated-fields/example-script-calculated-fields-3-pe.png
deleted file mode 100755
index bd90f7dc44..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-3-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-4-ce-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-4-ce-preview.png
deleted file mode 100644
index 3ddf26c7ed..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-4-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-4-ce.png b/images/user-guide/calculated-fields/example-script-calculated-fields-4-ce.png
deleted file mode 100644
index ed71781844..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-4-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-4-pe-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-4-pe-preview.png
deleted file mode 100644
index 1f14edad85..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-4-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-4-pe.png b/images/user-guide/calculated-fields/example-script-calculated-fields-4-pe.png
deleted file mode 100755
index 206f2cac75..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-4-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-5-ce-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-5-ce-preview.png
deleted file mode 100644
index f72e10f2b3..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-5-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-5-ce.png b/images/user-guide/calculated-fields/example-script-calculated-fields-5-ce.png
deleted file mode 100644
index 2bfdcd715f..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-5-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-5-pe-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-5-pe-preview.png
deleted file mode 100644
index 3f6fa25231..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-5-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-5-pe.png b/images/user-guide/calculated-fields/example-script-calculated-fields-5-pe.png
deleted file mode 100755
index 3ee9192bf7..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-5-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-6-ce-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-6-ce-preview.png
deleted file mode 100644
index 93d5c38275..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-6-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-6-ce.png b/images/user-guide/calculated-fields/example-script-calculated-fields-6-ce.png
deleted file mode 100755
index a3d555dd4b..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-6-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-6-pe-preview.png b/images/user-guide/calculated-fields/example-script-calculated-fields-6-pe-preview.png
deleted file mode 100644
index db186e60be..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-6-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/example-script-calculated-fields-6-pe.png b/images/user-guide/calculated-fields/example-script-calculated-fields-6-pe.png
deleted file mode 100755
index 2870c235f5..0000000000
Binary files a/images/user-guide/calculated-fields/example-script-calculated-fields-6-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce-preview.png
deleted file mode 100644
index 3b1cd3e0c7..0000000000
Binary files a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png
deleted file mode 100644
index 980a0728c6..0000000000
Binary files a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe-preview.png b/images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe-preview.png
deleted file mode 100644
index 067657c231..0000000000
Binary files a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe.png b/images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe.png
deleted file mode 100644
index 339aaf4094..0000000000
Binary files a/images/user-guide/calculated-fields/expression-script-calculated-fields-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce-preview.png
deleted file mode 100644
index f12f776607..0000000000
Binary files a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce.png
deleted file mode 100644
index 0a2505ec88..0000000000
Binary files a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe-preview.png b/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe-preview.png
deleted file mode 100644
index 2525f86d62..0000000000
Binary files a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe.png b/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe.png
deleted file mode 100644
index 66b75b889f..0000000000
Binary files a/images/user-guide/calculated-fields/expression-simple-calculated-fields-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/geofencing.svg b/images/user-guide/calculated-fields/geofencing.svg
new file mode 100644
index 0000000000..7290bb0e13
--- /dev/null
+++ b/images/user-guide/calculated-fields/geofencing.svg
@@ -0,0 +1,8 @@
+
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-ce-preview.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-ce-preview.png
deleted file mode 100644
index a5c9d64060..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-ce.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-ce.png
deleted file mode 100644
index 342a16c177..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-pe-preview.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-pe-preview.png
deleted file mode 100644
index 9e59a754bc..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-pe.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-pe.png
deleted file mode 100755
index 0bf7d16a2f..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-ce-preview.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-ce-preview.png
deleted file mode 100644
index d4de145203..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-ce.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-ce.png
deleted file mode 100755
index 7cd9da2568..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-pe-preview.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-pe-preview.png
deleted file mode 100644
index ccd444bd96..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-pe.png b/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-pe.png
deleted file mode 100755
index 968db472a4..0000000000
Binary files a/images/user-guide/calculated-fields/latest-telemetry-argument-type-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-1-ce-preview.png b/images/user-guide/calculated-fields/output-script-1-ce-preview.png
deleted file mode 100644
index 5f3155edfa..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-1-ce.png b/images/user-guide/calculated-fields/output-script-1-ce.png
deleted file mode 100644
index 478047d566..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-1-pe-preview.png b/images/user-guide/calculated-fields/output-script-1-pe-preview.png
deleted file mode 100644
index e9b89312a2..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-1-pe.png b/images/user-guide/calculated-fields/output-script-1-pe.png
deleted file mode 100644
index af73621c3b..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-2-ce-preview.png b/images/user-guide/calculated-fields/output-script-2-ce-preview.png
deleted file mode 100644
index 34be016dc8..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-2-ce.png b/images/user-guide/calculated-fields/output-script-2-ce.png
deleted file mode 100644
index 3b01005cee..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-2-pe-preview.png b/images/user-guide/calculated-fields/output-script-2-pe-preview.png
deleted file mode 100644
index d07ab9d2de..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-script-2-pe.png b/images/user-guide/calculated-fields/output-script-2-pe.png
deleted file mode 100644
index e61abd7db8..0000000000
Binary files a/images/user-guide/calculated-fields/output-script-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-1-ce-preview.png b/images/user-guide/calculated-fields/output-simple-1-ce-preview.png
deleted file mode 100644
index eaa3e034de..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-1-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-1-ce.png b/images/user-guide/calculated-fields/output-simple-1-ce.png
deleted file mode 100644
index 6aa37f5ed4..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-1-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-1-pe-preview.png b/images/user-guide/calculated-fields/output-simple-1-pe-preview.png
deleted file mode 100644
index 1bf9b681c3..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-1-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-1-pe.png b/images/user-guide/calculated-fields/output-simple-1-pe.png
deleted file mode 100644
index cead92a472..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-1-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-2-ce-preview.png b/images/user-guide/calculated-fields/output-simple-2-ce-preview.png
deleted file mode 100644
index 4a5d7b0eb1..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-2-ce-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-2-ce.png b/images/user-guide/calculated-fields/output-simple-2-ce.png
deleted file mode 100644
index 4cfb0558c8..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-2-ce.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-2-pe-preview.png b/images/user-guide/calculated-fields/output-simple-2-pe-preview.png
deleted file mode 100644
index ec1649798e..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-2-pe-preview.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/output-simple-2-pe.png b/images/user-guide/calculated-fields/output-simple-2-pe.png
deleted file mode 100644
index efd924ea4a..0000000000
Binary files a/images/user-guide/calculated-fields/output-simple-2-pe.png and /dev/null differ
diff --git a/images/user-guide/calculated-fields/propagation-argument-1-ce-preview.png b/images/user-guide/calculated-fields/propagation-argument-1-ce-preview.png
new file mode 100644
index 0000000000..f9850b98af
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-argument-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-argument-1-ce.png b/images/user-guide/calculated-fields/propagation-argument-1-ce.png
new file mode 100644
index 0000000000..40cbba3e47
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-argument-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-argument-2-ce-preview.png b/images/user-guide/calculated-fields/propagation-argument-2-ce-preview.png
new file mode 100644
index 0000000000..4dd5d543e6
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-argument-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-argument-2-ce.png b/images/user-guide/calculated-fields/propagation-argument-2-ce.png
new file mode 100644
index 0000000000..798d19f218
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-argument-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-argument-3-ce-preview.png b/images/user-guide/calculated-fields/propagation-argument-3-ce-preview.png
new file mode 100644
index 0000000000..73ddd026de
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-argument-3-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-argument-3-ce.png b/images/user-guide/calculated-fields/propagation-argument-3-ce.png
new file mode 100644
index 0000000000..ad4a58d6cb
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-argument-3-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-events-1-ce-preview.png b/images/user-guide/calculated-fields/propagation-events-1-ce-preview.png
new file mode 100644
index 0000000000..08a0b83492
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-events-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-events-1-ce.png b/images/user-guide/calculated-fields/propagation-events-1-ce.png
new file mode 100644
index 0000000000..a8b6f068aa
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-events-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-events-2-ce-preview.png b/images/user-guide/calculated-fields/propagation-events-2-ce-preview.png
new file mode 100644
index 0000000000..25f91ace49
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-events-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-events-2-ce.png b/images/user-guide/calculated-fields/propagation-events-2-ce.png
new file mode 100644
index 0000000000..1c64c6bd74
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-events-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-11-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-11-ce-preview.png
new file mode 100644
index 0000000000..af4bec4650
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-11-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-11-ce.png b/images/user-guide/calculated-fields/propagation-example-11-ce.png
new file mode 100644
index 0000000000..481cd87359
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-11-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-110-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-110-ce-preview.png
new file mode 100644
index 0000000000..b39011e97a
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-110-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-110-ce.png b/images/user-guide/calculated-fields/propagation-example-110-ce.png
new file mode 100644
index 0000000000..221a4b5738
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-110-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-12-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-12-ce-preview.png
new file mode 100644
index 0000000000..3381369326
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-12-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-12-ce.png b/images/user-guide/calculated-fields/propagation-example-12-ce.png
new file mode 100644
index 0000000000..b6785f7198
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-12-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-13-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-13-ce-preview.png
new file mode 100644
index 0000000000..0ae2da0d01
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-13-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-13-ce.png b/images/user-guide/calculated-fields/propagation-example-13-ce.png
new file mode 100644
index 0000000000..930f078e75
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-13-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-14-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-14-ce-preview.png
new file mode 100644
index 0000000000..558f74c447
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-14-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-14-ce.png b/images/user-guide/calculated-fields/propagation-example-14-ce.png
new file mode 100644
index 0000000000..1036e5a813
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-14-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-15-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-15-ce-preview.png
new file mode 100644
index 0000000000..914b9ead06
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-15-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-15-ce.png b/images/user-guide/calculated-fields/propagation-example-15-ce.png
new file mode 100644
index 0000000000..18dfea1f04
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-15-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-16-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-16-ce-preview.png
new file mode 100644
index 0000000000..04b000e5af
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-16-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-16-ce.png b/images/user-guide/calculated-fields/propagation-example-16-ce.png
new file mode 100644
index 0000000000..de7400a1a7
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-16-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-17-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-17-ce-preview.png
new file mode 100644
index 0000000000..c61e4a4c28
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-17-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-17-ce.png b/images/user-guide/calculated-fields/propagation-example-17-ce.png
new file mode 100644
index 0000000000..ee25dc1469
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-17-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-18-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-18-ce-preview.png
new file mode 100644
index 0000000000..2aa40b54af
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-18-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-18-ce.png b/images/user-guide/calculated-fields/propagation-example-18-ce.png
new file mode 100644
index 0000000000..c190d4d858
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-18-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-19-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-19-ce-preview.png
new file mode 100644
index 0000000000..0b2632f394
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-19-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-19-ce.png b/images/user-guide/calculated-fields/propagation-example-19-ce.png
new file mode 100644
index 0000000000..05bcd9481f
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-19-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-21-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-21-ce-preview.png
new file mode 100644
index 0000000000..5492e82851
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-21-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-21-ce.png b/images/user-guide/calculated-fields/propagation-example-21-ce.png
new file mode 100644
index 0000000000..a82702be88
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-21-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-210-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-210-ce-preview.png
new file mode 100644
index 0000000000..8df86a1d51
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-210-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-210-ce.png b/images/user-guide/calculated-fields/propagation-example-210-ce.png
new file mode 100644
index 0000000000..0922b61b8e
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-210-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-22-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-22-ce-preview.png
new file mode 100644
index 0000000000..ffbf3cb1a5
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-22-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-22-ce.png b/images/user-guide/calculated-fields/propagation-example-22-ce.png
new file mode 100644
index 0000000000..4b15d0fb0b
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-22-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-23-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-23-ce-preview.png
new file mode 100644
index 0000000000..a797ae76d9
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-23-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-23-ce.png b/images/user-guide/calculated-fields/propagation-example-23-ce.png
new file mode 100644
index 0000000000..e72f3c1c5f
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-23-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-24-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-24-ce-preview.png
new file mode 100644
index 0000000000..03d1e82c51
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-24-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-24-ce.png b/images/user-guide/calculated-fields/propagation-example-24-ce.png
new file mode 100644
index 0000000000..1b0936c05b
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-24-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-25-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-25-ce-preview.png
new file mode 100644
index 0000000000..a881752b3e
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-25-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-25-ce.png b/images/user-guide/calculated-fields/propagation-example-25-ce.png
new file mode 100644
index 0000000000..d039b2f4c6
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-25-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-26-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-26-ce-preview.png
new file mode 100644
index 0000000000..e7a47b2272
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-26-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-26-ce.png b/images/user-guide/calculated-fields/propagation-example-26-ce.png
new file mode 100644
index 0000000000..bee7eb3095
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-26-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-27-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-27-ce-preview.png
new file mode 100644
index 0000000000..fce3652634
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-27-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-27-ce.png b/images/user-guide/calculated-fields/propagation-example-27-ce.png
new file mode 100644
index 0000000000..08733c9852
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-27-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-28-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-28-ce-preview.png
new file mode 100644
index 0000000000..c9a7f4a268
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-28-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-28-ce.png b/images/user-guide/calculated-fields/propagation-example-28-ce.png
new file mode 100644
index 0000000000..6b42637e9d
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-28-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-29-ce-preview.png b/images/user-guide/calculated-fields/propagation-example-29-ce-preview.png
new file mode 100644
index 0000000000..ced266da1b
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-29-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-example-29-ce.png b/images/user-guide/calculated-fields/propagation-example-29-ce.png
new file mode 100644
index 0000000000..75b5db65da
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-example-29-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-output-1-ce-preview.png b/images/user-guide/calculated-fields/propagation-output-1-ce-preview.png
new file mode 100644
index 0000000000..c389fbb0a6
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-output-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-output-1-ce.png b/images/user-guide/calculated-fields/propagation-output-1-ce.png
new file mode 100644
index 0000000000..f4883ef477
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-output-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-output-2-ce-preview.png b/images/user-guide/calculated-fields/propagation-output-2-ce-preview.png
new file mode 100644
index 0000000000..6d597361b5
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-output-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-output-2-ce.png b/images/user-guide/calculated-fields/propagation-output-2-ce.png
new file mode 100644
index 0000000000..f7d8083dd0
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-output-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-path-to-related-entities-1-ce-preview.png b/images/user-guide/calculated-fields/propagation-path-to-related-entities-1-ce-preview.png
new file mode 100644
index 0000000000..9531cb84dc
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-path-to-related-entities-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-path-to-related-entities-1-ce.png b/images/user-guide/calculated-fields/propagation-path-to-related-entities-1-ce.png
new file mode 100644
index 0000000000..e5ceb44c2d
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-path-to-related-entities-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation-result-1-ce-preview.png b/images/user-guide/calculated-fields/propagation-result-1-ce-preview.png
new file mode 100644
index 0000000000..687a52e0b4
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-result-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/propagation-result-1-ce.png b/images/user-guide/calculated-fields/propagation-result-1-ce.png
new file mode 100644
index 0000000000..41629019f0
Binary files /dev/null and b/images/user-guide/calculated-fields/propagation-result-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/propagation.svg b/images/user-guide/calculated-fields/propagation.svg
new file mode 100644
index 0000000000..cf78daa5d0
--- /dev/null
+++ b/images/user-guide/calculated-fields/propagation.svg
@@ -0,0 +1,14 @@
+
diff --git a/images/user-guide/calculated-fields/related.svg b/images/user-guide/calculated-fields/related.svg
new file mode 100644
index 0000000000..3a4f14eab4
--- /dev/null
+++ b/images/user-guide/calculated-fields/related.svg
@@ -0,0 +1,15 @@
+
diff --git a/images/user-guide/calculated-fields/script-argument-1-ce-preview.png b/images/user-guide/calculated-fields/script-argument-1-ce-preview.png
new file mode 100644
index 0000000000..84e0b91af2
Binary files /dev/null and b/images/user-guide/calculated-fields/script-argument-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-argument-1-ce.png b/images/user-guide/calculated-fields/script-argument-1-ce.png
new file mode 100644
index 0000000000..a769439e5e
Binary files /dev/null and b/images/user-guide/calculated-fields/script-argument-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-attribute-argument-1-ce-preview.png b/images/user-guide/calculated-fields/script-attribute-argument-1-ce-preview.png
new file mode 100644
index 0000000000..cb1c9d262b
Binary files /dev/null and b/images/user-guide/calculated-fields/script-attribute-argument-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-attribute-argument-1-ce.png b/images/user-guide/calculated-fields/script-attribute-argument-1-ce.png
new file mode 100644
index 0000000000..24573a4b56
Binary files /dev/null and b/images/user-guide/calculated-fields/script-attribute-argument-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-attribute-argument-2-ce-preview.png b/images/user-guide/calculated-fields/script-attribute-argument-2-ce-preview.png
new file mode 100644
index 0000000000..070cf09193
Binary files /dev/null and b/images/user-guide/calculated-fields/script-attribute-argument-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-attribute-argument-2-ce.png b/images/user-guide/calculated-fields/script-attribute-argument-2-ce.png
new file mode 100644
index 0000000000..6430167815
Binary files /dev/null and b/images/user-guide/calculated-fields/script-attribute-argument-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/script-calculated-fields-1-ce-preview.png
new file mode 100644
index 0000000000..ca7cd839ed
Binary files /dev/null and b/images/user-guide/calculated-fields/script-calculated-fields-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/script-calculated-fields-1-ce.png
new file mode 100644
index 0000000000..f184d4860e
Binary files /dev/null and b/images/user-guide/calculated-fields/script-calculated-fields-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-events-1-ce-preview.png b/images/user-guide/calculated-fields/script-events-1-ce-preview.png
new file mode 100644
index 0000000000..68686169db
Binary files /dev/null and b/images/user-guide/calculated-fields/script-events-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-events-1-ce.png b/images/user-guide/calculated-fields/script-events-1-ce.png
new file mode 100644
index 0000000000..ac24832082
Binary files /dev/null and b/images/user-guide/calculated-fields/script-events-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-events-2-ce-preview.png b/images/user-guide/calculated-fields/script-events-2-ce-preview.png
new file mode 100644
index 0000000000..ab300f52f1
Binary files /dev/null and b/images/user-guide/calculated-fields/script-events-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-events-2-ce.png b/images/user-guide/calculated-fields/script-events-2-ce.png
new file mode 100644
index 0000000000..5a68f6d731
Binary files /dev/null and b/images/user-guide/calculated-fields/script-events-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-11-ce-preview.png b/images/user-guide/calculated-fields/script-example-11-ce-preview.png
new file mode 100644
index 0000000000..8bd714755a
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-11-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-11-ce.png b/images/user-guide/calculated-fields/script-example-11-ce.png
new file mode 100644
index 0000000000..aa4e58393b
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-11-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-12-ce-preview.png b/images/user-guide/calculated-fields/script-example-12-ce-preview.png
new file mode 100644
index 0000000000..013516a0da
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-12-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-12-ce.png b/images/user-guide/calculated-fields/script-example-12-ce.png
new file mode 100644
index 0000000000..5773d25596
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-12-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-13-ce-preview.png b/images/user-guide/calculated-fields/script-example-13-ce-preview.png
new file mode 100644
index 0000000000..ba0a16972e
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-13-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-13-ce.png b/images/user-guide/calculated-fields/script-example-13-ce.png
new file mode 100644
index 0000000000..2777cec194
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-13-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-14-ce-preview.png b/images/user-guide/calculated-fields/script-example-14-ce-preview.png
new file mode 100644
index 0000000000..504bba048e
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-14-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-14-ce.png b/images/user-guide/calculated-fields/script-example-14-ce.png
new file mode 100644
index 0000000000..1cda914646
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-14-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-15-ce-preview.png b/images/user-guide/calculated-fields/script-example-15-ce-preview.png
new file mode 100644
index 0000000000..2f3c4c6b3b
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-15-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-15-ce.png b/images/user-guide/calculated-fields/script-example-15-ce.png
new file mode 100644
index 0000000000..e855893927
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-15-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-16-ce-preview.png b/images/user-guide/calculated-fields/script-example-16-ce-preview.png
new file mode 100644
index 0000000000..b146655472
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-16-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-16-ce.png b/images/user-guide/calculated-fields/script-example-16-ce.png
new file mode 100644
index 0000000000..bd5de43757
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-16-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-21-ce-preview.png b/images/user-guide/calculated-fields/script-example-21-ce-preview.png
new file mode 100644
index 0000000000..f6aca93a80
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-21-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-21-ce.png b/images/user-guide/calculated-fields/script-example-21-ce.png
new file mode 100644
index 0000000000..35333a9cae
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-21-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-22-ce-preview.png b/images/user-guide/calculated-fields/script-example-22-ce-preview.png
new file mode 100644
index 0000000000..992f4def25
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-22-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-22-ce.png b/images/user-guide/calculated-fields/script-example-22-ce.png
new file mode 100644
index 0000000000..0402ab8cbc
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-22-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-23-ce-preview.png b/images/user-guide/calculated-fields/script-example-23-ce-preview.png
new file mode 100644
index 0000000000..ba7105d575
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-23-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-23-ce.png b/images/user-guide/calculated-fields/script-example-23-ce.png
new file mode 100644
index 0000000000..0debe3393c
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-23-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-24-ce-preview.png b/images/user-guide/calculated-fields/script-example-24-ce-preview.png
new file mode 100644
index 0000000000..77ba56c680
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-24-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-24-ce.png b/images/user-guide/calculated-fields/script-example-24-ce.png
new file mode 100644
index 0000000000..f4c992e2a9
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-24-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-25-ce-preview.png b/images/user-guide/calculated-fields/script-example-25-ce-preview.png
new file mode 100644
index 0000000000..4489564b74
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-25-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-25-ce.png b/images/user-guide/calculated-fields/script-example-25-ce.png
new file mode 100644
index 0000000000..48d8c3c0e0
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-25-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-26-ce-preview.png b/images/user-guide/calculated-fields/script-example-26-ce-preview.png
new file mode 100644
index 0000000000..bc129ee79b
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-26-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-26-ce.png b/images/user-guide/calculated-fields/script-example-26-ce.png
new file mode 100644
index 0000000000..9d4d0b79cd
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-26-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-27-ce-preview.png b/images/user-guide/calculated-fields/script-example-27-ce-preview.png
new file mode 100644
index 0000000000..2e97be9b86
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-27-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-27-ce.png b/images/user-guide/calculated-fields/script-example-27-ce.png
new file mode 100644
index 0000000000..926beb199d
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-27-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-28-ce-preview.png b/images/user-guide/calculated-fields/script-example-28-ce-preview.png
new file mode 100644
index 0000000000..047de46db3
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-28-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-28-ce.png b/images/user-guide/calculated-fields/script-example-28-ce.png
new file mode 100644
index 0000000000..b370e21203
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-28-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-31-ce-preview.png b/images/user-guide/calculated-fields/script-example-31-ce-preview.png
new file mode 100644
index 0000000000..319965d8ac
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-31-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-31-ce.png b/images/user-guide/calculated-fields/script-example-31-ce.png
new file mode 100644
index 0000000000..d53c1fb21b
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-31-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-32-ce-preview.png b/images/user-guide/calculated-fields/script-example-32-ce-preview.png
new file mode 100644
index 0000000000..d9fafb2927
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-32-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-32-ce.png b/images/user-guide/calculated-fields/script-example-32-ce.png
new file mode 100644
index 0000000000..4b043b5cc7
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-32-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-33-ce-preview.png b/images/user-guide/calculated-fields/script-example-33-ce-preview.png
new file mode 100644
index 0000000000..228aa384fe
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-33-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-33-ce.png b/images/user-guide/calculated-fields/script-example-33-ce.png
new file mode 100644
index 0000000000..37eecded01
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-33-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-34-ce-preview.png b/images/user-guide/calculated-fields/script-example-34-ce-preview.png
new file mode 100644
index 0000000000..c734d661f2
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-34-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-34-ce.png b/images/user-guide/calculated-fields/script-example-34-ce.png
new file mode 100644
index 0000000000..5257795953
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-34-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-35-ce-preview.png b/images/user-guide/calculated-fields/script-example-35-ce-preview.png
new file mode 100644
index 0000000000..8589eddb35
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-35-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-35-ce.png b/images/user-guide/calculated-fields/script-example-35-ce.png
new file mode 100644
index 0000000000..f81b8e8b8c
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-35-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-36-ce-preview.png b/images/user-guide/calculated-fields/script-example-36-ce-preview.png
new file mode 100644
index 0000000000..e246589b9e
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-36-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-36-ce.png b/images/user-guide/calculated-fields/script-example-36-ce.png
new file mode 100644
index 0000000000..0af6b103be
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-36-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-37-ce-preview.png b/images/user-guide/calculated-fields/script-example-37-ce-preview.png
new file mode 100644
index 0000000000..e32ef5c5ac
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-37-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-37-ce.png b/images/user-guide/calculated-fields/script-example-37-ce.png
new file mode 100644
index 0000000000..4ded4abb79
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-37-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-38-ce-preview.png b/images/user-guide/calculated-fields/script-example-38-ce-preview.png
new file mode 100644
index 0000000000..edb24ec045
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-38-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-38-ce.png b/images/user-guide/calculated-fields/script-example-38-ce.png
new file mode 100644
index 0000000000..0917db6721
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-38-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-prepare-1-ce-preview.png b/images/user-guide/calculated-fields/script-example-prepare-1-ce-preview.png
new file mode 100644
index 0000000000..241219a2b8
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-prepare-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-prepare-1-ce.png b/images/user-guide/calculated-fields/script-example-prepare-1-ce.png
new file mode 100644
index 0000000000..33407b9636
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-prepare-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-prepare-2-ce-preview.png b/images/user-guide/calculated-fields/script-example-prepare-2-ce-preview.png
new file mode 100644
index 0000000000..e13a23f6a6
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-prepare-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-prepare-2-ce.png b/images/user-guide/calculated-fields/script-example-prepare-2-ce.png
new file mode 100644
index 0000000000..61dd810fc5
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-prepare-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-example-prepare-3-ce-preview.png b/images/user-guide/calculated-fields/script-example-prepare-3-ce-preview.png
new file mode 100644
index 0000000000..7299422719
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-prepare-3-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-example-prepare-3-ce.png b/images/user-guide/calculated-fields/script-example-prepare-3-ce.png
new file mode 100644
index 0000000000..bbe135589d
Binary files /dev/null and b/images/user-guide/calculated-fields/script-example-prepare-3-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce-preview.png b/images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce-preview.png
new file mode 100644
index 0000000000..bedf78734c
Binary files /dev/null and b/images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce.png b/images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce.png
new file mode 100644
index 0000000000..1b3a0f9a49
Binary files /dev/null and b/images/user-guide/calculated-fields/script-latest-telemetry-argument-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce-preview.png b/images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce-preview.png
new file mode 100644
index 0000000000..aaf70b6433
Binary files /dev/null and b/images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce.png b/images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce.png
new file mode 100644
index 0000000000..03ef3eb584
Binary files /dev/null and b/images/user-guide/calculated-fields/script-latest-telemetry-argument-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-output-1-ce-preview.png b/images/user-guide/calculated-fields/script-output-1-ce-preview.png
new file mode 100644
index 0000000000..6823eb9f0a
Binary files /dev/null and b/images/user-guide/calculated-fields/script-output-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-output-1-ce.png b/images/user-guide/calculated-fields/script-output-1-ce.png
new file mode 100644
index 0000000000..0ff7c037ed
Binary files /dev/null and b/images/user-guide/calculated-fields/script-output-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-output-2-ce-preview.png b/images/user-guide/calculated-fields/script-output-2-ce-preview.png
new file mode 100644
index 0000000000..16ce6408a5
Binary files /dev/null and b/images/user-guide/calculated-fields/script-output-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-output-2-ce.png b/images/user-guide/calculated-fields/script-output-2-ce.png
new file mode 100644
index 0000000000..c697f38d8e
Binary files /dev/null and b/images/user-guide/calculated-fields/script-output-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-propagation-calculated-fields-1-ce-preview.png b/images/user-guide/calculated-fields/script-propagation-calculated-fields-1-ce-preview.png
new file mode 100644
index 0000000000..4ed8eb0d2a
Binary files /dev/null and b/images/user-guide/calculated-fields/script-propagation-calculated-fields-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-propagation-calculated-fields-1-ce.png b/images/user-guide/calculated-fields/script-propagation-calculated-fields-1-ce.png
new file mode 100644
index 0000000000..9dd6ab7f8f
Binary files /dev/null and b/images/user-guide/calculated-fields/script-propagation-calculated-fields-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-result-1-ce-preview.png b/images/user-guide/calculated-fields/script-result-1-ce-preview.png
new file mode 100644
index 0000000000..175d2bff7e
Binary files /dev/null and b/images/user-guide/calculated-fields/script-result-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-result-1-ce.png b/images/user-guide/calculated-fields/script-result-1-ce.png
new file mode 100644
index 0000000000..6ecc584c7a
Binary files /dev/null and b/images/user-guide/calculated-fields/script-result-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-rolling-argument-1-ce-preview.png b/images/user-guide/calculated-fields/script-rolling-argument-1-ce-preview.png
new file mode 100644
index 0000000000..0954e0aee2
Binary files /dev/null and b/images/user-guide/calculated-fields/script-rolling-argument-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-rolling-argument-1-ce.png b/images/user-guide/calculated-fields/script-rolling-argument-1-ce.png
new file mode 100644
index 0000000000..1680b45d03
Binary files /dev/null and b/images/user-guide/calculated-fields/script-rolling-argument-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/script-rolling-argument-2-ce-preview.png b/images/user-guide/calculated-fields/script-rolling-argument-2-ce-preview.png
new file mode 100644
index 0000000000..ac9811cb56
Binary files /dev/null and b/images/user-guide/calculated-fields/script-rolling-argument-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/script-rolling-argument-2-ce.png b/images/user-guide/calculated-fields/script-rolling-argument-2-ce.png
new file mode 100644
index 0000000000..084277c4e4
Binary files /dev/null and b/images/user-guide/calculated-fields/script-rolling-argument-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/script.svg b/images/user-guide/calculated-fields/script.svg
new file mode 100644
index 0000000000..70d66afe89
--- /dev/null
+++ b/images/user-guide/calculated-fields/script.svg
@@ -0,0 +1,13 @@
+
diff --git a/images/user-guide/calculated-fields/simple-argument-1-ce-preview.png b/images/user-guide/calculated-fields/simple-argument-1-ce-preview.png
new file mode 100644
index 0000000000..9c6bb29d6a
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-argument-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-argument-1-ce.png b/images/user-guide/calculated-fields/simple-argument-1-ce.png
new file mode 100644
index 0000000000..c0a4cd4e95
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-argument-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-argument-2-ce-preview.png b/images/user-guide/calculated-fields/simple-argument-2-ce-preview.png
new file mode 100644
index 0000000000..5804ddaa49
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-argument-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-argument-2-ce.png b/images/user-guide/calculated-fields/simple-argument-2-ce.png
new file mode 100644
index 0000000000..768643647f
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-argument-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-argument-3-ce-preview.png b/images/user-guide/calculated-fields/simple-argument-3-ce-preview.png
new file mode 100644
index 0000000000..3b95e9e99d
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-argument-3-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-argument-3-ce.png b/images/user-guide/calculated-fields/simple-argument-3-ce.png
new file mode 100644
index 0000000000..bc557ebaed
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-argument-3-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-events-1-ce-preview.png b/images/user-guide/calculated-fields/simple-events-1-ce-preview.png
new file mode 100644
index 0000000000..4a9c357142
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-events-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-events-1-ce.png b/images/user-guide/calculated-fields/simple-events-1-ce.png
new file mode 100644
index 0000000000..e18e5b7b62
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-events-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-events-2-ce-preview.png b/images/user-guide/calculated-fields/simple-events-2-ce-preview.png
new file mode 100644
index 0000000000..7353e4106d
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-events-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-events-2-ce.png b/images/user-guide/calculated-fields/simple-events-2-ce.png
new file mode 100644
index 0000000000..39213929a2
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-events-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-1-ce-preview.png b/images/user-guide/calculated-fields/simple-example-1-ce-preview.png
new file mode 100644
index 0000000000..eb6a689154
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-1-ce.png b/images/user-guide/calculated-fields/simple-example-1-ce.png
new file mode 100644
index 0000000000..79e55272b9
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-2-ce-preview.png b/images/user-guide/calculated-fields/simple-example-2-ce-preview.png
new file mode 100644
index 0000000000..a5bf50a668
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-2-ce.png b/images/user-guide/calculated-fields/simple-example-2-ce.png
new file mode 100644
index 0000000000..07f45799ca
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-3-ce-preview.png b/images/user-guide/calculated-fields/simple-example-3-ce-preview.png
new file mode 100644
index 0000000000..2934da7be3
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-3-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-3-ce.png b/images/user-guide/calculated-fields/simple-example-3-ce.png
new file mode 100644
index 0000000000..71b167c703
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-3-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-4-ce-preview.png b/images/user-guide/calculated-fields/simple-example-4-ce-preview.png
new file mode 100644
index 0000000000..eee0ca36c5
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-4-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-4-ce.png b/images/user-guide/calculated-fields/simple-example-4-ce.png
new file mode 100644
index 0000000000..511a246229
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-4-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-5-ce-preview.png b/images/user-guide/calculated-fields/simple-example-5-ce-preview.png
new file mode 100644
index 0000000000..8548b6c485
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-5-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-5-ce.png b/images/user-guide/calculated-fields/simple-example-5-ce.png
new file mode 100644
index 0000000000..5388d74627
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-5-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-6-ce-preview.png b/images/user-guide/calculated-fields/simple-example-6-ce-preview.png
new file mode 100644
index 0000000000..98562f022e
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-6-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-6-ce.png b/images/user-guide/calculated-fields/simple-example-6-ce.png
new file mode 100644
index 0000000000..b34c775190
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-6-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-7-ce-preview.png b/images/user-guide/calculated-fields/simple-example-7-ce-preview.png
new file mode 100644
index 0000000000..2f3c4c6b3b
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-7-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-7-ce.png b/images/user-guide/calculated-fields/simple-example-7-ce.png
new file mode 100644
index 0000000000..e855893927
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-7-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-8-ce-preview.png b/images/user-guide/calculated-fields/simple-example-8-ce-preview.png
new file mode 100644
index 0000000000..2468391d04
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-8-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-example-8-ce.png b/images/user-guide/calculated-fields/simple-example-8-ce.png
new file mode 100644
index 0000000000..30a0ed37ed
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-example-8-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-expression-1-ce-preview.png b/images/user-guide/calculated-fields/simple-expression-1-ce-preview.png
new file mode 100644
index 0000000000..14126e75d5
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-expression-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-expression-1-ce.png b/images/user-guide/calculated-fields/simple-expression-1-ce.png
new file mode 100644
index 0000000000..fc205b644e
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-expression-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-output-1-ce-preview.png b/images/user-guide/calculated-fields/simple-output-1-ce-preview.png
new file mode 100644
index 0000000000..89f5ebb5ce
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-output-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-output-1-ce.png b/images/user-guide/calculated-fields/simple-output-1-ce.png
new file mode 100644
index 0000000000..3cf8f0f865
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-output-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-output-2-ce-preview.png b/images/user-guide/calculated-fields/simple-output-2-ce-preview.png
new file mode 100644
index 0000000000..1579cda1bc
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-output-2-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-output-2-ce.png b/images/user-guide/calculated-fields/simple-output-2-ce.png
new file mode 100644
index 0000000000..003f2fbb76
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-output-2-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple-result-1-ce-preview.png b/images/user-guide/calculated-fields/simple-result-1-ce-preview.png
new file mode 100644
index 0000000000..900ebe3b01
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-result-1-ce-preview.png differ
diff --git a/images/user-guide/calculated-fields/simple-result-1-ce.png b/images/user-guide/calculated-fields/simple-result-1-ce.png
new file mode 100644
index 0000000000..159c9970c1
Binary files /dev/null and b/images/user-guide/calculated-fields/simple-result-1-ce.png differ
diff --git a/images/user-guide/calculated-fields/simple.svg b/images/user-guide/calculated-fields/simple.svg
new file mode 100644
index 0000000000..0bf4287ce0
--- /dev/null
+++ b/images/user-guide/calculated-fields/simple.svg
@@ -0,0 +1,19 @@
+
\ No newline at end of file
diff --git a/images/user-guide/calculated-fields/smart_device_details.json b/images/user-guide/calculated-fields/smart_device_details.json
new file mode 100644
index 0000000000..5e9c6ae9a6
--- /dev/null
+++ b/images/user-guide/calculated-fields/smart_device_details.json
@@ -0,0 +1,681 @@
+{
+ "title": "Smart Device Details",
+ "image": null,
+ "mobileHide": false,
+ "mobileOrder": null,
+ "configuration": {
+ "description": "",
+ "widgets": {
+ "b2a4ee21-a60a-0fd1-6477-32239383884e": {
+ "typeFullFqn": "system.cards.markdown_card",
+ "type": "latest",
+ "sizeX": 5,
+ "sizeY": 3.5,
+ "config": {
+ "datasources": [
+ {
+ "type": "device",
+ "name": "",
+ "deviceId": "6b595cd0-7dd5-11f0-acfd-cb50e27d53ce",
+ "dataKeys": [
+ {
+ "name": "temperature",
+ "type": "timeseries",
+ "label": "temperature",
+ "color": "#2196f3",
+ "settings": {},
+ "_hash": 0.8692272471823347,
+ "aggregationType": "NONE",
+ "units": null,
+ "decimals": null,
+ "funcBody": null,
+ "usePostProcessing": null,
+ "postFuncBody": null
+ },
+ {
+ "name": "humidity",
+ "type": "timeseries",
+ "label": "humidity",
+ "color": "#4caf50",
+ "settings": {},
+ "_hash": 0.14043408056634743
+ }
+ ],
+ "alarmFilterConfig": {
+ "statusList": [
+ "ACTIVE"
+ ]
+ }
+ }
+ ],
+ "timewindow": {
+ "displayValue": "",
+ "selectedTab": 0,
+ "realtime": {
+ "realtimeType": 1,
+ "interval": 1000,
+ "timewindowMs": 60000,
+ "quickInterval": "CURRENT_DAY",
+ "hideInterval": false,
+ "hideLastInterval": false,
+ "hideQuickInterval": false
+ },
+ "history": {
+ "historyType": 0,
+ "interval": 1000,
+ "timewindowMs": 60000,
+ "fixedTimewindow": {
+ "startTimeMs": 1758615153106,
+ "endTimeMs": 1758701553106
+ },
+ "quickInterval": "CURRENT_DAY",
+ "hideInterval": false,
+ "hideLastInterval": false,
+ "hideFixedInterval": false,
+ "hideQuickInterval": false
+ },
+ "aggregation": {
+ "type": "AVG",
+ "limit": 25000
+ }
+ },
+ "showTitle": false,
+ "backgroundColor": "#fff",
+ "color": "rgba(0, 0, 0, 0.87)",
+ "padding": "0px",
+ "settings": {
+ "useMarkdownTextFunction": false,
+ "markdownTextPattern": "