Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Published by Scroll Versions from space DEV and version r092
Excerpt

This example demonstrates functions for comparing the relative values of two functions.

Functions:

D generate list excerpts
pagesLESSTHANEQUAL Function,LESSTHAN Function,GREATERTHANEQUAL Function, GREATERTHAN Function

In the town of Circleville, citizens are allowed to maintain a single crop circle in their backyard, as long as it confirms to the town regulations. Below is some data on the size of crop circles in town, with a separate entry for each home. Limits are displayed in the adjacent columns, with the inclusive columns indicating whether the minimum or maximum values are inclusive.

Tip

Tip: As part of this exercise, you can see how to you can extend your recipe to perform some simple financial analysis of the data.

Source:

LocationRadius_ftminRadius_ftminInclusivemaxRadius_ftmaxInclusive
House155.510Y25N
House21210Y25N
House314.2510Y25N
House43.510Y25N
House52710Y25N

Transformation:

After the data is loaded into the Transformer page, you can begin comparing column values:

D trans
RawWrangletrue
p03Value'tooSmall'
Typestep
WrangleTextderive type:single value: LESSTHANEQUAL(Radius_ft,minRadius_ft) as:'tooSmall'
p01NameFormula type
p01ValueSingle row formula
p02NameFormula
p02ValueLESSTHANEQUAL(Radius_ft,minRadius_ft)
p03NameNew column name
SearchTermNew formula

While accurate, the above transform does not account for the minInclusive value, which may be changed as part of your steps. Instead, you can delete the previous transform and use the following, which factors in the other column:

D trans
RawWrangletrue
p03Value'tooSmall'
Typestep
WrangleTextderive type:single value: IF(minInclusive == 'Y',LESSTHANEQUAL(Radius_ft,minRadius_ft),LESSTHAN(Radius_ft,minRadius_ft)) as:'tooSmall'
p01NameFormula type
p01ValueSingle row formula
p02NameFormula
p02ValueIF(minInclusive == 'Y',LESSTHANEQUAL(Radius_ft,minRadius_ft),LESSTHAN(Radius_ft,minRadius_ft))
p03NameNew column name
SearchTermNew formula

In this case, the IF function tests whether the minimum value is inclusive (values of 10 are allowed). If so, the LESSTHANEQUAL function is applied. Otherwise, the LESSTHAN function is applied. For the maximum limit, the following step applies:

D trans
RawWrangletrue
p03Value'tooBig'
Typestep
WrangleTextderive type:single value: IF(maxInclusive == 'Y', GREATERTHANEQUAL(Radius_ft,maxRadius_ft),GREATERTHAN(Radius_ft,maxRadius_ft)) as:'tooBig'
p01NameFormula type
p01ValueSingle row formula
p02NameFormula
p02ValueIF(maxInclusive == 'Y', GREATERTHANEQUAL(Radius_ft,maxRadius_ft),GREATERTHAN(Radius_ft,maxRadius_ft))
p03NameNew column name
SearchTermNew formula

Now, you can do some analysis of this data. First, you can insert a column containing the amount of the fine per foot above the maximum or below the minimum. Before the first derive command, insert the following, which is the fine ($15.00) for each foot above or below the limits:

D trans
RawWrangletrue
p03Value'fineDollarsPerFt'
Typestep
WrangleTextderive type:single value: 15 as:'fineDollarsPerFt'
p01NameFormula type
p01ValueSingle row formula
p02NameFormula
p02Value15
p03NameNew column name
SearchTermNew formula

At the end of the recipe, add the following new line, which calculates the fine for crop circles that are too small:

D trans
RawWrangletrue
p03Value'fine_Dollars'
Typestep
WrangleTextderive type:single value: IF(tooSmall == 'true', (minRadius_ft - Radius_ft) * fineDollarsPerFt, 0.0) as: 'fine_Dollars'
p01NameFormula type
p01ValueSingle row formula
p02NameFormula
p02ValueIF(tooSmall == 'true', (minRadius_ft - Radius_ft) * fineDollarsPerFt, 0.0)
p03NameNew column name
SearchTermNew formula

The above captures the too-small violations. To also capture the too-big violations, change the above to the following:

D trans
RawWrangletrue
p03Value'fine_Dollars'
Typestep
WrangleTextderive type:single value: IF(tooSmall == 'true', (minRadius_ft - Radius_ft) * fineDollarsPerFt, if(tooBig == 'true', (Radius_ft - maxRadius_ft) * fineDollarsPerFt, '0.0')) as: 'fine_Dollars'
p01NameFormula type
p01ValueSingle row formula
p02NameFormula
p02ValueIF(tooSmall == 'true', (minRadius_ft - Radius_ft) * fineDollarsPerFt, if(tooBig == 'true', (Radius_ft - maxRadius_ft) * fineDollarsPerFt, '0.0'))
p03NameNew column name
SearchTermNew formula

In place of the original "false" expression (0.0), the above adds the test for the too-big values, so that all fines are included in a single column. You can reformat the fine_Dollars column to be in dollar format:

D trans
RawWrangletrue
Typestep
WrangleTextset col: fine_Dollars value: NUMFORMAT(fine_Dollars, '$###.00')
p01NameColumns
p01Valuefine_Dollars
p02NameFormula
p02ValueNUMFORMAT(fine_Dollars, '$###.00')
SearchTermEdit column with formula

Results:

After you delete the columns used in the calculation and move the remaining ones, you should end up with a dataset similar to the following:

LocationfineDollarsPerFtRadius_ftminRadius_ftminInclusivemaxRadius_ftmaxInclusivefineDollars
House11555.510Y25N$457.50
House2151210Y25N$0.00
House31514.2510Y25N$0.00
House4153.510Y25N$97.50
House5152710Y25N$30.00

Now that you have created all of the computations for generating these values, you can change values for minRadius_ft , maxRadius_ft , and fineDollarsPerFt to analyze the resulting fine revenue. Before or after the transform where you set the value for fineDollarsPerFt, you can insert something like the following:

D trans
RawWrangletrue
Typestep
WrangleTextset col: minRadius_ft value:'12.5'
p01NameColumns
p01ValueminRadius_ft
p02NameFormula
p02Value'12.5'
SearchTermEdit column with formula

After the step is added, select the last line in the recipe. Then, you can see how the values in the fineDollars column have been updated.

D s also
labelexample_comparison_functions2