我正试着在Sisense中实现一个简单的过滤器,但是我搞不懂。
我的数据存储在PostgresQL DB中。一个最小的示例如下所示:
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,在Sisense中使用salary作为值。
现在我要过滤两个场景:
1)选择所有first_name,其中存在姓'Smith‘的人
在Sisense中=>很简单,只需在first_name <-> first_name上创建一个关系并过滤'Smith‘即可。
我们的结果集是{Jack,John,Mary}和他们各自的薪水。
2)选择all first_names,这不会被姓'Smith‘的人共享。这是1)的否定。我们预期的结果集{Klaus}。
我不知道该怎么做。这在SQL中很简单:SELECT * FROM fact_table WHERE first_name NOT IN (SELECT first_name FROM dim_table WHERE last_name = 'Smith');
我还没有在Sisense中找到任何合适的选项。如果我创建一个列表过滤器并取消选择Smith,我将从我的dim_table中获得所有非Smith,这在逻辑上是不同的(并且返回John而不是Klaus)。
我肯定漏掉了什么明显的东西。有什么想法吗?
非常感谢!
发布于 2020-05-29 22:32:56
我认为你的第一个和第二个过滤器场景都可以通过弹性立方中的自定义SQL来实现。您需要在两个表上执行左连接,并从事实中获取每一行。在你的first_name过滤器中,你可以取消选择first_name作为"Smith“,但是选择null值来显示"Klaus”

https://stackoverflow.com/questions/62026421
复制相似问题