微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在mondrian mdxSaiku CE中搜索多个日期时出现性能问题

如何解决在mondrian mdxSaiku CE中搜索多个日期时出现性能问题

我对mondrian来说还比较陌生,我遇到了一个问题,对于我的团队来说,这似乎是个障碍。

我们有一个看起来像这样的简单数据库

  • 事实结果(member_id,period_id,约10个简单度量)
  • dim_members(ID,名字,名字)
  • dim_daily_periods(id,日期,星期,月份,年....)

我们使用Mondrian 4(与Saiku CE一起使用)+ Postgresql,事实如下:

  • db仍然很小-大约10万个事实-连续8个月的数据
  • 成员维度的名字和姓氏字段具有高基数(每个记录有12k记录)
  • mondrian引擎的每个SQL查询都需要~~ 1-2毫秒
  • 一天最多包含30位成员

我们正在尝试制作一个显示简单表格的报告:

名字|姓|小节1 ...小节10 |

mondrian完成的所有SQL查询最多需要12毫秒,因此无关紧要。

saiku生成的MDX如下:

WITH
SET [~FILTER] AS
    {[Period].[Date Only].[2020-09-01],[Period].[Date Only].[2020-09-02]}
SET [~ROWS_Members_First name] AS
    {[Members].[First name].[First name].Members}
SET [~ROWS_Members_Last name] AS
    {[Members].[Last name].[Last name].Members}
SELECT
NON EMPTY {[Measures].[Measure1],... [Measures].[Measure10]} ON COLUMNS,NON EMPTY NonEmptyCrossJoin([~ROWS_Members_First name],[~ROWS_Members_Last name]) ON ROWS
FROM [Member]
WHERE [~FILTER]

那么您问的问题在哪里? 问题在于性能……这是生成结果的时间,具体取决于时间过滤器:

1 day -> 0.6 sec (nice !)
2 days -> 32 sec
3 days -> 90 sec
...
7 days -> 600 sec

如您所见,这看起来很恐怖。每天最多有 30个成员,因此SQL查询非常小。 我真的不喜欢日志中的一件事是,我可以看到每个sql都包含所有可用成员,而不是仅依赖于所选时间范围内可用的那些成员...

有人知道这里发生了什么吗?非常感谢您的帮助。

更新1:

我发现的有趣的事情是,当我添加任何一种度量过滤器(例如[Measure 1]> 0)时,查询返回的速度甚至快20-30倍!并且因为这只是一个永远为真的伪过滤器...结果是相同的。 对于SQL查询,唯一更改的是在查询值之前,已对维度进行了相应过滤,以使用所使用的过滤器...因此,仅使用已过滤的事实成员中存在的维度值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。