Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

次に

最初の値が2番目の値以下かどうかを評価します
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