Special functions

     

    Function

    Description

    String[] comments()

    Return array of text inside comments.

    String[] commentsDetails()

    Returns array of comments in format datetime + text, e.g.: 216-08-12T15:24:22.486;text.

    void filter(String filterExpression, { expression } )

    Evaluates the passed expression with the specified filter. For example:

    Double aggregatePrevLevel(int countOfPrevlevels, { expression } )

    Returns the aggregated value of the embedded expression. The aggregation is computed for the specified upper level. For example:

    DoublefirstValue()

    Returns the lowest value of selectedofselectedlevel(measure). For example:

     DatefirstValue('L_DATE')
    Project11/1/20151/1/2015
    Project15/1/20151/1/2015
    Project23/1/20153/1/2015
    Project28/1/20153/1/2015
    Double forEachRow('expression')

    Computes the expression on data set row level and calculates the sum from particular results. Following example shows the difference of using multiplication within the forEachRow() method and outside:

     

     

    Ind1

    Ind2

    forEachRow('M_IND_1 * M_IND_2')

    M_IND_1 * M_IND_2

    Member

     

    5

    30

    80

    150

     

    DrillDownMember1

    3

    20

    60

    60

     

    DrillDownMember2

    2

    10

    20

    20

    Double forEachRow('expression','aggregation')Computes the expression on data set row level and calculates the aggreagation based on second parameter from particular results. Aggregation can include SUM, MIN, MAX, AVG, COUNT, DCOUNT.
    DoubleformatNumber(number value)Formatsthevalueaccordingtheindicator'sformat from settings.
    DoubleformatNumber(number value, 'String pattern')Formatsthevalueaccordingtheindicator'sformat from settings. String pattern allows you to control, how the format specified.
    DoublelastValue()

    Returns the lowest value of selected of selected level (measure). For example:

    ProjectDatelastValue('L_DATE')
    Project11/1/20155/1/2015
    Project15/1/20155/1/2015
    Project23/1/20157/1/2015
    Project27/1/20157/1/2015


    void eachMember(String attribute) { expression }

    Computes the expression for particular attribute values defined by attribute parameter.

    L_ATTRIBUTE_1

    L_ATTRIBUTE_2

    Ind1

    Ind2

    def result = 0

    eachMember('L_ATTRIBUTE_2') { result = M_IND_1 * M_IND_2 }

    return result

    M_IND_1 * M_IND_2

    Value

     

    5

    30

    80

    150

     

    Value1

    3

    20

    60

    60

     

    Value2

    2

    10

    20

    20

    Refer to Formula best practices for correct usage.

    Double members(String path, { expression } )

    Computes the expression for desired drill-down member values. Example:

    This example returns the value of indicator M_NAME_1 aggregated for specified members.

    Refer to Formula best practices for correct usage.

    Double membersSum({ expression } )

    Computes the expression for particular members and calculates the sum from particular results. Following example shows the difference of using multiplication within the membersSum() method and outside:

     

     

    Ind1

    Ind2

    membersSum( { M_IND_1 * M_IND_2 } )

    M_IND_1 * M_IND_2

    Member

     

    5

    30

    80

    150

     

    DrillDownMember1

    3

    20

    60

    60

     

    DrillDownMember2

    2

    10

    20

    20

    Refer to Formula best practices for correct usage.

    Double membersSum(String levelCode, { expression } )

    Computes the expression for particular members of the defined levelCode and calculatesthesumfrom particular results.

    Refer to Formula best practices for correct usage.

    Double membersAvg({ expression } )

    Computes the expression for particular members and calculates the average value from particular results.

    Refer to Formula best practices for correct usage.

    Double membersAvg(String levelCode, { expression } )

    Computes the expression for particular members of the defined levelCode and calculates the average value from particular results.

    Refer to Formula best practices for correct usage.

    Double membersMin({ expression } )

    Computes the expression for particular members and calculates the minimal value from particular results.

    Refer to Formula best practices for correct usage.

    Double membersMin(String levelCode, { expression } )

    Computes the expression for particular members of the defined levelCode and calculates the minimal value from particular results.

    Refer to Formula best practices for correct usage.

    Double membersMax({ expression } )

    Computes the expression for particular members and calculates the maximum value from particular results.

    Refer to Formula best practices for correct usage.

    Double membersMax(String levelCode, { expression } )

    Computes the expression for particular members of the defined levelCode and calculates the maximum value from particular results.

    Refer to Formula best practices for correct usage.

    Double dateAttribute(String levelCode){ expression }

     

    Computes the expression for particular members of the defined levelCode on defined dates.

    Double timeAttribute(String levelCode){ expression }

    Computes the expression for particular members of the defined levelCode on defined time.

    String attributeCode()

    Returns the attribute code of current member. Example:

     

    Population

    attributeCode()

    Prague

    1200000

    L_CITY

    Berlin

    3000000

    L_CITY

    London

    7825200

    L_CITY

    String localize(String attributeCode, String valueToLocalize) 
    String localize(String dataSetCode, String attributeCode, String valueToLocalize);

    Method to load translations from referenced data set.

    String memberIdentifier()

    Returns the attribute code and value of current member in following form [L_CODE={VALUE}]. Example:

     

    Population

    memberIdentifier()

    Prague

    1200000

    [L_CITY= {Prague}]

    Berlin

    3000000

    [L_CITY= {Berlin}]

    London

    7825200

    [L_CITY= {London}]

    String memberValue()

    Returns the value of current member. Example:

     

    Population

    memberValue()

    Prague

    1200000

    Prague

    Berlin

    3000000

    Berlin

    London

    7825200

    London

    printComments()
    Returns formatted text of comments. No need to iterate over it.

    rank() { expression }

    Returns numerical order (rank) of the indicatorappliedintheexpression within used drill-down. Example:

    User

    Score

    rank()

    Peter

    90.3

    2

    John

    92.7

    1

    Anna

    89.7

    3

    rank('L_DRILLDOWN', 'M_INDICATOR')

    Rank will calculate over specific drill down.

    rank('L_DRILLDOWN', 'MEMBER', 'M_INDICATOR')

    Rank will calculate over specific drill down and member


    rankInner() { expression }

    Returns numerical order (rank - ascending) of the indicator applied in the expression within all used drill-downs in the table. Example:

    Drill-downSalesrankInner()
    Coffee750001
    - Caffe Latte250003
    - Caffe Mocca350002

    - Decaf Espresso

    150001
    Tea1000002
    - Lemon1000001
    rankInner(true) { expression }

    Returns numerical order (rank - descending) of the indicator applied in the expression within all used drill-downs in the table. Example:

    Drill-downSalesrankInner(true)
    Coffee750002
    - Caffe Latte250002
     - Caffe Mocca350001
    - Decaf Espresso150003
    Tea1000001
    - Lemon1000001
    setDebugOn(true)

    Enables debug mode. Ifformulacontains error, table cell will contain detailed stacktraceabouterror,chartandKPIlabel won't be rendered and error detail will be printed out.

    We recommendto usethis function only while debugging. If not debugging, delete or mark it ascomment:

    //setDebugOn(true)
    withoutDateTime() { expression }

    Opt-out from applied Date and Time intervals. Example:

    Date

    M_INDICATOR

    withoutDateTime() { M_INDICATOR }

    1/12 - 12/12

    1000

    3000

    1/1/2013 - 1/31/2013

    100

    3000

    withoutDrillDown() { expression }

    Opt-out from applied Drill-downs. Example:

    Country

    M_INDICATOR

    withoutDrillDown() { M_INDICATOR }

    +UK

    3000

    3000

    --London

    1000

    3000

    --Manchester

    1000

    3000

    --Oxford

    1000

    3000

    In cases, whentherearemultipledrill-downsappliedinthetable, some of the drill-downs can be excluded from the withoutDrillDownFunction function (the aggregation for the upper level will be displayed).

    Country

    City

    M_INDICATOR

    withoutDrillDown('L_CITY') { M_INDICATOR }

    UK

    Manchester

    3000

    4000

    UK

    London

    1000

    4000

    France

    Paris

    1000

    2000

    France

    Nice

    1000

    2000

    withoutFilter() { expression }

     

    Opt-out from applied filters. Example: (Filter is set to SEGMENT=SMB)

    City

    M_INDICATOR

    withoutFilter() { M_INDICATOR }

    Paris

    1000

    3000

    London

    900

    3000

    Berlin

    1100

    3000

    withoutReportFilter() { expression }
     Only view filter and indicator filter will be applied (available since BellaDati 2.9.4).
    withoutViewFilter() { expression }
    Only report filter and indicator filter will be applied (available since BellaDati 2.9.4).
    loadData('L_DRILLDOWN', 'M_INDICATOR')

    Allowstoloadvaluesof an indicator for all members of specifiedattribute. it can greatly improve the performance of formulas. The function returna map of members and their values. This map can be accessed by using function getMapValue()

     

    The memberId has to have following format: [memberId] = [L_ATTRIBUTE={Value}]. Usually, the function is used toghether with withoutDrillDown().

    It also possible to use rank or aggregation such as MAX, MIN etc.:

     

    Instead of indicator, users can also retrieve first of last value of an attribute.

    Passing parameters to time formula

    It is possible to define the time entry by formula. Following functions are applicable for these kind of formulas only.

    Function

    Description

    void set(String name, Object value)

    Sets the parameter value.

    Object get(String name)

    Loads the parameter value.

    Object indicator()

    Returns indicator from the context of the row of current table. This function returns also values of formula defined indicators (defined in report). Example:

    Consider following example - we have several indicators with codes M_NAME_1, M_NAME_2 and M_NAME_3. These indicators are used in formulas 1 - 3. The time area is defined by time formulas 1 - 5.

     

    Time formula 1:
    M_NAME_1

    Time formula 2:
    M_NAME_2

    Time formula 3:
    M_NAME_3

    Time formula 4:
    s = get('suffix');
    return value('M_NAME' + s);

    Time formula 5:
    value(actualYear(),
    'now-1m',indicator())

    Formula 1:
    set('suffix', '_1');
    return M_NAME_1;

    1000

    2000

    3000

    1000

    1000

    Formula 2:
    set('suffix', '_2');
    return M_NAME_2;

    1000

    2000

    3000

    2000

    2000

    Formula 3:
    set('suffix', '_3');
    return M_NAME_3;

    1000

    2000

    3000

    3000

    3000

    M_NAME_1

    1000

    2000

    3000

    N/A

    1000

    M_NAME_2

    1000

    2000

    3000

    N/A

    2000

    M_NAME_3

    1000

    2000

    3000

    N/A

    3000

    Getting User Information

    It is possible to obtain information about logged in user for your reporting needs.

    FunctionDescription
    String getSignedUserName()Returns name of currently signed in user.
    String getSignedUserSurname()Returns surname of currently signed in user.
    String getSignedUserEmail()Returns email of currently signed in user.
    String getSignedUser()Returns username of currently signed in user.

    Working with lists and arrays

    BellaDati supports all Arrays from https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html and ArrayUtils from https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html.

    Syntax: first define name of the package, then use desired method.

    Example:

    def int[] a = [1,2,3]
    a = ArrayUtils.add(a, 0)
    Arrays.sort(a)
    return a[3]

    Next Steps