避免多次执行巨大的中间查询的最佳做法是什么?

What is the best practise to avoid executing a huge intermediate query multiple times?

由于业务原因,我无法指定查询。另外,我不能创建新的视图、表,我只有对数据源的只读访问权限。

所以,问题是我有一个视图,后面有一个非常大的查询。这是无法更改的。然后,我有一个从该视图中获取数据的查询。我们称之为 LONGQUERY。 (运行 它太长了 - 我无法更改查询)

然后,这个 select 查询是几个较小查询的基础(所以它们都像“select [...] 来自 LONGQUERY)——近 30 个,但所有这些小查询具有相同的列。

如何只查询 LONGQUERY 一次?

如果我了解您的需求,您可以将整个 LongQuery 存储到一个文件中,然后对其进行查询 - 或者进行常驻加载(两者都可以更快 - 这取决于您在做什么)。

你会做类似的事情

LongQuery: SELECT * FROM LONGQUERY;
Store LongQuery into [c:\Data\LongQuery.qvd] (qvd);
Drop Table LongQuery;
SmallQuery1: LOAD field1, field2 from [c:\Data\LongQuery.qvd] (qvd) where A=1;
SmallQuery2: LOAD field1, field2 from [c:\Data\LongQuery.qvd] (qvd) where B=1;

LongQuery: SELECT * FROM LONGQUERY;
SmallQuery1: LOAD field1, field2 Resident LongQuery where A=1;
SmallQuery2: LOAD field1, field2 Resident LongQuery where B=1;
Drop Table LongQuery;

也就是说,我不确定您为什么要对相同的字段执行 30 个子查询 - 在一个具有多个过滤器的查询中它们不可能吗?在上述两种情况下,您实际上只会得到 1 table "SmallQuery1",因为 Qlik 会自动将两个 table 与相同的字段连接在...

这就是你想要的吗?

从长远来看,最佳做法是将您的重新加载过程分为两部分 - 一个文件执行 select 并从 LONGQUERY 存储,另一个文件执行 QVD 文件的其余处理( s) 这节省了 - 这样你就不必在对其他 30 个查询进行开发工作时重新查询 LONGQUERY ...这是多层架构的开始,这在 Qlik 中很常见.