# Adaloでのフィルタリング

フィルタリングは、アプリ内のデータを洗練させて整理する強力な機能です。経験豊富なアプリビルダーであっても初心者であっても、フィルタリングの概念を理解することで、アプリを特定のニーズに合わせてカスタマイズするのに役立ちます。

### **主要なフィルタリングの概念:**

**フィルタ基準:** これは、表示または非表示にするデータを決定するために設定するルールを指します。例えば、過去30日に注文された注文のみを表示したい場合や、関連プロパティを使用して特定のチームメンバーに割り当てられたタスクを表示したい場合などがあります。

**フィルタフィールド:** これらは、データのコレクション内のプロパティであり、フィルタリングに使用できるものです。たとえば、製品のリストを管理している場合、フィルタフィールドには製品名、価格、カテゴリなどが含まれる可能性があります。

**フィルタ演算子:** 演算子は、フィルタ基準とデータの間の関係を定義するために使用されます。Adalo は、等しい、等しくない、含む、より大きい、より小さいなど、プロパティタイプに応じてさまざまな演算子をサポートしています。これらの演算子は、データをどのようにフィルタリングするかを指定するのに役立ちます。

**論理演算子:** 論理演算子は、複数のフィルタ基準を組み合わせて複雑なフィルタリング条件を作成するために使用されます。Adalo は、リストで **AND** および **OR** 演算子をサポートしています。これらを使用すると、同時にまたは独立して満たす必要がある条件を指定することで、フィルタをさらに洗練させることができます。

### **フィルタの場所**

フィルタは、通常、リストコンポーネントやレコードのグループ全体を表示するコンポーネントなどに見つかります。以下に示すようなものがあります:

* リスト
* カウント
* ドロップダウンコンポーネント
* デッキスワイパー
* 画像スワイパー
* カレンダー
* チャートキット
* ... その他多数！

### フィルタ <a href="#filters" id="filters"></a>

フィルタは、コレクションからのデータグループを表示するリストで一般的に見つかります。以下の例では、**旅行のリスト** があり、デフォルトのフィルタが **すべての旅行** に設定されています。ドロップダウンを選択することで、利用可能なスクリーンデータやログインユーザーデータに基づいてさらにフィルタリングできます。

<figure><img src="https://797861279-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4EFNSNZLMs5AZ70x2P33%2Fuploads%2Fgit-blob-5f04747ed3b40f199a51579e337e024a60f55e92%2FFilter%20Dropdown.png?alt=media" alt="" width="194"><figcaption></figcaption></figure>

### カスタムフィルタ

**+カスタムフィルタを追加** ボタンが表示される場所ならどこにでもカスタムフィルタを追加できます。これらは、フィルタ演算子を使用してロジックを組み合わせ、非常に特定のレコードグループを表示するために使用されます。前述の例と同様に、**旅行者（ユーザーへの関係）がログインユーザーを含む** **旅行** のみを表示したい場合があります。

<figure><img src="https://797861279-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4EFNSNZLMs5AZ70x2P33%2Fuploads%2Fgit-blob-c20eb88226100acf859d9b5f42196ab35b943fd8%2FCustom%20Filter.png?alt=media" alt="" width="193"><figcaption></figcaption></figure>

**フィルタ演算子:**

フィルタ演算子は、Adalo が表示するレコードを決定する方法です。これにより、真または偽のいずれかが結果として得られます。この情報に基づいて、Adalo はこの演算子に基づいてレコードを表示するかどうかを決定します。フィルタと条件の両方は、レコード、コンポーネント、またはアクションに対して何を行うかを決定するために演算子を使用します。 以前に言及された\_if-then\_ロジックに従うと、フィルターや条件内で論理演算子を使用してAdaloに指示できます。「もしもこの条件が真なら、この他の条件を実行する」という指示が可能です。

#### 演算子の種類

{% tabs %}
{% tab title="Text" %}
**演算子:**

* **等しい** - この演算子は大文字と小文字を区別し、2つのテキストが完全に一致する必要があります。テキスト内に非表示の改行やスペースがあっても、厳密に一致する必要があります。この演算子は非常に厳格です。

  <mark style="color:red;">"Day" is equal to "day" = false</mark> <mark style="color:green;">"Day" is equal to "Day" = true</mark>
* **等しくない** - この演算子も大文字と小文字を区別し、2つのテキストが異なるかどうかを判断します。スペースや改行があっても、厳密に一致しない場合があります。この演算子も非常に厳格です。ヒント: 一致するかどうかを判断するよりも、除外する方が簡単です。

  <mark style="color:green;">"Day" is not equal to "day" = true</mark>

  <mark style="color:red;">"Day" is not equal to "Day" = false</mark>
