Enriching Data
Introduction
Enriching data is at the heart of analysis modelling, from looking up reference information to performing complex calculations, PhixFlow covers it all. This page highlights the key areas of enrichment, providing examples, and listing the links to additional resources.
PhixScript
PhixScript is the language of PhixFlow and it can be used anywhere that supports expressions, such as attributes on a table and in filters.
Expression editors display symbols to indicate whether they are expecting PhixScript or Embedded PhixScript.
PhixScript
Embedded PhixScript
Single Function PhixScript
This is used in attribute expressions and filters alike where a single function is called.
// If ExamResult is greater than 95 then return "Distinction" else return "Pass" if( in.ExamResult > 95, "Distinction", "Pass")
Multiple Function PhixScript
PhixScripts containing multiple functions must be wrapped in a do(). do()
can also be used within a function such as in if
or switch
. For more information see do().
The value returned from the PhixScript is the final value output, therefore it is useful to add the desired output to the end of the script.
Note that variables declared in an attribute expression (variables are declared with a $ symbol with the data type being implied) will be accessible to subsequent attributes within the same table using the $variable name.
do( // calculate the miles per gallon. $mpg = in.distance / in.gallonsUsed, // if $mpg is over 65 set efficiency to Highly Efficient if( $mpg > 65, $efficiency = "Highly Efficient", // ELSE, set $efficiency to be null $efficiency = _NULL ), // Set the value returned by the PhixScript $efficiency )
Common Functions
There are over 115 functions available and these are listed in Functions, but to help you get started here is a short list of commonly used functions:
- Comments can be added to a single line using
//
or to a section using/* */
. - if: used where you need to evaluate a simple condition before processing an expression.
- ifNull: If its first value is provided then this is the returned value, else it will return the second value.
- switch: evaluates a set of conditions in turn, and returns the associated result for the first match.
- forEach: Iterates over an Array or Recordset and processes a script for each entry.
- listToString: takes a list and returns a string delimited by a specified value e.g. comma or pipe.
- split: Splits a string where a separator occurs, returning a list of value as an array..
- contains: Used on a string will return true (1), if a string contains another specified string.
- listContains: Used on a list returns the position of an entry in a list (with 1 being the first item) if the value being looked for is found in the list, and false (0) otherwise.
- replaceAll: Replace all occurrences of a pattern with a replacement string. Also, see replaceFirst.
- dateDiff: Return the time difference between two dates in milliseconds.
- dateAdd: Add or subtract from a date using a specified unit e.g. _MONTH.
- now: Returns the current day and time, and today returns just the day.
- _NULL: is how to declare a null value e.g. $output = _NULL.
- substring: Returns the portion of the supplied string between specified character positions.
- stringLength: Returns the length of a string.
- trim: Removes leading and trailing white spaces from a string, returning the cleansed string.
- toString: Converts a value from select data types into a string. For example, a date.
- toDate: Converts a string in a recognised date format (e.g. 20120521 or 20120521.172108) into a date.
- countElements: Returns the number of elements in an Array or Recordset.
Expression Operators
The following relational operators are available:
- ! (not; reverses the value of a logical expression)
- && (and; can also use the attribute function and)
- || (or; can also use the attribute function or)
- > (greater than; can also use the attribute function gt)
- < (less that; can also use the attribute function lt)
- != (not equals; can also use the attribute function ne)
- == (equals; can also use the attribute function eq)
- >= (greater than or equal to; can also use the attribute function ge)
- <= (less than or equal to; can also use the attribute function le)
The following arithmetic operators are available:
- + (add; can also use the attribute function sum)
- - (minus; can also use the attribute function sum, reversing the sign of the second operand)
- / (divide)
- * (multiply)
Debugging
- debug: Adds a debug message into the System Console. This function is often used when creating a model and trying to work out why an Expression is not behaving as expected.
- error: Adds an error message into the System Console and displays the message to the user.
Variables
PhixFlow contains a number of Internal Variables available to PhixScript used for obtaining system and user information.
Variables in PhixFlow are declared using a $variable. The data type is implied by the first value entered, for example:
$myArray = []
. Creates an array.$myString = "Hello World"
. Creates a string.$myDate = toDate("20120521")
. Creates a date.$myNumber = 42
. Creates an integer.
Clearing Data
See Rollback Recordsets, for details on removing all or selected records from your Table.
Lookup Information
Lookups can be performed using three different techniques, the method selected depends on your requirements and these are described below. For more information see Filtering and Sorting Data.
Lookup with Filtering
Scenario
Lookup information from a separate table and pass filtered information to return only selected records.
Example
You need to retrieve the Region for a particular business using the City from its address.
Solution
- You should have two tables:
- one with your data that will perform the lookup e.g. Business Data.
- a second table with the data being looked up e.g. Region.
- Drag a pipe from the data to be looked up, to the data performing the lookup. In our case from Region to the Business Data.
- In the properties window that opens for the pipe:
- Set the Name to be something short but meaningful.
- Set the Type to be
lookup
. - In the filter section we will tell the lookup pipe we want to filter
Region
byCity
using the processed city value from our Business Data.
To use the processed version of city we use _out.City. - We are passing data and not just a string value, so click to tell PhixFlow we are passing an expression.
The filter will look like this:
- The lookup is now setup, to access its attributes, we open the Business Data table and add an attribute called
Region
.- In the expression type
pipe.attribute
, in our case this will bergn.Region
. - Save your changes.
- In the expression type
- Run Analysis on Business Data and the Region will now populate.
Lookup with Order/Index
Scenario
This is a highly efficient method for performing a lookup against a small set of records. This kind of lookup will automatically cache a set amount of records, 3000 by default, in memory allowing for faster retrieval.
Example
You have a Product ID on an Invoice and want to return the name of the product to display. There are a finite amount of products so it is efficient to cache them. The setup will look similar to:
Solution
Merging Data
See Merging Tables for full details. This technique can also be used to deduplicate.
Matching Records
See Compare or Match Data for deduplicating and matching records.