带有NON EMPTY子句的MDX date range未对该范围的数据进行切片

带有NON EMPTY子句的MDX date range未对该范围的数据进行切片,mdx,pentaho,date-range,mondrian,Mdx,Pentaho,Date Range,Mondrian,我正在努力优化查询时间。但是在我的例子中,case1和case2返回相同的结果案例1应返回特定数据范围的结果,即[time].[2015].[5].[10]:[time].[2015].[6].[9]而仅返回[time].[2015].[6].[9]作为案例2的结果案例1返回正确的结果,即范围的数据,但仅当删除非空子句时。删除non-empty子句意味着它将搜索整个数据集,这同样需要花费大量时间。再次案例3返回正确的结果,但操作时间比第一种方法更长。任何人面对这样的问题或可以指导我解决这个问题

我正在努力优化查询时间。但是在我的例子中,
case1
case2
返回相同的结果<代码>案例1应返回特定数据范围的结果,即
[time].[2015].[5].[10]:[time].[2015].[6].[9]
而仅返回
[time].[2015].[6].[9]
作为案例2的结果<代码>案例1返回正确的结果,即范围的数据,但仅当删除非空子句时。删除non-empty子句意味着它将搜索整个数据集,这同样需要花费大量时间。再次
案例3
返回正确的结果,但操作时间比第一种方法更长。任何人面对这样的问题或可以指导我解决这个问题

案例1 案例2 案例3
蒙德里安始终将时间范围作为全水平扫描进行评估。它将加载给定时间级别的所有成员,并开始迭代这些成员,直到找到第一个边界。然后,它将创建一个子列表,直到该范围的最后一个成员

有一个将范围转换为SQL谓词的增强请求


如果您有机会测试原型代码,请让我们知道它是如何为您工作的

Mondrian始终将时间范围作为完整级别扫描进行评估。它将加载给定时间级别的所有成员,并开始迭代这些成员,直到找到第一个边界。然后,它将创建一个子列表,直到该范围的最后一个成员

有一个将范围转换为SQL谓词的增强请求


如果您有机会测试原型代码,请告诉我们它是如何为您工作的

无法想象时间维度级别会如此之大?假设您需要查询5天,即
[Time][2015][5][10]:[Time][2015][5][15]
,那么它也会搜索您的整个100万条记录并返回它。那我们就不能在这几天内。。。?。性能只能针对特定的一天、一个月或一个季度?无法想象时间维度级别会如此之大?假设您需要查询5天,即
[Time].[2015].[5].[10]:[Time].[2015].[5].[15]
,然后它还会搜索您的整个100万条记录并返回它。那我们就不能在这几天内。。。?。性能只能针对特定的一天、一个月或一个季度?无法想象时间维度级别会如此之大?假设您需要查询5天,即
[Time].[2015].[5].[10]:[Time].[2015].[5].[15]
,然后它还会搜索您的整个100万条记录并返回它。那我们就不能在这几天内。。。?。性能只能针对特定的日期、月份或季度?
WITH 
  MEMBER [Measures].[abc_type] AS 
    [abc].CurrentMember.Properties("abc_type") 
  MEMBER [Measures].[abc_desc] AS 
    [abc].CurrentMember.Properties("abc_desc") 
  MEMBER [Measures].[abc_class] AS 
    [abc].CurrentMember.Properties("abc_class") 
SELECT 
  NON EMPTY 
    {
      [Measures].[abc_type]
     ,[Measures].[abc_desc]
     ,[Measures].[abc_class]
    } ON COLUMNS
 ,NON EMPTY 
    Filter
    (
      {[abc].[abc_id].MEMBERS}
     ,St_contains
      (
        [district].[district_id].[1].Properties("the_geom")
       ,[abc].CurrentMember.Properties("the_geom")
      )
    ) ON ROWS
FROM [analytics_cube]
WHERE 
  [time].[2015].[5].[10] : [time].[2015].[6].[9];
WITH 
  MEMBER [Measures].[abc_type] AS 
    [abc].CurrentMember.Properties("abc_type") 
  MEMBER [Measures].[abc_desc] AS 
    [abc].CurrentMember.Properties("abc_desc") 
  MEMBER [Measures].[abc_class] AS 
    [abc].CurrentMember.Properties("abc_class") 
SELECT 
  NON EMPTY 
    {
      [Measures].[abc_type]
     ,[Measures].[abc_desc]
     ,[Measures].[abc_class]
    } ON COLUMNS
 ,NON EMPTY 
    Filter
    (
      {[abc].[abc_id].MEMBERS}
     ,St_contains
      (
        [district].[district_id].[1].Properties("the_geom")
       ,[abc].CurrentMember.Properties("the_geom")
      )
    ) ON ROWS
FROM [analytics_cube]
WHERE 
  [time].[2015].[6].[9];
WITH 
  MEMBER [Measures].[abc_type] AS 
    [abc].CurrentMember.Properties("abc_type") 
  MEMBER [Measures].[abc_desc] AS 
    [abc].CurrentMember.Properties("abc_desc") 
  MEMBER [Measures].[abc_class] AS 
    [abc].CurrentMember.Properties("abc_class") 
  MEMBER [time].[newtime] AS 
    Aggregate([time].[2015].[5].[10] : [time].[2015].[6].[9]) 
SELECT 
  NON EMPTY 
    {
      [Measures].[abc_type]
     ,[Measures].[abc_desc]
     ,[Measures].[abc_class]
    } ON COLUMNS
 ,NON EMPTY 
    Filter
    (
      {[abc].[abc_id].MEMBERS}
     ,St_contains
      (
        [district].[district_id].[1].Properties("the_geom")
       ,[abc].CurrentMember.Properties("the_geom")
      )
    ) ON ROWS
FROM [analytics_cube]
WHERE 
  [time].[newtime];