Appearance
Are you an LLM? You can read better optimized documentation at /md/chart-options/where-filter.md for this page in Markdown format
データの絞り込み
概要
- データソースのクエリ実行結果からチャートで描画するデータを絞り込むためには
WhereFilterを指定します WhereFilterは、カラムや定数の参照、比較演算子 (=,LIKE,IN,BETWEENなど)、AND / OR の組み合わせで構築しますWhereFilterは、フォームUIを使って編集できるようにするため、生成規則に一定の制約があります- 標準の演算子で表現できない条件は、カスタムSQL (
RAW_STRING) を使って指定します
- 標準の演算子で表現できない条件は、カスタムSQL (
型定義
カラムや値の参照
ts
// データソースのクエリ実行結果のカラムを参照する際に利用
type SqlField = {
type: 'FIELD';
key: string; // カラム名を指定
};
// 定数を指定する際に利用
type SqlConstant = {
type: 'CONSTANT';
value: string | number | boolean;
datatype: 'STRING' | 'INTEGER' | 'FLOAT' | 'BOOLEAN' | 'DATE' | 'DATETIME' | 'TIMESTAMP';
};
// NULL を指定する際に利用
type NullConstant = {
type: 'CONSTANT';
value: null;
datatype: 'BOOLEAN'; // NULL はデータ型によらず BOOLEAN として扱います
};演算子の定義
演算子の引数は SqlField を先頭に、SqlConstant を2番目以降に指定します。
ts
type SqlOperator =
| {
/** =, !=, >, >=, <, <=, LIKE */
type: 'OPERATOR';
name: 'EQUAL' | 'NOT_EQUAL' | 'GT' | 'GTE' | 'LT' | 'LTE' | 'LIKE';
// LIKE の場合、定数値に % (0文字以上) や _ (1文字) のワイルドカードを指定する
args: [SqlField, SqlConstant];
}
| {
/** IS NULL / IS NOT NULL */
type: 'OPERATOR';
name: 'IS' | 'IS_NOT';
args: [SqlField, NullConstant];
}
| {
/** IN / NOT IN */
type: 'OPERATOR';
name: 'IN' | 'NOT_IN';
args: [SqlField, SqlConstant, ...SqlConstant[]];
}
| {
/** BETWEEN */
type: 'OPERATOR';
name: 'BETWEEN';
args: [SqlField, SqlConstant, SqlConstant];
};
// カスタムSQLを指定する際に利用 (SqlOperator では表現できない条件のために利用)
type CustomSqlOperator = {
type: 'RAW_STRING';
body: string; // 真偽値を返すSQL文字列を指定
};AND / OR の組み合わせ
AND / OR は交互にしか組み合わせられず、 WhereFilter には AND 条件のみ直接指定できます。
ts
type SqlAndOperator = {
type: 'OPERATOR';
name: 'AND';
args: (SqlOrOperator | SqlOperator | CustomSqlOperator)[];
};
type SqlOrOperator = {
type: 'OPERATOR';
name: 'OR';
args: (SqlAndOperator | SqlOperator | CustomSqlOperator)[];
};
// AND / OR は交互にしか組み合わせられないため、AND 条件のグルーピングには間に OR を挟む必要があります
export type WhereFilter = SqlAndOperator;設定例
ts
// category が "FOOD" または "DRINK" で、price が 1000 以上のデータに絞り込む場合
{
type: 'OPERATOR',
name: 'AND',
args: [
{
type: 'OPERATOR',
name: 'OR',
args: [
{
type: 'OPERATOR',
name: 'EQUAL',
args: [
{ type: 'FIELD', key: 'category' },
{ type: 'CONSTANT', value: 'FOOD', datatype: 'STRING' },
],
},
{
type: 'OPERATOR',
name: 'EQUAL',
args: [
{ type: 'FIELD', key: 'category' },
{ type: 'CONSTANT', value: 'DRINK', datatype: 'STRING' },
],
},
],
},
{
type: 'OPERATOR',
name: 'GT',
args: [
{ type: 'FIELD', key: 'price' },
{ type: 'CONSTANT', value: 1000, datatype: 'INTEGER' },
],
},
],
}
// updated_at が 2025-01-01 〜 2025-12-31 の範囲のデータに絞り込む場合
{
type: 'OPERATOR',
name: 'AND',
args: [
{
type: 'OPERATOR',
name: 'BETWEEN',
args: [
{ type: 'FIELD', key: 'updated_at' },
{ type: 'CONSTANT', value: '2025-01-01', datatype: 'DATE' },
{ type: 'CONSTANT', value: '2025-12-31', datatype: 'DATE' },
],
},
],
}
// updated_at が created_at より後のデータに絞り込む場合
// (カラム同士の比較は、SqlOperator では表現できないため、カスタムSQLを利用します)
{
type: 'OPERATOR',
name: 'AND',
args: [
{
type: 'RAW_STRING',
body: 'updated_at > created_at',
},
],
}