Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Removed translated content for 'zh'
Sv translation
languageen

Special functions


Function

Description

String[] comments()

Return array of text inside comments.

Code Block
ArrayUtils.toString(comments())


String[] commentsDetails()

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

Code Block
ArrayUtils.toString(commentsDetails())


void filter(String filterExpression, { expression } )

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

Code Block
filter('M_MEASURE > 100') { L_ID_COUNT } 


Double aggregatePrevLevel(int countOfPrevlevels, { expression } )

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

Code Block
total = aggregatePrevLevel(1, {
  cumulateFromTime(actualYear(), {
    'M_NAME_1' + 'M_NAME_2'
  });
});
current = cumulateFromTime(actualYear(), {
    'M_NAME_1' + 'M_NAME_2'
});
return current / total;


Double firstValue()

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

Section


Column



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:

Section


Column




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 aggregation based on the second parameter from particular results. Aggregation can include SUM, MIN, MAX, AVG, COUNT, DCOUNT.
Double formatNumber(number value)Formats the value according to the indicator's format from settings.
Double formatNumber(number value, 'String pattern')Formats the value according to the indicator's format from settings. String pattern allows you to control, how the format specified.
Double lastValue()

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

Section


Column


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.

Section


Column


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:

Code Block
return members('[L_LEVEL_1=VAL][L_LEVEL_2="VAL1,VAL2"]', {
M_NAME_1 * M_NAME_2
})

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:

Section


Column




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.

Code Block
dateAttribute('L_DATE') {dateInterval('2014-01-01','2014-12-01') { 'M_NAME_1' + 'M_NAME_2' } }


Double timeAttribute(String levelCode){ expression }

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

Code Block
timeAttribute('L_TIME') {timeInterval('10:00:00','12:00:00') { 'M_NAME_1' + 'M_NAME_2' } }


String attributeCode()

Returns the attribute code of current member. Example:

Section


Column



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.

Code Block
languagejava
localize('TRANSLATIONS', 'L_ORIG', firstValue('L_STATE'));


String memberIdentifier()

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

Section


Column



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:

Section


Column



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:

Section


Column


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

Code Block
languagegroovy
withoutFilter() {
	rank('L_CITY', 'Aberdeen', 'M_VISITS')
}


rankInner() { expression }

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

Section


Column


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:

Section


Column


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




setDebugOn(true)

Enables debug mode. Ifformulacontains error, table cell will contain detailed stack trace about error, chart and KPI label won't be rendered and error detail will be printed out.

We recommend using this function only while debugging. If not debugging, delete or mark it as comment:

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

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

Section


Column


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:

Section


Column


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).

Section


Column


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)

Section


Column


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).

Since BellaDati 2.9.17, you can indicate which filter should be ignored by their codes

Code Block
withoutReportFilter('code1','code2')


withoutViewFilter() { expression }

Only report filter and indicator filter will be applied (available since BellaDati 2.9.4).

Since BellaDati 2.9.17, you can indicate which filter should be ignored by their codes

Code Block
withoutViewFilter('code1','code2')


loadData('L_DRILLDOWN', 'M_INDICATOR')

Allows to load values of 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()


Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR')
getMapValue(data, '[memberId]')

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

Code Block
languagegroovy
withoutDrillDown() { 
data = loadData('L_COUNTRY', 'M_NUMBERS_BUILT')
getMapValue(data, '[L_COUNTRY={Germany}]')
  }

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

Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR_rank()')
getMapValue(data, '[memberId]') //will return M_INDICATOR_rank() 


Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR@MAX')
getMapValue(data, '[memberId]') //will return the highest value of indicator


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

Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'L_ATTRIBUTE_LASTVALUE')


Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'L_ATTRIBUTE_FIRSTVALUE')


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:

Code Block
value(actualYear(),'actualMonth - 1m - 1d',indicator())


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.

FunctionDescriptionResponse example
String getSignedUserName()Returns name of currently signed-in user.John
String getSignedUserSurname()Returns surname of currently signed-in user.Smith
String getSignedUserEmail()Returns email of currently signed-in user.support@belladati.com
String getSignedUser()Returns username of currently signed-in user.JohnSmith
String getSignedUserTimezone()Returns time zone of currently signed-in user as a stringEurope/Prague

