繁体   English   中英

mdx查询中的时间范围过滤器

[英]time range filter in mdx query

我们有一个具有以下值的表:

项目名称数量F位日期

项目1100 2011年1月1日

Item2 150 1/5/2011

项目3 200 2011年1月14日

项目4 250 1/20/2011

项目5 1000 2/1/2011

在MDX查询中,我们需要根据日期范围过滤数据。 假设我们需要获取日期范围为01/01/2011至01/31/2011的商品及其数量,我们使用以下MDX查询:

SELECT 
   NON Empty 
      {[Final Report View For Scorecards].[F Bit Date].Children} ON ROWS, 
   NON Empty 
      {[Measures].[Qty]} ON COLUMNS 
FROM 
  ( 
  SELECT 
     ( 
    {[Final Report View For Scorecards].[F Bit Date].&[2011-01-01T00:00:00] : 
     [Final Report View For Scorecards].[F Bit Date].&[2011-01-31T00:00:00]} 
     ) ON COLUMNS 
  FROM [FinalReportView] 
  )

在此处,当FromDate和ToDate参数分别作为01/01/2011和01/20/2011传递时,正确检索具有相应数量的项目1至4。 但是,当FromDate和ToDate作为01/01/2011和01/31/2011(或)01/01/2011和01/19/2011传递时,它甚至返回Item5的值,这是错误的。 即,仅当表中可用的确切日期作为参数传递时,它才返回正确的结果。 但是,当传递表中不可用的日期时,将返回整个数据集。

使用“ FILTER”时相同。

有任何指向这个问题的指针吗?

如果使用不存在的成员名称,则(如果将维度的MdxMissingMemberMode配置为等效于Ignore的默认设置),则Analysis Services会将无效的成员名称转换为NULL 范围运算符:null解释为无界,即,如果在范围的右侧使用null ,则表示“到级别的最后一个成员”,而在左侧:则表示“从级别的第一个成员开始”水平”。

您可以采取什么措施解决该问题:

  • 请注意只生成现有成员的名称
  • 或仅用足够大的日期范围填充维度表,以免引起问题。 这些天您无需添加任何事实,只需在维度表中添加一个条目即可。
  • 或在MDX中使用某些字符串逻辑来查找下一个存在的对象(范围的左侧)或上一个存在的对象(范围的右侧)。 您可以在MDX中使用VBA字符串函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM