Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Sv translation
languageen


Note

It is recommended to get familiar with filter function before proceeding with this tutorial.

You can set up  filters for view in Filter dialog.

Sometimes it is more convenient to add filter directly to indicator formula. You can do this when:

  • you are cross referencing data from other data sets.
  • you do not want your users to change filters.

Filtering Attributes

The filter function supports most of the operators supported by PostgreSQL such as in/not in, ilike, like/not Like, similar to/not similar to etc. "ilike" is similar to "like" but case insensitive to the pattern matched.

  • Filter using operator: in/not In

Following example filters data to include only Paris, Berlin and London in their City attribute. Result returns aggregation of visits in these three citites.

Code Block
filter("L_CITY in ('Paris','Berlin','London')") {
    return M_VISITS;
}


Note

Note the correct usage of apostrophs in the example.

  • Regular Expressions

Pattern

Description

_

Stands for any single character.

%

Stands for any sequence of zero or more characters.

*

Denotes repetition of the previous item zero or more times.

+

Denotes repetition of the previous item one or more times.

?

Denotes repetition of the previous item zero or one time.

...

|

Denotes alternation (either of two alternatives).


Code Block
Some examples for regular expressions:
'abc' LIKE 'abc'    true
'abc' LIKE 'a%'     true
'abc' LIKE '_b_'    true
'abc' LIKE 'c'      false

Filtering Indicators

Following example counts number of records which have Indicator's value of visits greater than 3.

Code Block
count = 0
filter('M_VISITS > 3') { 
    count++; 
} 

return count;


Note

Note that filter is applied on every record and not on its aggregated value displayed in the view.

Date filtering

When filtering dates, the only allowed format is 'yyyy-MM-dd'. Following example returns number of students who had an exam on 12th September 2014.


Code Block
filter("L_DATE in ('2014-09-12')") {L_STUDENT_COUNT}


For filtering whole month or year, put date-part function inside the filter. Following example return number of students who had an exam in September 2014.

Code Block
filter("date_part('month', L_DATE) = 9 AND date_part('year', L_DATE) = 2014") {L_STUDENT_COUNT}

Time filtering

When filtering time, the only allowed format is 'HH:mm:ss'. Following example returns number of patients who arrived at 10:00

Code Block
filter("L_TIME in ('10:00:00')") {L_PATIENT_COUNT}

For filtering whole hours, minutes or seconds, date_part function can be put inside the filter functiion. Following example returns number of patients who arrived between 10:00 and 10:59.

Code Block
filter("date_part('hour', L_TIME) =10") {L_PATIENT_COUNT}

Multiple Filters

Following example returns number of students who had Exceptional results from Math subject.

Code Block
filter("(L_PASS_RESULT in ('Exceptional')) AND (L_PASS_SUBJECT in ('Math'))"){
  L_STUDENT_COUNT
}


Info

You can combine multiple filter conditions with AND or OR conjunction.

Code Alternatives

Note

This feature is available since BellaDati 2.9.2

It is possible to write filters in formulas to different ways. First one is mentioned in examples above. The second one uses more programmatic approach. In few steps, the filter is created and then built.

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'OperationType', 'value1')
filter(buildFilter(f)) {
  ...
}

Function andFilter() is used to add another condition to the filter. It is possible to add more than condition, by using multiple andFilter() functions. 

Following operations are available:

OperationDescription
EQevaluates if two values are equal
NEQevaluates if two values are not equal, doesn't include null values
GTevaluates if first value is greater than second value
GTEevaluates if first value is greater than second value or equal
LTevaluates if first value is lower than second value
LTEevaluates if first value is lower than second value or equal
INevaluates if first value equals one of the values from the list

NOT_IN

evaluates if first value does not equal any of the values from the list, null values are included as well as null doesn't equal any value in the list
NOT_NULLevaluates if first value is NULL
NULLevaluates if first value is not NULL

For operations NULL and NOT NULL, the second value is empty.

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'NULL','')
filter(buildFilter(f)) {
  ...
}


For operations IN and NOT_IN, it is possible to define more than one value for comparison.

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'IN', 'value1', 'value2')
filter(buildFilter(f)) {
  ...
}

