# Using Output Variables in Astera

The *Variables* object in Astera allows users to create variables that can be used in multiple objects within a dataflow or workflow. The user can assign a fixed value to a variable or allocate it dynamically, depending on the requirement. An output variable is used when you need to pass a certain value from an inner flow (dataflow) to an outer flow (workflow).

## **Use Case**

In this case, we have a *Customers* dataset with *LateArrivals* and *TotalOrders* fields that contain the count of orders that arrived late and the total number of orders for each customer, respectively. We want to find out the following:

1. The total number of orders, by summing all the entries in the *TotalOrders* column, for each customer.
2. The total number of orders which were shipped late, by summing all the entries in the *LateArrivals* column.
3. The percentage of orders which were shipped late, by using the following expression: PercentageLate = (LateArrivals/TotalOrders) \* 100.

Finally, we want to notify the administration by sending them an automated e-mail if the *PercentageLate* is greater than a fixed *Threshold* value.

## **Using the Variables object in a Dataflow**

To achieve our desired functionality, we have created a dataflow with the following objects:

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FEy4ketDQmqOG2M0xTd93%2F0.png?alt=media)

1. [*Delimited File Source*](https://documentation.astera.com/v/astera-data-stack-v8/dataflows/sources/delimited-file-source)*:* To read the *Customers* dataset from the CSV file.
2. [*Aggregate Transformation*](https://documentation.astera.com/v/astera-data-stack-v8/dataflows/transformations/aggregate-transformation)*:* To sum the values in the *LateArrivals* and *TotalOrders* columns.
3. [*Expression Transformation*](https://documentation.astera.com/v/astera-data-stack-v8/dataflows/transformations/expression-transformation)*:* To calculate *PercentageLate.*
4. *Variables:* To set the output variables, *PercentLate* and *Threshold*.

## **Steps to Assign Values to Output Variables**

1. Drag and drop the *Variables* object from the *Resources* section of the *Toolbox* onto the designer.

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FhQiCRiD280A48jc3IqEZ%2F1.png?alt=media)

2. Right-click on the *Variables* object and select *Properties.* Alternatively, you can also double-click on the object’s header to open *Properties.*

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FAhAX7AkXnd6zLvXLMMid%2F2.png?alt=media)

3. A *Variables Properties* window will open, where you can specify the *Name, Data Type, Variable Type, Default Value, and Parameter Path* of the variable.

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FOXffBIAMJKDLuS6i3Gdr%2F3.png?alt=media)

4. Specify appropriate values for *Name, Data Type, Variable Type,* and *Default Value* (**optional**) for the variables you want to create. In this case, we want to create output variables, *PercentLate* and *Threshold*.

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FawNkgoKEGqaaBBwi24W9%2F4.png?alt=media)

5. Go to the drop-down menu in the *Parameter Path* column and expand the *Expression* section. Select *PercentageLate*.

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FTmzxzHy4M98T5Yp7cYE6%2F5.png?alt=media)

*PercentageLate* will only appear in this drop-down menu if it is marked as a *Variable* in the properties of the *Expression* object, as shown below.

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FYTbAjjReubxH9W35vIqM%2F6.png?alt=media)

6. To set the value of the variable, *Threshold*, we will create a new variable, *SetThreshold,* and use the $SetVariable(String Variable, Any Value) function in the *Layout Builder* of the *Expression* object. Make sure to specify the parameters of the function with the correct syntax.

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FK1UdugzuYsNpNBVzTOVl%2F7.png?alt=media)

Here, we have set the value of *Threshold* to 9.99. Click *OK* to close this window.

{% hint style="info" %}
**Note:** The Set Variable functionality works in two cases only:

* When there is a set-level transformation (purple box) in the flow. Here, we have used an *Aggregate* transformation, which is a set transformation, in the dataflow. If you do not have a set-level transformation in your flow, you can add a *Passthru* transformation and pass the data from the *Expression* object to it.
* Alternatively, in case you do not want to use a set-level transformation, you can uncheck all the checkboxes in the *Output* column in the *Layout Builder* of the *Expression* object for this functionality to work.
  {% endhint %}

We have successfully configured the *Variables* object in the dataflow.

## **Using the Variables in a Workflow**

We will now complete our desired use case by using [workflow tasks](https://documentation.astera.com/v/astera-data-stack-v8/workflows/run-workflow-task). We can run the dataflow in a workflow using the *Run Dataflow* object. In our case, we have made the following workflow (shown below) to notify the admin if the *PercentLate* exceeds the *Threshold* value. Notice that the *PercentLate* and *Threshold* variables appear in the *Run Dataflow* object because they are defined as output variables.

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FXhHjrCJr1iLYKzg8xIkm%2F8.png?alt=media)

The output of the *Decision* object depends on the following conditions:

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2F7hIOGOwWkzdB4vBn6nAq%2F9.png?alt=media)

If the *PercentLate* is greater than the defined *Threshold*, our *Decision* object will return True, and the *SendMail* task will be executed. Here is a job trace of the workflow:

![](https://750977703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqHxyVNGb7tSdIWecl6Ru%2Fuploads%2FIkKrnyApt3HInLmrOsZB%2F10.png?alt=media)

The *Decision* object has returned False as our *PercentLate* variable, 4.4%, is less than our specified *Threshold* of 9.99%.

This is how you can use the *Variables* object to create and use output variables in Astera.