* **含む** - この演算子は、1つのテキストが別のテキストを含んでいるかどうかを判断します。この演算子は厳格ではなく、大文字と小文字を区別しませんが、同じテキスト文字列を共有する複数のレコードがある場合、意図しない結果になることがあります。例えば、*<test@gmail.com>* と *<gmail@test.com>* の両方が "gmail" を含んでいますが、同じ結果ではありません。これはアプリ内のレコードを検索するのにも適しています。

  <mark style="color:green;">"Day" contains "day" = true</mark> <mark style="color:green;">"Day" contains "Day"= true</mark>

  <mark style="color:green;">"Tuesday" contains "Day" = true</mark>
  {% endtab %}

{% tab title="Number" %}
**演算子:**

* **等しい** - 2つの数値が等しいかどうかを判断します。この演算子は小数点まで厳密です。負の数も扱えます。

  <mark style="color:green;">4 is equal to 4 = true</mark> <mark style="color:red;">4 is equal to 3 = false</mark>
* **等しくない** - 2つの数値が等しくないかどうかを判断します。この演算子は小数点まで厳密です。負の数も扱えます。

  <mark style="color:red;">4 is not equal to 4 = false</mark> <mark style="color:green;">4 is not equal to 3 = true</mark>
* **より大きい** - 1つの数値が別の数値より大きいかどうかを判断します。この演算子は小数点まで厳密です。負の数も扱えます。

  <mark style="color:red;">4 is greater than 4 = false</mark> <mark style="color:green;">4 is greater than 3 - true</mark>
* **以上** - 1つの数値が別の数値より大きいかまたは等しいかを判断します。この演算子は小数点まで厳密です。負の数も扱えます。 <mark style="color:green;">4は4以上です = true</mark> <mark style="color:green;">4は3より大きいか等しいです = true</mark>
* **より小さい** - 1つの数値が別の数値より小さいかどうかを判定します。この演算子は非常に厳密で、小数点まで扱えます。負の数も扱えます。

  <mark style="color:red;">4は4より小さいです = false</mark> <mark style="color:red;">4は3より小さいです = false</mark>
* **以下** - 1つの数値が別の数値より小さいか等しいかを判定します。この演算子は非常に厳密で、小数点まで扱えます。負の数も扱えます。

  <mark style="color:green;">4は4以下です = true</mark> <mark style="color:red;">4は3以下ではありません = false</mark>
* **の間にある** - 数値が他の2つの数値の間にあるかどうかを判定します。最初の値は範囲に含まれ、2番目の値は範囲から除外されます。この演算子は非常に厳密で、小数点まで扱えます。負の数も扱えます。

  <mark style="color:green;">4は4と6の間にあります = true</mark> <mark style="color:red;">6は4と6の間にありません = false</mark>

  <mark style="color:green;">5は4と6の間にあります = true</mark>
  {% endtab %}

{% tab title="Date" %}
**演算子:**

* **より後** - 1つの日付プロパティまたは日時プロパティが別の日付より後に発生するかどうかを判定します。日付と日時を入れ替えて比較できます。

  <mark style="color:green;">1992年8月12日 午後4時は1980年8月12日より後です = true</mark>
* **より前** - 1つの日付プロパティまたは日時プロパティが別の日付より前に発生するかどうかを判定します。日付と日時を入れ替えて比較できます。

  <mark style="color:red;">1992年8月12日 午後4時は1980年8月12日より前です = false</mark>
* **の間にある** - 1つの日付または日時プロパティが他の2つの日付または日時の間にあるかどうかを判定します。最初の日時は包括的ですが、2番目の日時は除外されます。日付と日時を入れ替えて比較できます。

  <mark style="color:green;">1992年8月12日 午後4時は1980年8月12日と2021年8月12日の間にあります = true</mark>

  <mark style="color:green;">1980年8月12日 午後4時は1980年8月12日と2021年8月12日の間にあります = true</mark>

  <mark style="color:red;">1980年8月11日 午後4時は1980年8月12日と2021年8月12日の間にありません = false</mark>
  {% endtab %}

{% tab title="Relationship" %}
Adaloで論理演算子を使用して比較できる関係の種類は、1対多の関係だけです。多数のレコードを他の多数のレコードと比較することはできません。

**演算子:**

