考虑Dimension_A和Dimension_B以及Measure_Amt 我需要前100个非空成员才能在Dimension_A和Dimension_B之间进行交叉连接以获得Measure_Amt。以下查询有效,但由于这些维度很大(从百万到2000万)
,因此需要花费大量时间 with set a as subset(Dimension_A.levels(1),0,100)
set x as SubSet(NONEMPTYCROSSJOIN(a,Dimension_B.levels(1)), 0, 100)
select [Measures].[Measure_Amt] on 0 ,
x on 1
from MY_CUBE
和where子句,
with set a as subset(Dimension_A.levels(1),0,100)
set x as SubSet(NONEMPTYCROSSJOIN(a,Dimension_B.levels(1)), 0, 100)
select [Measures].[Measure_Amt] on 0 ,
x on 1
from MY_CUBE where Dimension_C.member_C1
获取单个Dimension的前100个成员很快,非空函数占大多数时间。 由于我只需要前100个非空成员而不是下一个子集,有没有办法编写更好的查询。
答案 0 :(得分:0)
当你说“我需要前100个非空成员用于Dimension_A和Dimension_B之间用于Measure_Amt的交叉连接”时,我认为你的意思是想要前100个结果,其中Measure_Amt对于两个交叉不为空 - 连接集。
如果是这样,我相信这是另一种编写查询的方法,可以提高性能。
WITH
SET [X] AS [Dimension_A].LEVELS(1) * [Dimension_B].LEVELS(1)
SELECT
[Measures].[Measure_Amt] ON 0,
SUBSET(
NONEMPTY(
[X]
, [Measures].[Measure_Amt]
)
, 0
, 100
) ON 1
FROM
[MY_CUBE]
WHERE
[Dimension_C].[member_C1]