Как добавить условие ИЛИ в запрос фильтра Cube.js - PullRequest
1 голос
/ 25 октября 2019

Я хочу добавить условие ИЛИ в JSON-запрос Cube.js. Но как только я добавляю еще одно условие в фильтр, он всегда добавляет условие AND в запрос 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;

1 Ответ

0 голосов
/ 26 октября 2019

Поддержка API для логических операторов пока не поставляется. Между тем есть несколько обходных путей:

  1. Определите измерение, которое имитирует поведение ИЛИ . В вашем случае это
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', '%')` 
    }
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...