* **含む** - グループまたはコレクションのレコードが選択したレコードを含んでいるかどうかを判定します。この演算子は他のものとは異なり、レコード全体を評価します。

  ![](https://797861279-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4EFNSNZLMs5AZ70x2P33%2Fuploads%2Fgit-blob-c4f718ff5dc7a852256792fc7bbd9d417d3dcb4b%2FScreen%20Shot%202021-10-15%20at%208.44.14%20AM.png?alt=media)
* **含まれていない** - 選択したレコードが含まれていないかどうかを判断します。この演算子は、他の演算子とは異なり、単一のプロパティではなくレコード全体を評価します。

  ![](https://797861279-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4EFNSNZLMs5AZ70x2P33%2Fuploads%2Fgit-blob-a4bab6d65741c798ac766751297c04bc8c1ddd2f%2FScreen%20Shot%202021-10-15%20at%208.46.22%20AM.png?alt=media)
  {% endtab %}

{% tab title="True/False" %}
**演算子:**

* **Is true** - 真偽プロパティがチェックされているかどうかを判断します
* **Is false** - 真偽プロパティがチェックされていないかどうかを判断します
  {% endtab %}
  {% endtabs %}

#### 論理演算子 <a href="#logical-operators" id="logical-operators"></a>

フィルター内では、カスタムフィルターをお互いに包含するか、排他的にするかを選択できます。複数のカスタムフィルターを持つリストの場合、それらのフィルターの**すべて**が真である必要があるか、**いずれか**のフィルターが真であるかを選択できます。

{% embed url="<https://youtu.be/lY_ZJgKwyIM>" %}

すべての基準が満たされたときにデータを表示したい場合は、**+ AND** ボタンをクリックします。以下の例では、**Trips** で、**Travelers (Users との関係)** が **Logged in User を含み、かつ** **Travel Date** が **Logged in User がリストを表示している日付より後** である **Trips** のみを表示したいとします。

<figure><img src="https://797861279-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4EFNSNZLMs5AZ70x2P33%2Fuploads%2Fgit-blob-5e81d09d6e852095d3861df3aef06a22023b2154%2FAND%20Filter.png?alt=media" alt="" width="190"><figcaption></figcaption></figure>

いずれかの基準が満たされたときにデータを表示したい場合は、**+Add Custom Filter** ボタンをクリックします。以下の例では、**Trips** で、**Travelers (Users との関係)** が **Logged in User を含み、または** **Trip Status** が **Active** である **Trips** のみを表示したいとします。

<figure><img src="https://797861279-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4EFNSNZLMs5AZ70x2P33%2Fuploads%2Fgit-blob-6e63368a55dac9ead97799636e3987a188d8cbaa%2FOR%20Filter.png?alt=media" alt="" width="196"><figcaption></figcaption></figure>

**0 vs. Null (空):**

データ管理では、**0** と **Null** は異なる状態を表します。**0** は数量や特定の値の不在を示す有効な数値です。**Null** は、特定のフィールドにデータが存在しないことを示す、***値の不在または不明な値*** を示します。Adaloでは、**Null** は ***Empty*** と呼ばれます。

#### **空の値のフィルタリング:**

* 空は、関係が存在するかつ演算子が空であるかどうかを評価するために使用できません。
  * **例:** 関係が存在するレコードのみを取得したいが、特定のプロパティが空である場合。
* 空は、レコードの**数をフィルタリング**するために使用できません。
  * **例:** 関係の数を持たないレコードのみを取得したい場合。数値であるため、数値 '0' と比較する必要があります。

**高度なフィルタリングテクニック:**

* **関係の確認:** 多対一の関係を持つレコードが、関係のIDプロパティを空にすることで確認できます。
* **例:** **\[多数のリード、1人のセールスパーソン]** を持たない **リード** のリストを取得するには、**Current Leads > Sales Person > ID** が **Empty** と等しいかどうかを確認します。
* **画像とファイルのプロパティを評価:** レコードに画像やファイルが保存されているかどうかを評価できます。
  * **例:** **Contract \[ファイルプロパティ]** が保存されているオプションのみを表示するには、**Contract > URL** が **Empty** でないレコードのみを表示するカスタムフィルタを適用します。
* **場所のプロパティを評価:** 同様に、場所のプロパティに場所が保存されているかどうかを評価できます。
  * **例:** **ロケーション** を持たないすべての **レストラン** の数を取得するには、**Restaurant's > Location > Full Address** が **Empty** と等しいと設定されたカスタムフィルタを使用します。

{% hint style="danger" %}
***注意:*** **アプリのパフォーマンスに悪影響を及ぼす可能性があるため、コンポーネントにフィルタを追加しすぎないでください。**
{% endhint %}

## もっと詳しく

* フィルタを条件と組み合わせることで、アプリ内で何が起こるかをさらに制御できます。たとえば、データベース内のレコードのフィルタリングされた数に基づいてコンポーネントの表示を変更することができます。
* 現在、条件付きアクションと条件付き表示には1つのフィルタしか添付できませんが、リスト、カウント、チャート、およびその他のコンポーネントのフィルタには複数のフィルタを添付できます。

## ヘルプ

この記事に関する追加のヘルプが必要な場合は、いつでも[コミュニティフォーラム](https://forum.adalo.com/)で質問できます！投稿にこの記事へのリンクを貼り付けることも忘れないでください！

チュートリアルやヘルプドキュメントのリクエストがありますか？[お知らせください！](https://ideas.adalo.com/tutorial-requests)