Filtering GeoJSON Values

Note

This feature is available since BellaDati 2.9.2

Filters can be also used to evaluate whether a certain GEO point is located inside an area defined by o GeoJSON. To be able to use this function, PostGIS has to be installed on the server. Administrators can open Database Summary page to see whether PostGIS is installed or not.

Code Block
String f = filterGeoJSONContains('L_GEOJSON', '134.256028,-24.162618')
filter(f) { 
 L_NAME_COUNT
}

Another option is to use this filter to retrieve the name of a county or state where the GEO point is located.

Code Block
String f = filterGeoJSONContains('L_JSON', '134.256028,-24.162618')
filter(f) { 
  crossValue('GEOJSON', 'L_NAME_FIRSTVALUE')  
}


Filtering in ML studio and Endpoints


FunctionDescription
andFilter(Filter first, Filter second)Creates an AND filter concatenating multiple filters.
orFilter(Filter first, Filter second)Creates an OR filter concatenating multiple filters.
isGreaterFilter(String column, Object value)Creates a filter which checks whether column value is greater than the specified value.
isGreaterOrEqualFilter(String column, Object value)Creates a filter which checks whether column value is greater than or equal to the specified value.
isEqualFilter(String column, Object value)Creates a filter which checks whether column value is equal to the specified value.
isNotEqualFilter(String column, Object value)Creates a filter which checks whether column value is not equal to the specified value.
isLessFilter(String column, Object value)Creates a filter which checks whether column value is less than the specified value.
isLessOrEqualFilter(String column, Object value)Creates a filter which checks whether column value is less than or equal to the specified value.
isInFilter(String column, Object value)Creates a filter which checks whether column value is in a collection of values.
isNotInFilter(String column, Object value)Creates a filter which checks whether column value is not in a collection of values.
isNullFilter(String column)Creates a filter which checks whether column value has a {@code null} value.
isNotNullFilter(String column)Creates a filter which checks whether column value does not have a {@code null} value.

Next Steps

Sv translation
languageja


Note

このチュートリアルに進む前に、フィルター機能を十分参照してください。

[フィルター]ダイアログでビューのフィルターを設定できます。

インジケータ数式にフィルターを直接追加する方が便利な場合があります。これは次の場合に実行できます:

  • 他のデータセットからのデータを相互参照している場合
  • ユーザーにフィルターを変更させたくない場合

属性のフィルタリング

フィルター機能は、in/not in、ilike、like/not Likeなど、PostgreSQLがサポートするほとんどの演算子をサポートします。「ilike」は「like」に似ていますが、一致するパターンに対して大文字と小文字は区別されません。

  • 演算子を使用したフィルターin/not In

次の例では、データをフィルター処理して、City属性にParisBerlinLondonのみを含めます。結果は、これら3都市の訪問の集計を返します。

Code Block
filter("L_CITY in ('Paris','Berlin','London')") {
    return M_VISITS;
}


Note

例にあるアポストロフィーの正しい使用法に注意してください。

  • 一般的な式

パターン

説明

_

任意の一文字を表します。

%

0個以上の文字列を表します。

*

以前のアイテムの0回以上の繰り返しを表示します。

+

以前のアイテムの1回以上の繰り返しを表示します。

?

以前のアイテムが0回または1回繰り返されることを示します。

|

交互を示します(2つの選択肢のいずれか)


Code Block
Some examples for regular expressions:
'abc' LIKE 'abc'    true
'abc' LIKE 'a%'     true
'abc' LIKE '_b_'    true
'abc' LIKE 'c'      false

インジケータのフィルタリング

次の例では、訪問のインジケータの値が3を超えるレコードの数をカウントします。

Code Block
count = 0
filter('M_VISITS > 3') { 
    count++; 
} 

return count;


Note

ビューに表示される集計値ではなく、すべてのレコードにフィルターが適用されることに注意してください。

日付のフィルタリング

日付をフィルタリングする場合、許可される形式は「yyyy-MM-dd」のみです。次の例は、2014年9月12日に試験を受けた学生の数を返します。

Code Block
filter("L_DATE in ('2014-09-12')") {L_STUDENT_COUNT}


