Я пытаюсь реализовать простой фильтр в Sisense, но не могу понять.
Мои данные хранятся в PostgresQL БД. Минимальный пример выглядит примерно так:
CREATE TABLE fact_table (
first_name text,
salary integer
);
INSERT INTO fact_table VALUES ('John', 100), ('Jack', 200), ('Mary', 300), ('Klaus', 400);
CREATE TABLE dim_table (
first_name text,
last_name text
);
INSERT INTO dim_table VALUES ('John', 'Smith'), ('Jack', 'Smith'), ('John', 'Jackson'), ('Mary', 'Smith'), ('Klaus', 'Jackson');
Я хочу создать сводную таблицу с first_name
в строках и salary
в качестве значений в Sisense.
Теперь есть два сценария ios Я хочу отфильтровать:
1) Выбрать все first_name
s, для которых существует кто-то с фамилией «Смит»
=> просто в Sisense, просто создайте связь по first_name
<-> first_name
и отфильтруйте 'Smith'
Наш набор результатов - {Джек, Джон, Мэри} и их соответствующая зарплата.
2) Выберите все first_name
s, которые не используются кем-то с фамилией «Смит». Это отрицание 1). Наш ожидаемый результат установлен {Klaus}.
Я не знаю, как это сделать. Тривиально в SQL: SELECT * FROM fact_table WHERE first_name NOT IN (SELECT first_name FROM dim_table WHERE last_name = 'Smith');
В Sisense не нашел подходящего варианта. Если я создаю фильтр списка и снимаю выделение Smith, я получаю все не-Smiths из моей dim_table, что логически не то же самое (и возвращает John вместо Klaus).
Мне, должно быть, не хватает чего-то очевидного. Есть идеи?
Большое спасибо!