Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

When writing expressions and scripts in PhixFlow, you can use different types of variable.

  • Attribute names are like the column headings in a spreadsheet.
    • You can reference an attribute using its name in other attributes, expressions and file collectors.
    • In expressions, attribute names can be qualified with pipe names like this:  <pipename>.<attributename> for example in.recordID.
    • Database collectors are a special case. They generate implicit attribute names from the names of the fields returned by the database query.
  • Internal Variables are created and populated by PhixFlow when certain actions happen.
    For example, when you load data via a file collector, the stream automatically includes the attribute  _fileName to indicate the original file.
    See the list on the Internal Variables page.
  • User-defined variables are the variables you can create to hold data required for complex calculations in attributes or other expressions. These are prefixed with a $ character, so are called $-variables. 


Panel
borderColor#7da054
titleColorwhite
titleBGColor#7da054
borderStylesolid
titleSections on this page

Table of Contents
indent12px
stylenone


This page summarises which variables are available in different contexts, and explains how to create and use $-variables. See also Expression Basics.

Which Variables are Available

The following tables gives some guidelines for the availability of variables, based on the PhixFlow Timing Cycle for evaluating Models.

Location of ExpressionAvailable Variables
Input multiplier

Some internal variables (e.g. _toDate)

$-variables (i.e. variables declared locally in the Input Multiplier)

Database collector SQL script

_inputMultiplier

%USERNAME%, %PASSWORD%

$-variables

Output Multiplier

internal variables (e.g. _toDate)

$-variables

Attribute expression

internal variables (e.g. _toDate)

All <pipeName> values (e.g. inpipe.accountVal

All _out.value where value is the name of the attribute and it is before the current attribute in the stream

All user defined variables created in a prior Attribute expression

Output filter expression

internal variables (e.g. _toDate)

All _out.attribute values

All user defined variables created in any

Attribute expression

Pipe index expression on a
lookup pipe

internal variables

<pipename>.attribute - the name on an input pipe

All _out.value where value is the name of the attribute and it is before the current attribute in the stream


Anchor
varScope
varScope
Variable Scoping

When writing expressions that reference variables it is important to understand whether PhixFlow has "seen" the variable yet. This is the scope of the variable. 

In a stream, output multiplier or output filter, the attributes have a specified order. When you run analysis on a model, PhixFlow processes each attribute in order, evaluating their expressions. This means you cannot reference:

  • an attribute name before PhixFlow has processed it. So in the first attribute in a stream, you cannot use a value from the third attribute in the stream. 
  • a $-variable before PhixFlow has processed the expression where it is set.

You can only reference:

  • an attribute name in a subsequent attribute
  • a $-variable after it has been set or evaluated.

Internal Variables

PhixFlow has a list of functions you can use in an expression; see Internal Variables.

Some commonly-used internal variables are

Referencing attributes in a stream. 

VariableSyntaxExample 
.<pipe_name>.<attribute_name>in.AppleHarvestDateIndicates the source of the attribute is the incoming pipe. The default name for a pipe is "in".
_out

_out.<attribute_name>

_out.AppleHarvestDate

PhixFlow processes stream attributes in the specified order. Use _out

.<attribute_name> to reference

 indicates an attribute in the same stream that PhixFlow has already processed.


Tip

If your expression is not working, check to make sure anything it references has already been processed or evaluated by PhixFlow. If the expression is referencing something that will be processed

if( _out.AppleHarvestDate < toDate('20210101'), 1, 0)toDate(converts the string 20210101 into a date 01-01-2021)

later, PhixFlow will not be able to evaluate the expression.


toDate
if( _out.AppleHarvestDate < _toDate('20210101'), 1, 0
). Here we see an expression within an expression. toDate(converts the string 20210101 into a date 01-01-2021)Internal Variables (eg _out.) _out. signals that AppleHarvestDate is being sourced from the same stream as the attribute on which you are writing an expression for and that it has therefore already been calculated. Also frequently used is the name of a pipe that goes into a stream followed by a . eg in.AppleHarvestDate which signals that AppleHarvestDate is being sourced down a pipe going into the stream called 'in'. The internal variable preceding an attribute name should reflect where the attribute is being source from. There are many other internal variables, see Internal Variables.
)

In this case one of the arguments in an if statement is an internal variable, that indicates the date up-to which PhixFlow will process a record. 


Regular Expressions - Regular expressions can be used to match patterns within strings or arrays as arguments within jep expressions, for example replaceAllreplaceFirst and matches. See Regexp ToDelete.

Simple integers or strings. In the above case 1 and 0 are simple integers. They tell PhixFlow to return the number 1 if NumberOfApples > 1 and 0 if it is not. A string could be returned instead eg. if(_out.NumberOfApples > 1, 'True', 'False') would return the string True if NumberOfApples >1 and False if it is not. Note strings need to be wrapped in ' marks. 


(To find the correct syntax for an expression - find it in the list below or search in confluence)


Creating and Using $-variables

Defining a $-variable

Insert excerpt
Expression Style
Expression Style

PhixFlow assumes that you are declaring a variable and setting its value the first time it occurs in the expression.

$localVar = 'Smith' $GlobalVar = 'St.John-Smith'

Using $-Variables in Expressions

Excerpt

In expressions that have complex calculations, you may need a variable to hold the result of a calculation. You can then reference the variable later in the expression, or in other attribute expressions for the same stream.

The following expression uses do() function and $-variables for a simple calculation.

ExpressionResult

do(
   $A = 5,
   $B = 2,

   $A*$B
)

This expression

  • Sets values for 2 $-variables: $A and$ B 
  • Performs simple calculation
  • Returns 10


do(
   $c = 10,

   $A*$B*$C
)

A different expression

  • Sets another variable value
  • References the $-variables from the previous expression
  • Returns 100

When to Use $-variables

$-variables are not really needed in simple calculations. They are useful:

  • in forEach loops
  • calculating attibute names from pipes; see Assigning Values From a Pipe.
  • to store a value from a look-up pipe, when you need the value in multiple attributes
    1. In the first attribute, look-up the value.
    2. Use a $-variable to store the value that is returned by the look-up.
    3. When you need the value in another attribute, reference the $-variable instead of repeating the look-up.
  • in complex expressions, to break up multiple consecutive functions into separate lines. In this case, use a $-variable to store the intermediate values; see Multiline Statements and $-variables.

Variable Typing
Anchor
varType
varType

When a variable is first used, PhixFlow makes a best guess about what type of data is stored in that variable; see Parameter Types. For example:

ExpressionPhixFlow identifies data type
$thisNumber = 4integer
$thisAddress = '123 Fake St'string


When PhixFlow has decided what type of data is stored in a variable, you usually cannot change the type. PhixFlow will reject an expression that equates different types, such as:

$thisNumber = $thisAddress

The cases where you may be able to change a data type are

  • integer to a floating point value: PhixFlow may be able to convert between these.
  • by using type conversion function, such as toDate. This forces a value of one type into a variable of another type.


See Also