Complex LastNonEmpty每天为每个成员获取最后一次操作

时间:2016-07-07 10:23:37

标签: ssas mdx olap olap-cube

我们假设我们有运营商日志事实表(约5000万行),其中包含以下字段:

  • 活动客户日期
  • Event1,Client1,2016-10-10
  • Event1,Client1,2016-10-11

三个维度:事件(~20行),客户端(~500 000行),日期(~2000行)。

我想在某一天看到每位客户的最后一次行动。因此,在报告中,我想选择某一天并获得结果。

报告如下:

  • 活动 CountOfClients
  • Event1,200000
  • Event2,150000
  • Event3,100000

目前的解决方法:完全是DWH,我每天为每个客户计算最后一个事件,而且它很大(500 000 * 2000 = 1 000 000 000行)。

MDX workarouds :我尝试重用Chris Webb's idea,但是对于每个客户端重新聚合仍然很慢,但到目前为止它是最快的MDX解决方法。

我想还有一些其他的解决方法可以在没有巨大的表填充的情况下动态获取结果。

MDX限制:

  • 如果我们选择成员,则LastNonEmpty聚合无法获得结果 轴(我们只需要一个 - 最后一个事件)。
  • 我们必须检查整个历史记录直到今天,并为每个客户端使用重新计算集{NULL:[Date]。[Date] .CURRENTMEMBER},但是我发现了一个肮脏的黑客方法,通过在MDX计算中使用VisualTotal来加速它。副作用:[日期]。[日期]。[全部]成员将重新计算报告中的所有度量。

With [Measures].[CustomersWithSalesTillToday] as SUM( VisualTotals([Date].[Date].[All] + NULL:[Date].[Date].CURRENTMEMBER), NULL ) + SUM( [Customer].[Customer].[Customer].Members, IIF( ([Date].[Date].[All],[Measures].[Internet Sales Amount]) > 0, 1, NULL ) )

DWH限制:

  • 巨大的表格,BackData可以更改,处理时间可以提升 一天。

实际上我可能会分享这方面的其他一些经验,但我希望你有我的想法。

0 个答案:

没有答案