Versions Compared

Key

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

Insert excerpt
_Banners
_Banners
nameanalysis
nopaneltrue

Introduction

Enriching data is at the heart of analysis modelling from adding additional data and extrapolating lookup up reference information to performing complex calculations and deduplication, PhixFlow covers it all. In this page we will highlight some of This page highlights the key areas of enrichment, provide providing examples, and list listing the links to additional useful enrichment resources.

PhixScript

Functions

PhixScript is the language of PhixFlow and it can be used anywhere that supports expressions, such as attributes on a table and in filters.

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.
    1. Syntax: if(condition, trueExpression, falseExpression).
  • switch: evaluates a set of conditions in turn, and returns the associated result for the first match.
    Code Block
    switch(
    	[condition1, result1],
    	[condition2, result2],
    	[conditionN, resultN],
    	defaultResult
    )
  • forEach
  • listToString
  • contains
  • listContains
  • replaceAll
  • dateDiff
  • dateAdd
  • now and today
  • ifNull and _NULL
  • substring
  • stringLength
  • trim
  • toString
  • toDate
  • Error Handling

    Debug

    error

    Where a PhixScript is more than a single function, it must be wrapped in a do() function. do() can also be used within functions where you need to carryout multiple functions such as in if or switch.

    Single Function PhixScript

    This is used in attribute expressions and filters alike where a single function is called.

    Code Block
    // 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 by using the $variable name.

    Code Block
    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 
    Anchor
    CheatSheet
    CheatSheet

    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:

    1. Comments can be added to a single line using // or to a section using /* */.
    2. if: used where you need to evaluate a simple condition before processing an expression.
    3. ifNull: If its first value is provided then this is the returned value, else it will return the second value.
    4. switch: evaluates a set of conditions in turn, and returns the associated result for the first match.
    5. forEachIterates over an Array or Recordset and processes a script for each entry.
    6. listToStringtakes a list and returns a string delimited by a specified value e.g. comma or pipe.
    7. contains: Used on a string will return true (1), if a string contains another specified string.

    Variables

    make reference to variable.
    1. 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.
    2. replaceAllReplace all occurrences of a pattern with a replacement string. Also, see replaceFirst.
    3. dateDiffReturn the time difference between two dates in milliseconds.
    4. dateAddAdd or subtract from a date using a specified unit e.g. _MONTH.
    5. now: Returns the current day and time, and today returns just the day.
    6. _NULL: is how to declare a null value e.g. $output = _NULL.
    7. substringReturns the portion of the supplied string between specified character positions.
    8. stringLengthReturns the length of a string.
    9. trimRemoves leading and trailing white spaces from a string, returning the cleansed string.
    10. toStringConverts a value from select data types into a string. For example, a date.
    11. toDateConverts a string in a recognised date format (e.g. 20120521 or 20120521.172108) into a date.

    Debugging

    • debug: Adds a debug message into the Log. This function is often used when creating a model and trying to work out why an Expression is not behaving as expected.
    • errorAdds a error message into the Log 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:

    1. $myArray  = []. Creates an array.
    2. $myString = "Hello World". Creates a string.
    3. $myDate   = toDate("20120521"). Creates a date.
    4. $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

    Function

    with Filtering

    Scenario

    Lookup information from a separate table and pass filtering information dynamically to return only selected records. 

    Example

    You need to retrieve all invoices for a specific date range that have not been sent.

    Solution

    Show one with _out.someting - Typically running a model

    Show one with $variable - If your using an action and dynamically setting the $variable.

    Lookup Function

    the Region for a particular business using the City from its address.

    Image Added

    Solution

    1. 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.
    2. 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.
    3. In the properties window that opens for the pipe:
      1. Set the Name to be something short but meaningful.
      2. Set the Type to be lookup.
      3. In the filter section we will tell the lookup pipe we want to filter Region by City using the processed city value from our Business Data.
        To use the processed version of city we use _out.City.
      4. We are passing data and not just a string value, so click Image Addedto tell PhixFlow we are passing an expression.
        The filter will look like this:
        Image Added
    4. The lookup is now setup, to access its attributes, we open the Business Data table and add an attribute called Region.
      1. In the expression type pipe.attribute, in our case this will be rgn.Region.
      2. Save your changes.
    5. 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 lookupsretrieval.

    Example

    You have a product code Product ID on an invoice 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:

    Image Added

    Solution

    Merges

    Matching

    Simple exact matches and make reference to addition al functions for more advanced matching see Lev Distance etc.

    Task Plan

    1. You should have two tables:
      • one with your data that will perform the lookup e.g. Invoices.
      • a second table with the data being looked up e.g. Products.
    2. Drag a pipe from the data to be looked up, to the data performing the lookup. In our case from Products to the Invoices table.
    3. In the properties window that opens for the pipe:
      1. Set the Name to be something short but meaningful.
      2. Set the Type to be lookup.
      3. Click 
        Insert excerpt
        _save
        _save
        nopaneltrue
        .
      4. In the Order/Index section, click 
        Insert excerpt
        _attributes_show
        _attributes_show
        nopaneltrue
        .
      5. Now drag the attributes from each table, onto the order index section, that will be used in the lookup.
        For example from the Product Table drag UID and from the Invoice Table drag ProductID.
    4. The lookup is now setup, to access its attributes, we open the Business Data and add an attribute called ProductName.
      1. In the expression type pipe.attribute, in our case this will be pn.ProductName.
      2. Save your changes.
    5. Run analysis on Invoices and the product name will now populate.

    Lookup Function

    See lookup for full details on the configuration.

    The lookup function allows the user to pass variables to a lookup pipe. For example up, the pipe configuration for passing a variable would look like the following with the Type set to Lookup:

    Image Added

    To retrieve the Region data from this lookup pipe, for example in an attribute expression, this would look like the following: lookup(in, $num = _out.MyValue).Region

    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.

    More Information