Как добавить условие ИЛИ в запрос фильтра Cube.js
Я хочу добавить условие ИЛИ в запрос JSON Cube.js. Но как только я добавил еще одно условие в фильтр, он всегда добавляет условие И в запрос SQL.
Ниже приведен запрос JSON, который я пытаюсь выполнить.
{
"dimensions": [
"Employee.name",
"Employee.company"
],
"timeDimensions": [],
"measures": [],
"filters": [
{
"dimension": "Employee.company",
"operator": "contains",
"values": [
"soft"
]
},
{
"dimension": "Employee.name",
"operator": "contains",
"values": [
"soft"
]
}
]
}
Он генерирует ниже SQL-запрос.
SELECT
`employee`.name `employee__name`,
`employee`.company `employee__company`
FROM
DEMO.Employee AS `employee`
WHERE
`employee`.company LIKE CONCAT('%', 'soft', '%')
AND
`employee`.name LIKE CONCAT('%', 'soft', '%')
GROUP BY
1,
2;
Что такое запрос JSON для Cube.js, если я хочу сгенерировать ниже SQL
SELECT
`employee`.name `employee__name`,
`employee`.company `employee__company`
FROM
DEMO.Employee AS `employee`
WHERE
`employee`.company LIKE CONCAT('%', 'soft', '%')
OR
`employee`.name LIKE CONCAT('%', 'soft', '%')
GROUP BY
1,
2;
2 ответа
Поддержка API для логических операторов пока не реализована. Между тем есть несколько обходных путей:
- Определите измерение, которое имитирует поведение ИЛИ. В вашем случае это
cube(`Employee`, {
// ...
dimensions: {
companyAndName: {
sql: `CONCAT(${company}, ' ', ${name})`,
type: `string`
}
}
});
- Определите сегменты. Их также можно сгенерировать: https://cube.dev/docs/schema-generation
cube(`Employee`, {
// ...
segments: {
soft: {
sql: `${company} LIKE CONCAT('%', 'soft', '%') OR ${name} LIKE CONCAT('%', 'soft', '%')`
}
}
});
вот как ты это делаешь
{
or: [
{
"dimension": "Employee.company",
"operator": "contains",
"values": [
"soft"
]
},
{
"dimension": "Employee.name",
"operator": "contains",
"values": [
"soft"
]
}
];
}
Обратитесь к этому разделу логических логических операторов в документации.