gpt4 book ai didi

performance - MDX 查询以在 icCube 中查找最后一个非空值

转载 作者:行者123 更新时间:2023-12-04 03:22:49 24 4
gpt4 key购买 nike

关注 post来自 Chris Web 我正在寻找一种快速的方法来查找客户的最后一次购买。

我使用如下 MDX 语句:

WITH FUNCTION previous_buys() AS tail( nonempty({NULL:[Time].[Time].currentmember.prevmember} ,[measures].[sales amt]),1)
MEMBER [last buy] as previous_buys().(0).key

select [measures].[last buy] on 0
, [Customers].[Customers].[name].members on 1
from [Store Sales]
where [Time].[Time].[day].&[2015-12-20T00:00:00.000]

这符合预期,但需要很长时间。有没有一种简单的方法可以以某种方式加快此查询的速度。由于 icCube 与 Microsoft MDX 有所不同,因此我不能只是复制 Chris Web 的解决方案。

有任何想法吗?

最佳答案

我们将在此解决方案中遇到的主要问题是我们评估 {NULL:[Time].[Time].currentmember.prevmember} 计数成员时的可扩展性。

我认为使用带有 Head 函数的 Reverse 不会评估整个集合,但是 Empty 函数的当前实现“具体化”了该集合。这意味着我们正在评估所有成员。还不是一个有效的解决方案。

另一个更优雅的解决方案是使用递归函数。这将大大减少被评估成员的数量。

WITH 
FUNCTION previous_buys(t_) AS IIF( (t_,[Measures].[Amount]) = NULL, previous_buys(t_.prevMember), t_ )
MEMBER [last buy] as previous_buys( [Time].[Calendar].current).name

SELECT
[measures].[last buy] on 0,
[Customers].[Geography].[Region] on 1
FROM [Sales]
WHERE [Time].[Calendar].[Year].[2006].[Q1 2006].[Jan 2006].[8 Jan 2006]

如果您有很多空日期,则可能会使算法复杂化到一个月级别以检查空日期。这将在一次迭代中评估一整个月,而不是我们在日版中的 30/31。

最后一个也是最快的一个数量级是依赖icCube的聚合引擎。我们在这里想要的是一个返回最后一天的度量。

这个想法是添加一个以日期作为输入值和最大值作为聚合方法的度量。然后我们将使用 eval - 在我们缓存子多维数据集时很重要 - 在具有这个新度量的集合上。

关于performance - MDX 查询以在 icCube 中查找最后一个非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903381/

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