月全体や年全体をフィルタリングするには、フィルター内にdate-part関数を配置します。次の例では、2014年9月に試験を受けた生徒の数を返します。

Code Block
filter("date_part('month', L_DATE) = 9 AND date_part('year', L_DATE) = 2014") {L_STUDENT_COUNT}

時間のフィルタリング

時間をフィルタリングする場合、許可される形式は「HH:mm:ss」のみです。次の例では、10:00に到着した患者の数を返します。

Code Block
filter("L_TIME in ('10:00:00')") {L_PATIENT_COUNT}


全体の時間、分、秒をフィルタリングするために、date_part関数をフィルター機能に配置できます。次の例では、10:00から10:59の間に到着した患者の数を返します。

Code Block
filter("date_part('hour', L_TIME) =10") {L_PATIENT_COUNT}

複数のフィルター

次の例では、数学科目から例外的な結果が得られた生徒数を返します。

Code Block
filter("(L_PASS_RESULT in ('Exceptional')) AND (L_PASS_SUBJECT in ('Math'))"){
  L_STUDENT_COUNT
}


Info

複数のフィルター条件をANDまたはORで結合できます。

代替コード

Note

この機能は、BellaDati 2.9.2以降で利用可能です。

数式のフィルターを様々な方法で作成することができます。最初の例は上記の例で言及されています。 2つ目は、よりプログラム的なアプローチを使用します。いくつかの手順で、フィルターが作成されてから構築されます。

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'OperationType', 'value1')
filter(buildFilter(f)) {
  ...
}

andFilter()関数は、フィルターに別の条件を追加するために使用されます。複数のandFilter()関数を使用して、複数の条件を追加することができます。

次の演算子を使用できます:

演算子説明
EQ

2つの値が等しいかどうかを評価します。

NEQ

2つの値が等しくないかどうかを評価します。

GT最初の値が2番目の値より大きいかどうかを評価します。
GTE

最初の値が2番目の値以上かどうかを評価します。

LT最初の値が2番目の値より小さいかどうかを評価します。
LTE

最初の値が2番目の値以下かどうかを評価します。

IN最初の値がリストの値のいずれかに等しいかどうかを評価します。

NOT_IN

最初の値がリストのいずれの値とも等しくないかどうかを評価します。
NOT_NULL最初の値がNULLかどうかを評価します。
NULL最初の値がNULLでないかどうかを評価します。

For operations NULL and NOT NULL, the second value is empty.

NULLおよびNOT NULL演算子の場合、2番目の値は空です。

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'NULL','')
filter(buildFilter(f)) {
  ...
}


INおよびNOT_IN演算子では、比較のために複数の値を定義できます。

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'IN', 'value1', 'value2')
filter(buildFilter(f)) {
  ...
}

GeoJSON値のフィルタリング

Note

この機能は、BellaDati 2.9.2以降で利用可能です。

特定のGEOポイントがGeoJSONで定義されたエリア内にあるかどうかを評価するために、フィルターを使用することもできます。この機能を使用するには、PostGISをサーバーにインストールする必要があります。管理者は、Database summaryページを開いて、PostGISがインストールされているかどうかを確認できます。

Code Block
String f = filterGeoJSONContains('L_GEOJSON', '134.256028,-24.162618')
filter(f) { 
 L_NAME_COUNT
}

このフィルターを使用して、GEOポイントが存在する郡または州の名前を取得する、別のオプションがあります。

Code Block
String f = filterGeoJSONContains('L_JSON', '134.256028,-24.162618')
filter(f) { 
  crossValue('GEOJSON', 'L_NAME_FIRSTVALUE')  
}

ML Studioおよびエンドポイントでのフィルタリング