Double getSignedUserTimezoneOffset()

Returns time zone offset of currently signed-in user as a number2
String getSignedUserAdditionalInfo()Returns additional information of currently signed-in user.Employee
Double getSignedUserID()Returns ID of currently signed-in user.35
Strung getSignedUserLanguage()Returns chosen language of currently signed-in user.en

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

Sv translation
languageja

特別な関数


関数

説明

String[] comments()

コメント内のテキストの配列を返します。

Code Block
ArrayUtils.toString(comments())


String[] commentsDetails()

日付時刻+テキスト形式のコメントの配列を返します。例: 216-08-12T15:24:22.486;text.

Code Block
ArrayUtils.toString(commentsDetails())


void filter(String filterExpression, { expression } )

指定されたフィルターでパスされた式を評価します。例:

Code Block
filter('M_MEASURE > 100') { L_ID_COUNT } 


Double aggregatePrevLevel(int countOfPrevlevels, { expression } )

埋め込み式の集計値を返します。指定された上位レベルの集計が計算されます。例:

Code Block
total = aggregatePrevLevel(1, {
  cumulateFromTime(actualYear(), {
    'M_NAME_1' + 'M_NAME_2'
  });
});
current = cumulateFromTime(actualYear(), {
    'M_NAME_1' + 'M_NAME_2'
});
return current / total;


Double firstValue()

選択したレベル(方法)の最低値を返します。例:

Section


Column



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')

データセットの行レベルで式を計算し、特定の結果から合計を計算します。以下の例は、forEachRow()メソッド内と外部とで掛け算をすることの違いを表しています:

Section


Column




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')

データセットの行レベルで式を計算し、特定の結果の2番目のパラメーターに基づいて集計を計算します。集計には、SUM、MIN、MAX、AVG、COUNT、DCOUNTを含めることができます。

Double formatNumber(number value)

設定からインジケータのフォーマットに従って値をフォーマットします。

Double formatNumber(number value, 'String pattern')

設定からインジケータのフォーマットに従って値をフォーマットします。文字列パターンを使用すると、形式の指定方法を制御できます。

Double lastValue()

選択したレベル(方法)の最大値を返します。例:

Section


Column


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 }

属性パラメーターによって定義された特定の属性値の式を計算します。

Section


Column


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


5

30

80

150


Value1

3

20

60

60


Value2

2

10

20

20



正しい使用法については、Formula best practicesを参照して下さい。

Double members(String path, { expression } )

目的のドリルダウンメンバー値の式を計算します。例:

Code Block
return members('[L_LEVEL_1=VAL][L_LEVEL_2="VAL1,VAL2"]', {
M_NAME_1 * M_NAME_2
})

この例では、指定されたメンバーについて集計されたインジケータM_NAME_1の値を返します。

正しい使用法については、Formula best practicesを参照して下さい。

Double membersSum({ expression } )

特定のメンバーの式を計算し、特定の結果から合計を計算します。以下の例は、membersSum()メソッド内と外部とで掛け算をすることの違いを表しています:

Section


Column




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



正しい使用法については、Formula best practicesを参照して下さい。

Double membersSum(String levelCode, { expression } )

定義されたlevelCodeの特定のメンバーの式を計算し、特定の結果から合計を計算します。

正しい使用法については、Formula best practicesを参照して下さい。

Double membersAvg({ expression } )

特定のメンバーの式を計算し、特定の結果から平均値を計算します。

正しい使用法については、Formula best practicesを参照して下さい。

Double membersAvg(String levelCode, { expression } )

定義されたlevelCodeの特定のメンバーの式を計算し、特定の結果から平均値を計算します。

正しい使用法については、Formula best practicesを参照して下さい。

Double membersMin({ expression } )

特定のメンバーの式を計算し、特定の結果から最小値を計算します。

正しい使用法については、Formula best practicesを参照して下さい。

Double membersMin(String levelCode, { expression } )

定義されたlevelCodeの特定のメンバーの式を計算し、特定の結果から最小値を計算します。

正しい使用法については、Formula best practicesを参照して下さい。

Double membersMax({ expression } )

特定のメンバーの式を計算し、特定の結果から最大値を計算します。

正しい使用法については、Formula best practicesを参照して下さい。

