Panel |
---|
Please see the Pentaho InfoCenter for the latest version of this document: http://infocenter.pentaho.com/help/topic/pme_user_guide/concept_pme_metadata_formulas.html |
Formula Overview
Formulas have two multiple uses in Pentaho Metadata.
...
The second use is in the definition of Physical Table Columns. In addition to Physical table columns mapping directly to a database table column, physical table columns defined in Pentaho Metadata may also be defined as a formula. This allows for combining of multiple columns into a single column, and also for doing more advanced aggregate calculations within aggregate table definitions.
The third use is in the definition of complex joins within business model relationships. This allows for multiple key joins as well as other logic when joining tables.
The fourth use is row level security.
Under the covers, Pentaho Metadata uses JFreeReport's libFormula package for interpreting formulas. The goal is to support OpenFormula syntax within the Metadata environment. Formulas are first interpreted by libFormula, and then within the Metadata system are converted to native SQL depending on the type of database used.
...
The references here specifically refer to the database column, not derived physical column definitions. All operators and functions may be used in the definition of the physical table column. One special note, in order for this formula to be recognized, the "isExact" property of the physical table column must be set to true. Also note, the referenced physical column must be explicitly defined in the metadata model.
Recent Changes to Physical Table Column Formulas
In earlier versions of Pentaho Metadata Editor, (post prior to the CITRUS release), Aggregation aggregation functions needed had to be specified explicitly specified as well as selecting the Aggregation rule. and the aggregation rule had to be selected. This is no longer necessary, ; the query that is generated will use the selected aggregation rule when executingduring execution. See Defining the Physical Column Aggregations for more information.
Multi-table expressions: Formulas can use any business column in the model
Since the latest versions (after 2008/03/14) it is possible to define formulas that use business columns from anywhere in the business model.
For example suppose we have 2 two business tables:
- Orders (fact table), ID=BT_ORDER_FACT
- Product (dimension), ID=BT_PRODUCT
...
Code Block |
---|
[<PHYSICAL_COLUMN_NAME>] |
MQL Parameter References:
Code Block |
---|
[param:PARAM_NAME]
|
Supported Functions
Function Name | Parameters | Description | Example | |
---|---|---|---|---|
OR | 2 two or more boolean expression parameters | Returns true if one or more parameters are true | OR( | |
AND | 2 two or more boolean expression parameters | Returns true if all parameters are true | AND( | |
LIKE | 2 two parameters | Compares a column to a regular expression, using "%" as wild cards | LIKE([BT_CUSTOMERS.BC_CUSTOMERS_CUSTOMERNAME]; "%SMITH%") | |
CONTAINS | two parameters | Determines if a column contains a string. | IN | 2 CONTAINS([BT_CUSTOMERS.BC_CUSTOMERS_CUSTOMERNAME]; "SMITH") |
BEGINSWITH | two parameters | Determines if a column begins with a string. | BEGINSWITH([BT_CUSTOMERS.BC_CUSTOMERS_CUSTOMERNAME]; "JOE") | |
ENDSWITH | two parameters | Determines if a column ends with a string. | ENDSWITH([BT_CUSTOMERS.BC_CUSTOMERS_CUSTOMERNAME]; "SMITH") | |
IN | two or more parameters | Checks to see if the first parameter is in the following list of parameters | IN([BT_CUSTOMERS.BC_CUSTOMERS_CUSTOMERNAME]; "Adam Smith"; "Brian Jones") | |
NOW | none | The current date | NOW() | |
DATE | 3 three numeric parameters, year, month, and day | A specified date | DATE(2008;4;15) | |
DATEVALUE | 1 one text parameter "year-month-day" | A specified date | DATEVALUE("2008-04-15") | |
CASE | 2 two or more parameters | Evaluates the first, third, etc parameter, and returns the second, fourth, etc parameter value | CASE( | |
COALESCE | 1 one or more parameters | returns the first non null parameter | COALESCE( | |
DATEMATH | 1 one expression parameter | returns a date based on an expression. Important note - this does NOT return a timestamp irrespective of the implementation details mentioned in the description to the right.DateMath Javadoc for full syntax | DATEMATH("0:ME -1:DS") - 00:00:00.000 of the day before the last day of the current month | |
ISNA | one parameter | returns true if the value is null | ISNA([BT_CUSTOMERS.BC_CUSTOMERS_CUSTOMERID]) | |
NULL | none | returns the null value | NULL() | |
TRUE | none | returns true | TRUE() | |
FALSE | none | returns false | FALSE() |
- see below for aggregate functions
...