FunctionDescription
andFilter(Filter first, Filter second)複数のフィルタを連結してANDフィルタを作成します。
orFilter(Filter first, Filter second)複数のフィルタを連結してORフィルタを作成します。
isGreaterFilter(String column, Object value)指定された値よりも列の値が大きいかどうかを確認するフィルタを作成します。
isGreaterOrEqualFilter(String column, Object value)指定された値以上かどうかを確認するフィルタを作成します。
isEqualFilter(String column, Object value)指定された値と列の値が等しいかどうかを確認するフィルタを作成します。
isNotEqualFilter(String column, Object value)指定された値と列の値が等しくないかどうかを確認するフィルタを作成します。
isLessFilter(String column, Object value)指定された値よりも列の値が小さいかどうかを確認するフィルタを作成します。
isLessOrEqualFilter(String column, Object value)指定された値以下かどうかを確認するフィルタを作成します。
isInFilter(String column, Object value)列の値が値のコレクションに含まれているかどうかを確認するフィルタを作成します。
isNotInFilter(String column, Object value)列の値が値のコレクションに含まれていないかどうかを確認するフィルタを作成します。
isNullFilter(String column)列の値が{@code null}あるかどうかを確認するフィルタを作成します。
isNotNullFilter(String column)列の値が{@code null}でないかどうかを確認するフィルタを作成します。


次に

Sv translation
languagede


Note

Es wird empfohlen, sich mit der Filterfunktion vertraut zu machen, bevor Sie mit diesem Tutorial fortfahren.

Im Dialogfeld Filter können Sie Filter für die Ansicht einrichten.

Manchmal ist es bequemer, den Filter direkt zur Indikatorformel hinzuzufügen. Du kannst dies tun, wenn:

  • Sie referenzieren Daten aus anderen Datensätzen.
  • Sie möchten nicht, dass Ihre Benutzer Filter ändern.

Filtern von Attributen

Die Filterfunktion unterstützt die meisten von PostgreSQL unterstützten Operatoren wie in/not in, ilike, like/not Like, similar to/not similar to etc. "ilike" ist ähnlich wie "like", aber die Groß-/Kleinschreibung ist unempfindlich gegenüber dem übereinstimmenden Muster.

  • Filter mit Operator: in/not In

Das folgende Beispiel filtert Daten so, dass sie nur Paris, Berlin und London in ihr City-Attribut aufnehmen. Das Ergebnis liefert eine Zusammenfassung der Besuche in diesen drei Städten.

Code Block
filter("L_CITY in ('Paris','Berlin','London')") {
    return M_VISITS;
}
Note

Beachten Sie die korrekte Verwendung von Apostrophe im Beispiel.

  • Regelmäßige Ausdrücke

Pattern

Beschreibung

_

Steht für jedes einzelne Zeichen.

%

Steht für eine beliebige Folge von Null oder mehr Zeichen.

*

Bezeichnet die Wiederholung des vorherigen Elements null oder mehr Mal.

+

Denotes repetition of the previous item one or more times.

?

Bezeichnet die Wiederholung des vorherigen Elements Null oder einmalig.

|

Kennzeichnet eine Alternative (eine von zwei Alternativen).

Code Block
Some examples for regular expressions:
'abc' LIKE 'abc'    true
'abc' LIKE 'a%'     true
'abc' LIKE '_b_'    true
'abc' LIKE 'c'      false

Filterindikatoren

Das folgende Beispiel zählt die Anzahl der Datensätze, die den Wert des Indikators für Besuche größer als 3 haben.

Code Block
count = 0
filter('M_VISITS > 3') { 
    count++; 
} 

return count;
Note

Beachten Sie, dass der Filter auf jeden Dataset angewendet wird und nicht auf seinen in der Ansicht angezeigten aggregierten Wert.

Datums-Filterung

Beim Filtern von Daten ist nur das Format'yyyyyyy-MM-dd' erlaubt. Das folgende Beispiel gibt die Anzahl der Studenten zurück, die am 12. September 2014 eine Prüfung abgelegt haben.

 

Code Block
filter("L_DATE in ('2014-09-12')") {L_STUDENT_COUNT}

 

Um den ganzen Monat oder das ganze Jahr zu filtern, legen Sie die Datum-Teil-Funktion in den Filter. Nachfolgend die Anzahl der Studenten, die im September 2014 eine Prüfung abgelegt haben.

Code Block
filter("date_part('month', L_DATE) = 9 AND date_part('year', L_DATE) = 2014") {L_STUDENT_COUNT}

Zeitfilterung

