gpt4 book ai didi

ssas - MDX 中的 NONEMPTY 和 CROSSJOIN 性能和顺序

转载 作者:行者123 更新时间:2023-12-01 13:48:20 31 4
gpt4 key购买 nike

我想知道以下两个查询中哪个查询的性能更高?

查询 1:

SELECT NONEMPTY(CROSSJOIN({[Product].[Category].children}, 
{[Scenario].[Scenario].members}
)
) ON COLUMNS
FROM [Analysis Services Tutorial]

查询 2:

SELECT CROSSJOIN(NONEMPTY({[Product].[Category].children}), 
NONEMPTY({[Scenario].[Scenario].members})
) ON COLUMNS
FROM [Analysis Services Tutorial]

我会说查询 2 的性能更高/优化得更好,因为首先你取出所有不必要的成员,然后交叉连接它们。第一个查询交叉连接所有内容,然后取出空值。那是我的猜测,但我希望有人能帮我澄清。

编辑 1 回应一个答案的评论

假设我添加了一个度量作为第二个参数,因此它不会转到“默认度量”。第二个查询如何返回空值?我指定在非空成员之间进行交叉连接。而且我真的不明白无论涉及的维度如何都可以返回不同的结果。对我来说,他们似乎相当。我没有看到什么?

查询 1:

SELECT NONEMPTY(CROSSJOIN({[Product].[Category].children}, 
{[Scenario].[Scenario].members}
), [Total Internet Sales]
) ON COLUMNS
FROM [Analysis Services Tutorial]

查询 2:

SELECT CROSSJOIN(NONEMPTY({[Product].[Category].children},[Total Internet Sales]), 
NONEMPTY({[Scenario].[Scenario].members},[Total Internet Sales])
) ON COLUMNS
FROM [Analysis Services Tutorial]

编辑2

正如答案所说,查询是不一样的。当@GregGalloway 提出其他场景时,我意识到了。我用示例数据做了一个 excel,所以也许有人会发现它有用。 enter image description here

最佳答案

它们并不等同,因为我们将返回不同的结果。例如,针对真正的 Adventure Works(不是某些教程版本),这两个查询返回不同的结果。请注意,Clothing/Kentucky 列在第二个查询中显示为空:

SELECT NONEMPTY(CROSSJOIN({[Product].[Category].children}, 
{[Customer].[State-Province].[State-Province].Members}
), [Measures].[Internet Sales Amount]
) ON COLUMNS
FROM [Adventure Works]
where [Measures].[Internet Sales Amount]



SELECT CROSSJOIN(NONEMPTY({[Product].[Category].children},[Measures].[Internet Sales Amount]),
NONEMPTY({[Customer].[State-Province].[State-Province].Members},[Measures].[Internet Sales Amount])
) ON COLUMNS
FROM [Adventure Works]
where [Measures].[Internet Sales Amount]

请注意,场景维度与 Internet Sales 度量值组无关,我不认为。所以这可能不是一个很好的例子。我为示例选择了产品维度和客户维度。

正如所讨论的(以及您在问题中更新的那样) NonEmpty() 应该始终有第二个参数,以便清楚您正在对 NonEmpty 采取何种措施。您的查询还应该提及一个轴上的度量或 WHERE 子句,这样您就不会返回一些模糊的“默认度量”。我在我的示例中包含了一个带有度量的 WHERE 子句。

无论如何,回答您的问题...假设该度量是物理度量或在 block mode 中运行的经过良好优化的计算度量。如果查询 1 更快,我不会感到惊讶。但这取决于维度的度量和大小以及立方体的稀疏性。这个问题非常理论化,两个查询不会返回相同的结果。

关于ssas - MDX 中的 NONEMPTY 和 CROSSJOIN 性能和顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34033800/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com