Double membersMax(String levelCode, { expression } )

定義されlevelCode特定のメンバーの式を計算し、特定の結果から最大値を計算します。

正しい使用法については、Formula best practicesを参照して下さい。

Double dateAttribute(String levelCode){ expression }


定義された日付に、定義されたlevelCodeの特定のメンバーの式を計算します。

Code Block
dateAttribute('L_DATE') {dateInterval('2014-01-01','2014-12-01') { 'M_NAME_1' + 'M_NAME_2' } }


Double timeAttribute(String levelCode){ expression }

定義された時間に、定義されlevelCode特定のメンバーの式を計算します。

Code Block
timeAttribute('L_TIME') {timeInterval('10:00:00','12:00:00') { 'M_NAME_1' + 'M_NAME_2' } }


String attributeCode()

現在のメンバーの属性コードを返します。例:

Section


Column



人口

attributeCode()

プラハ

1200000

L_CITY

ベルリン

3000000

L_CITY

ロンドン

7825200

L_CITY




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

参照データセットから翻訳をロードする方法。

Code Block
languagejava
localize('TRANSLATIONS', 'L_ORIG', firstValue('L_STATE'));


String memberIdentifier()

[L_CODE = {VALUE}]の形式で現在のメンバーの属性コードと値を返します。例:

Section


Column



人口

memberIdentifier()

プラハ

1200000

[L_CITY= {プラハ}]

ベルリン

3000000

[L_CITY= {ベルリン}]

ロンドン

7825200

[L_CITY= {ロンドン}]




String memberValue()

現在のメンバーの値を返します。例:

Section


Column



人口

memberValue()

プラハ

1200000

プラハ

ベルリン

3000000

ベルリン

ロンドン

7825200

ロンドン




printComments()

コメントの書式付きテキストを返します。それを繰り返す必要はありません。

rank() { expression }

使用されたドリルダウン内の式に適用されるインジケータの番号順(ランク)を返します。例:

Section


Column


ユーザー

スコア

rank()

ピーター

90.3

2

ジョン

92.7

1

アンナ

89.7

3




rank('L_DRILLDOWN', 'M_INDICATOR')

ランクは特定のドリルダウンで計算されます。

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

ランクは特定のドリルダウンとメンバーについて計算します。

Code Block
languagegroovy
withoutFilter() {
	rank('L_CITY', 'Aberdeen', 'M_VISITS')


rankInner() { expression }

表で使用されているすべてのドリルダウン内の式に適用されているインジケータの番号順(ランク-昇順)を返します。例:

Section


Column



ドリルダウン売上rankInner()
コーヒー750001
カフェラテ250003
カフェモカ350002
ディカフェエスプレッソ150001
紅茶1000002
レモン1000001




rankInner(true) { expression }

表で使用されているすべてのドリルダウン内の式に適用されているインジケータの数値順(ランク-降順)を返します。例:

Section


Column


ドリルダウン売上rankInner(true)
コーヒー750002
カフェラテ250002
カフェモカ350001
ディカフェエスプレッソ150003
紅茶1000001
レモン1000001




setDebugOn(true)

デバッグモードを有効にします。式にエラーが含まれる場合、表セルにはエラーに関する詳細なスタックトレースが含まれ、チャートとKPIラベルはレンダリングされず、エラーの詳細が出力されます。

この関数は、デバッグ中にのみ使用することをお勧めします。デバッグしていない場合は、削除するかコメントとしてマークします:

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

適用された日付と時間間隔から脱退します。:

Section


Column


日付

M_INDICATOR

withoutDateTime() { M_INDICATOR }

1/12 - 12/12

1000

3000

1/1/2013 - 1/31/2013

100

3000




withoutDrillDown() { expression }

適用されたドリルダウンから脱退します。例:

Section


Column


M_INDICATOR

withoutDrillDown() { M_INDICATOR }

+イギリス

3000

3000

--ロンドン

1000

3000

--マンチェスター

1000

3000

--オックスフォード

1000

3000



場合によっては、複数のドリルダウンが適用可能な場合、一部のドリルダウンをwithoutDrillDownFunction関数から除外できます(上位レベルの集計が表示されます)。

Section


Column


都市

M_INDICATOR

withoutDrillDown('L_CITY') { M_INDICATOR }

イギリス

マンチェスター

3000

4000

イギリス

ロンドン

1000

4000

フランス

パリ

1000

2000

フランス

ニース

1000

2000




withoutFilter() { expression }


適用されたフィルターから脱退します。例: (フィルターはSEGMENT=SMBに設定)

Section


Column


都市

M_INDICATOR

withoutFilter() { M_INDICATOR }

パリ

1000

3000

ロンドン

900

3000

ベルリン

1100

3000




withoutReportFilter() { expression }

ビューフィルターとインジケータフィルターのみが適用されます(BellaDati 2.9.4以降で使用可能)。

BellaDati 2.9.17以降、どのフィルターをコードで無視するかを指定できます。

Code Block
withoutReportFilter('code1','code2')


withoutViewFilter() { expression }

レポートフィルターとインジケータフィルターのみが適用されます(BellaDati 2.9.4以降で使用可能)。

BellaDati 2.9.17以降、どのフィルターをコードで無視するかを指定できます。

Code Block
withoutViewFilter('code1','code2')


loadData('L_DRILLDOWN', 'M_INDICATOR')

指定された属性のすべてのメンバーのインジケータの値をロードできます。数式のパフォーマンスを大幅に改善できます。関数は、メンバーとその値のマップを返します。このマップには、getMapValue()関数を使用してアクセスできます。


Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR')
getMapValue(data, '[memberId]')

memberIdの形式は以下である必要があります: [memberId] = [L_ATTRIBUTE={Value}]。通常、この関数はwithoutDrillDown()とともに使用されます。

Code Block
languagegroovy
withoutDrillDown() { 
data = loadData('L_COUNTRY', 'M_NUMBERS_BUILT')
getMapValue(data, '[L_COUNTRY={Germany}]')
  }

MAX、MINなどのランクや集計を使用することもできます:

Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR_rank()')
getMapValue(data, '[memberId]') //will return M_INDICATOR_rank() 


Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR@MAX')
getMapValue(data, '[memberId]') //will return the highest value of indicator


インジケータの代わりに、ユーザーは属性の最後から最初の値を取得することもできます。

Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'L_ATTRIBUTE_LASTVALUE')


Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'L_ATTRIBUTE_FIRSTVALUE')



時間式にパラメーターを渡す

数式で時間入力を定義することができます。次の関数は、これらの種類の数式にのみ適用できます。

関数

説明

void set(String name, Object value)

パラメーター値を設定します。

Object get(String name)

パラメーター値をロードします。

Object indicator()

現在の表の行のコンテキストからインジケータを返します。この関数は、式で定義されたインジケータ(レポートで定義)の値も返します。例:

Code Block
value(actualYear(),'actualMonth - 1m - 1d',indicator())


次の例を検討してください - コード M_NAME_1M_NAME_2, M_NAME_3といくつかのインジケータがあります。これらのインジケータは、式1-3で使用されます。時間領域は、時間式1-5によって定義されます。


時間式 1:
M_NAME_1

時間式 2:
M_NAME_2

時間式 3:
M_NAME_3

時間式 4:
s = get('suffix');
return value('M_NAME' + s);

時間式 5:
value(actualYear(),
'now-1m',indicator())

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

1000

2000

3000

1000

1000

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

1000

2000

3000

2000

2000

数式 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

ユーザー情報の取得

レポートのニーズに応じて、ログインユーザーの情報を取得することができます。

関数説明レスポンス例
String getSignedUserName()現在サインインしているユーザーの名前を返します。John
String getSignedUserSurname()現在サインインしているユーザーの名字を返します。Smith
String getSignedUserEmail()現在サインインしているユーザーのメールアドレスを返します。support@belladati.com
String getSignedUser()現在サインインしているユーザーのユーザー名を返します。JohnSmith
String getSignedUserTimezone()現在サインインしているユーザーのタイムゾーンを、文字列として返します。Europe/Prague

Double getSignedUserTimezoneOffset()

現在サインインしているユーザーのタイムゾーンオフセットを、数値として返します2
String getSignedUserAdditionalInfo()現在サインインしているユーザーの追加情報を返します。Employee
Double getSignedUserID()現在サインインしているユーザーのIDを返します。35
Strung getSignedUserLanguage()現在サインインしているユーザーの選択言語を返します。en


リストと配列の使用

BellaDati
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html のすべての配列
https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html ArrayUtils
に対応しています。

構文: 最初にパッケージの名前を定義してから、目的の方法を使用します。

例:

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

次に

Sv translation
languagede

Sonderfunktionen

 

Function

Beschreibung

String[] comments()

Gibt ein Array von Text innerhalb von Kommentaren zurück.

Code Block
ArrayUtils.toString(comments())
String[] commentsDetails()

Liefert ein Array von Kommentaren im Format datetime + text, z.B.: 216-08-12T15:24:22.486;text.

Code Block
ArrayUtils.toString(commentsDetails())

void filter(String filterExpression, { expression } )

Bewertet den übergebenen Ausdruck mit dem angegebenen Filter. Zum Beispiel:

Code Block
filter('M_MEASURE > 100') { L_ID_COUNT } 

Double aggregatePrevLevel(int countOfPrevlevels, { expression } )

Liefert den aggregierten Wert des eingebetteten Ausdrucks. Die Aggregation wird für die angegebene obere Ebene berechnet. Zum Beispiel:

Code Block
total = aggregatePrevLevel(1, {
  cumulateFromTime(actualYear(), {
    'M_NAME_1' + 'M_NAME_2'
  });
});
current = cumulateFromTime(actualYear(), {
    'M_NAME_1' + 'M_NAME_2'
});
return current / total;
Double firstValue()

Liefert den niedrigsten Wert der ausgewählten Ebene (Messung). Zum Beispiel:

Section
Column
 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')

Berechnet den Ausdruck auf Datasetzeilebene und berechnet die Summe aus bestimmten Ergebnissen. Das folgende Beispiel zeigt den Unterschied der Verwendung von Multiplikation innerhalb der forEachRow()-Methode und außerhalb:

Section
Column

 

 

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')Berechnet den Ausdruck auf Datasetebene und berechnet die Aggregation basierend auf dem zweiten Parameter aus bestimmten Ergebnissen. Die Aggregation kann Summen, MIN, MAX, AVG, COUNT, DCOUNT beinhalten.
Double formatNumber(number value)Formatiert den Wert entsprechend dem Format des Indikators aus den Einstellungen.
Double formatNumber(number value, 'String pattern')Formatiert den Wert entsprechend dem Format des Indikators aus den Einstellungen. Mit dem Zeichenkettenmuster können Sie steuern, wie das angegebene Format aussieht.
Double lastValue()

Liefert den niedrigsten Wert der ausgewählten Ebene (Messwert). Zum Beispiel:

Section
Column
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 }

Berechnet den Ausdruck für bestimmte Attributwerte, die durch den Attributparameter definiert sind.

Section
Column

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

Lesen Sie die besten besten Praktiken der Formel für die korrekte Verwendung.

Double members(String path, { expression } )

Berechnet den Ausdruck für die gewünschten Drill-Down-Memberwerte. Beispiel:

Code Block
return members('[L_LEVEL_1=VAL][L_LEVEL_2="VAL1,VAL2"]', {
M_NAME_1 * M_NAME_2
})

Dieses Beispiel gibt den Wert des Kennzeichens M_NAME_1 zurück, das für bestimmte Werte aggregiert wurde.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersSum({ expression } )

Berechnet den Ausdruck für bestimmte Werte und berechnet die Summe aus bestimmten Ergebnissen. Das folgende Beispiel zeigt den Unterschied der Verwendung von Multiplikation innerhalb der membersSum()-Methode und außerhalb:

Section
Column

 

 

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

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersSum(String levelCode, { expression } )

Berechnet den Ausdruck für bestimmte Werte des definierten LevelCodes und berechnet die Summe aus bestimmten Ergebnissen.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersAvg({ expression } )

Berechnet den Ausdruck für bestimmte Werte und berechnet den Durchschnittswert aus bestimmten Ergebnissen.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersAvg(String levelCode, { expression } )

Berechnet den Ausdruck für bestimmte Werte des definierten LevelCodes und berechnet den Durchschnittswert aus bestimmten Ergebnissen.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersMin({ expression } )

Berechnet den Ausdruck für bestimmte Werte und berechnet den Minimalwert aus bestimmten Ergebnissen.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersMin(String levelCode, { expression } )