Beim Filtern der Zeit ist nur das Format'HH:mm:ss' erlaubt. Das folgende Beispiel gibt die Anzahl der Patienten zurück, die um 10:00 Uhr angekommen sind.

Code Block
filter("L_TIME in ('10:00:00')") {L_PATIENT_COUNT}

Um ganze Stunden, Minuten oder Sekunden zu filtern, kann die date_part Funktion in die Filterfunktion integriert werden. Das folgende Beispiel gibt die Anzahl der Patienten zurück, die zwischen 10:00 und 10:59 Uhr angekommen sind.

Code Block
filter("date_part('hour', L_TIME) =10") {L_PATIENT_COUNT}

Multiple Filter

Folgendes Beispiel gibt die Anzahl der Schüler zurück, die außergewöhnliche Ergebnisse aus dem Fach Mathematik erzielt haben.

Code Block
filter("(L_PASS_RESULT in ('Exceptional')) AND (L_PASS_SUBJECT in ('Math'))"){
  L_STUDENT_COUNT
}
Info

Sie können mehrere Filterbedingungen mit UND- oder ODER-Verknüpfung kombinieren.

Code-Alternativen

Note

Diese Funktion ist seit BellaDati 2.9.2 verfügbar.

Es ist möglich, Filter in Formeln auf verschiedene Arten zu schreiben. Die erste ist in den obigen Beispielen erwähnt. Der zweite verwendet einen programmatischeren Ansatz. In wenigen Schritten wird der Filter erstellt und dann gebaut.

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'OperationType', 'value1')
filter(buildFilter(f)) {
  ...
}

Die Funktion andFilter() wird verwendet, um dem Filter eine weitere Bedingung hinzuzufügen. Es ist möglich, mehr als eine Bedingung hinzuzufügen, indem Sie mehrere andFilter() Funktionen verwenden.

Folgende Operationen sind verfügbar:

BetriebBeschreibung
EQwertet aus, ob zwei Werte gleich sind.
NEQwertet aus, ob zwei Werte ungleich sind.
GT

wertet aus, ob der erste Wert größer als der zweite Wert ist.

GTEwertet aus, ob der erste Wert größer als der zweite Wert oder gleich ist.
LT

wertet aus, ob der erste Wert kleiner als der zweite Wert ist.

LTEwertet aus, ob der erste Wert kleiner als der zweite Wert oder gleich ist.
INwertet aus, ob der erste Wert gleich einem der Werte aus der Liste ist.

NOT_IN

wertet aus, ob der erste Wert ungleich einem der Werte aus der Liste ist.
NOT_NULLwertet aus, ob der erste Wert NULL ist.
NULLwertet aus, ob der erste Wert nicht NULL ist.

Bei den Operationen NULL und NOT NULL ist der zweite Wert leer.

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'NULL','')
filter(buildFilter(f)) {
  ...
}

 

Für die Operationen IN und NOT_IN ist es möglich, mehr als einen Wert zum Vergleich zu definieren.

Code Block
def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'IN', 'value1', 'value2')
filter(buildFilter(f)) {
  ...
}

Filtern von GeoJSON-Werten

Note

Diese Funktion ist seit BellaDati 2.9.2 verfügbar.

Filter können auch verwendet werden, um zu beurteilen, ob sich ein bestimmter GEO-Punkt innerhalb eines von o GeoJSON definierten Bereichs befindet. Um diese Funktion nutzen zu können, muss PostGIS auf dem Server installiert sein. Administratoren können die Seite Datenbankübersicht öffnen, um zu sehen, ob PostGIS installiert ist oder nicht.

Code Block
String f = filterGeoJSONContains('L_GEOJSON', '134.256028,-24.162618')
filter(f) { 
 L_NAME_COUNT
}

Eine weitere Möglichkeit besteht darin, diesen Filter zu verwenden, um den Namen eines Bezirks oder Staates abzurufen, in dem sich der GEO-Punkt befindet.

Code Block
String f = filterGeoJSONContains('L_JSON', '134.256028,-24.162618')
filter(f) { 
  crossValue('GEOJSON', 'L_NAME_FIRSTVALUE')  
}

Nächste Schritte