このチュートリアルに進む前に、フィルター機能を十分参照してください。
[フィルター]ダイアログでビューのフィルターを設定できます。
インジケータ数式にフィルターを直接追加する方が便利な場合があります。これは次の場合に実行できます:
- 他のデータセットからのデータを相互参照している場合
- ユーザーにフィルターを変更させたくない場合
属性のフィルタリング
フィルター機能は、in/not in、ilike、like/not Likeなど、PostgreSQLがサポートするほとんどの演算子をサポートします。「ilike」は「like」に似ていますが、一致するパターンに対して大文字と小文字は区別されません。
- 演算子を使用したフィルター: in/not In
次の例では、データをフィルター処理して、City属性にParis、Berlin、Londonのみを含めます。結果は、これら3都市の訪問の集計を返します。
filter("L_CITY in ('Paris','Berlin','London')") { return M_VISITS; }
例にあるアポストロフィーの正しい使用法に注意してください。
一般的な式
パターン | 説明 |
---|---|
_ | 任意の一文字を表します。 |
% | 0個以上の文字列を表します。 |
* | 以前のアイテムの0回以上の繰り返しを表示します。 |
+ | 以前のアイテムの1回以上の繰り返しを表示します。 |
? | 以前のアイテムが0回または1回繰り返されることを示します。 |
| | 交互を示します(2つの選択肢のいずれか)。 |
Some examples for regular expressions: 'abc' LIKE 'abc' true 'abc' LIKE 'a%' true 'abc' LIKE '_b_' true 'abc' LIKE 'c' false
インジケータのフィルタリング
次の例では、訪問のインジケータの値が3を超えるレコードの数をカウントします。
count = 0 filter('M_VISITS > 3') { count++; } return count;
ビューに表示される集計値ではなく、すべてのレコードにフィルターが適用されることに注意してください。
日付のフィルタリング
日付をフィルタリングする場合、許可される形式は「yyyy-MM-dd」のみです。次の例は、2014年9月12日に試験を受けた学生の数を返します。
filter("L_DATE in ('2014-09-12')") {L_STUDENT_COUNT}
月全体や年全体をフィルタリングするには、フィルター内にdate-part関数を配置します。次の例では、2014年9月に試験を受けた生徒の数を返します。
filter("date_part('month', L_DATE) = 9 AND date_part('year', L_DATE) = 2014") {L_STUDENT_COUNT}
時間のフィルタリング
時間をフィルタリングする場合、許可される形式は「HH:mm:ss」のみです。次の例では、10:00に到着した患者の数を返します。
filter("L_TIME in ('10:00:00')") {L_PATIENT_COUNT}
全体の時間、分、秒をフィルタリングするために、date_part関数をフィルター機能に配置できます。次の例では、10:00から10:59の間に到着した患者の数を返します。
filter("date_part('hour', L_TIME) =10") {L_PATIENT_COUNT}
複数のフィルター
次の例では、数学科目から例外的な結果が得られた生徒数を返します。
filter("(L_PASS_RESULT in ('Exceptional')) AND (L_PASS_SUBJECT in ('Math'))"){ L_STUDENT_COUNT }
複数のフィルター条件をANDまたはORで結合できます。
代替コード
この機能は、BellaDati 2.9.2以降で利用可能です。
数式のフィルターを様々な方法で作成することができます。最初の例は上記の例で言及されています。 2つ目は、よりプログラム的なアプローチを使用します。いくつかの手順で、フィルターが作成されてから構築されます。
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番目の値は空です。
def f = createFilter() f = andFilter(f, 'L_ATTRIBUTE', 'NULL','') filter(buildFilter(f)) { ... }
INおよびNOT_IN演算子では、比較のために複数の値を定義できます。
def f = createFilter() f = andFilter(f, 'L_ATTRIBUTE', 'IN', 'value1', 'value2') filter(buildFilter(f)) { ... }
GeoJSON値のフィルタリング
この機能は、BellaDati 2.9.2以降で利用可能です。
特定のGEOポイントがGeoJSONで定義されたエリア内にあるかどうかを評価するために、フィルターを使用することもできます。この機能を使用するには、PostGISをサーバーにインストールする必要があります。管理者は、データベースサマリーページを開いて、PostGISがインストールされているかどうかを確認できます。
String f = filterGeoJSONContains('L_GEOJSON', '134.256028,-24.162618') filter(f) { L_NAME_COUNT }
このフィルターを使用して、GEOポイントが存在する郡または州の名前を取得する、別のオプションがあります。
String f = filterGeoJSONContains('L_JSON', '134.256028,-24.162618') filter(f) { crossValue('GEOJSON', 'L_NAME_FIRSTVALUE') }
ML Studioおよびエンドポイントでのフィルタリング
Function | Description |
---|---|
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}でないかどうかを確認するフィルタを作成します。 |