Berechnet den Ausdruck für bestimmte Werte des definierten LevelCodes und berechnet den Minimalwert aus bestimmten Ergebnissen.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersMax({ expression } )

Berechnet den Ausdruck für bestimmte Werte und berechnet den Maximalwert aus bestimmten Ergebnissen.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double membersMax(String levelCode, { expression } )

Berechnet den Ausdruck für bestimmte Werte des definierten levelCode und berechnet den Maximalwert aus bestimmten Ergebnissen.

Lesen Sie die besten Praktiken der Formel für die korrekte Verwendung.

Double dateAttribute(String levelCode){ expression }

 

Berechnet den Ausdruck für bestimmte Werte des definierten levelCode an definierten Daten.

Code Block
dateAttribute('L_DATE') {dateInterval('2014-01-01','2014-12-01') { 'M_NAME_1' + 'M_NAME_2' } }
Double timeAttribute(String levelCode){ expression }

Berechnet den Ausdruck für bestimmte Werte des definierten levelCode zur definierten Zeit.

Code Block
timeAttribute('L_TIME') {timeInterval('10:00:00','12:00:00') { 'M_NAME_1' + 'M_NAME_2' } }

String attributeCode()

Returns the attribute code of current member. Example:

Section
Column

 

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);

Verfahren zum Laden von Übersetzungen aus einem referenzierten Dataset.

Code Block
languagejava
localize('TRANSLATIONS', 'L_ORIG', firstValue('L_STATE'));

String memberIdentifier()

Liefert den Attributcode und den Wert des aktuellen Elements in der folgenden Form[L_CODE={VALUE}]. Beispiel:

Section
Column

 

Population

memberIdentifier()

Prague

1200000

[L_CITY= {Prague}]

Berlin

3000000

[L_CITY= {Berlin}]

London

7825200

[L_CITY= {London}]

String memberValue()

Liefert den Wert des aktuellen Elements. Beispiel:

Section
Column

 

Population

memberValue()

Prague

1200000

Prague

Berlin

3000000

Berlin

London

7825200

London

printComments()
Liefert formatierten Text von Kommentaren. Es ist nicht nötig, darüber zu iterieren.

rank() { expression }

Liefert die numerische Reihenfolge (Rang) des Indikators, der auf den Ausdruck innerhalb der verwendeten Auflistung angewendet wird. Beispiel:

Section
Column

User

Score

rank()

Peter

90.3

2

John

92.7

1

Anna

89.7

3

rank('L_DRILLDOWN', 'M_INDICATOR')

Der Rang wird über einen bestimmten Drill-Down berechnet.

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

The rank is calculated over a certain drill-down.

 

Code Block
languagegroovy
withoutFilter() {
	rank('L_CITY', 'Aberdeen', 'M_VISITS')
}


rankInner() { expression }

Liefert die numerische Reihenfolge (Rang - aufsteigend) des im Ausdruck verwendeten Indikators innerhalb aller verwendeten Aufrisse in der Tabelle. Beispiel:

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

- Decaf Espresso

150001
Tea1000002
- Lemon1000001
rankInner(true) { expression }

Liefert die numerische Reihenfolge (Rang - absteigend) des im Ausdruck verwendeten Indikators innerhalb aller verwendeten Aufrisse in der Tabelle. Beispiel:

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

Aktiviert den Debug-Modus. Ifformulacontains Fehler, Tabellenzelle enthält detaillierte Stapelverfolgung über Fehler, Diagramm und KPI-Label werden nicht dargestellt und Fehlerdetails werden ausgedruckt.

Wir empfehlen, diese Funktion nur während des Debuggens zu verwenden. Wenn nicht debuggend, löschen oder als Kommentar markieren:

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

Deaktivieren Sie die geltenden Datums- und Zeitintervalle. Beispiel:

Section
Column

Date

M_INDICATOR

withoutDateTime() { M_INDICATOR }

1/12 - 12/12

1000

3000

1/1/2013 - 1/31/2013

100

3000

withoutDrillDown() { expression }

Opt-out von den angewandten Drill-Downs. Beispiel:

Section
Column

Land

M_INDICATOR

withoutDrillDown() { M_INDICATOR }

+UK

3000

3000

--London

1000

3000

--Manchester

1000

3000

--Oxford

1000

3000

In Fällen, in denen eine mehrfache Drill-Down-Anwendung nicht möglich ist, können einige der Drill-Downs von der Funktion withoutDrillDownFunction ausgeschlossen werden (die Aggregation für die obere Ebene wird angezeigt).

Section
Column
Land

Stadt

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 }

 

Deaktivieren Sie die angewandten Filter. Beispiel: (Der Filter ist auf SEGMENT=SMB gesetzt)

Section
Column

City

M_INDICATOR

withoutFilter() { M_INDICATOR }

Paris

1000

3000

London

900

3000

Berlin

1100

3000

withoutReportFilter() { expression }
Es werden nur Ansichtsfilter und Indikatorfilter angewendet (verfügbar seit BellaDati 2.9.4).
withoutViewFilter() { expression }
Es werden nur Reportfilter und Indikatorfilter angewendet (verfügbar seit BellaDati 2.9.4).
loadData('L_DRILLDOWN', 'M_INDICATOR')

Ermöglicht das Laden von Werten eines Indikators für alle Werte des angegebenen Attributs. Es kann die Leistung von Formeln erheblich verbessern. Die Funktion gibt die Karte der Werte und ihrer Werte zurück. Auf diese Karte kann mit der Funktion getMapValue() zugegriffen werden.

 

 

Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR')
getMapValue(data, '[memberId]')

Die memberId muss folgendes Format haben: [memberId] = [L_ATTRIBUTE={Value}]. Normalerweise wird die Funktion zusammen mit withoutDrillDown() verwendet.

Code Block
languagegroovy
withoutDrillDown() { 
data = loadData('L_COUNTRY', 'M_NUMBERS_BUILT')
getMapValue(data, '[L_COUNTRY={Germany}]')
  }

Es ist auch möglich, Rang oder Aggregation wie MAX, MIN usw. zu verwenden:

Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR_rank()')
getMapValue(data, '[memberId]') //will return M_INDICATOR_rank() 
Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'M_INDICATOR@MAX')
getMapValue(data, '[memberId]') //will return the highest value of indicator

 

Anstelle des Kennzeichens kann der Benutzer auch den ersten bis letzten Wert eines Attributs abrufen.

Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'L_ATTRIBUTE_LASTVALUE')
Code Block
languagegroovy
data = loadData('L_DRILLDOWN', 'L_ATTRIBUTE_FIRSTVALUE')

Parameterübergabe an die Zeitformel

Es ist möglich, die Zeiterfassung über eine Formel zu definieren. Die folgenden Funktionen gelten nur für diese Art von Formeln.

Funktion

Beschreibung

void set(String name, Object value)

Setzt den Parameterwert.

Object get(String name)

Lädt den Parameterwert.

Object indicator()

Rückgabekennzeichen aus dem Kontext der Zeile der aktuellen Tabelle. Diese Funktion gibt auch Werte von formeldefinierten Indikatoren zurück (definiert im Report). Beispiel:

Code Block
value(actualYear(),'actualMonth - 1m - 1d',indicator())

Betrachten Sie folgendes Beispiel - wir haben mehrere Kennzeichen mit den Codes M_NAME_1, M_NAME_2 und M_NAME_3. Diese Indikatoren werden in den Formeln 1 - 3 verwendet, der Zeitbereich wird durch die Zeitformeln 1 - 5 definiert.

 

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

Benutzerinformationen abrufen

Es ist möglich, Informationen über angemeldete Benutzer für Ihre Reportsanforderungen zu erhalten.

FunktionBeschreibung
String getSignedUserName()Returns name of currently signed in user.
String getSignedUserSurname()Gibt den Nachnamen des aktuell angemeldeten Benutzers zurück.
String getSignedUserEmail()Gibt die E-Mail des aktuell angemeldeten Benutzers zurück.
String getSignedUser()Liefert den Benutzernamen des aktuell angemeldeten Benutzers.

Arbeiten mit Listen und Feldern

BellaDati unterstützt alle Felder von https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html und ArrayUtils von https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html.

Syntax: Zuerst den Namen des Pakets definieren, dann die gewünschte Methode verwenden.

Beispiel

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

Nächste Schritte