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

Ssas mdx查询中的时间范围过滤器,ssas,mdx,Ssas,Mdx,我们有一个具有以下值的表: ItemName数量F位日期 项目1100 2011年1月1日 2011年1月5日第2150项 项目3200 2011年1月14日 项目4 250 2011年1月20日 项目5 1000 2011年2月1日 在MDX查询中,我们需要根据日期范围过滤数据。假设如果我们需要获取日期范围为2011年1月1日至2011年1月31日的物品及其数量,我们将使用以下MDX查询: SELECT NON Empty {[Final Report View For

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

ItemName数量F位日期

项目1100 2011年1月1日

2011年1月5日第2150项

项目3200 2011年1月14日

项目4 250 2011年1月20日

项目5 1000 2011年2月1日

在MDX查询中,我们需要根据日期范围过滤数据。假设如果我们需要获取日期范围为2011年1月1日至2011年1月31日的物品及其数量,我们将使用以下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参数作为2011年1月1日和2011年1月20日传递时,将正确检索项目1到4及其各自的数量。但当FromDate和ToDate被传递为2011年1月1日和2011年1月31日或2011年1月1日和2011年1月19日时,它甚至会返回第5项的值,这是错误的。i、 例如,仅当表中可用的确切日期作为参数传递时,才会返回正确的结果。但当传递表中不可用的日期时,将返回整个数据集

使用“过滤器”时也是如此


是否有指向此问题的指针?

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

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

或者注意只生成现有成员的名称 或者,只需在维度表中填入足够大的日期范围,而不会造成问题。现在不需要添加任何事实,维度表中应该有一个条目。 或者使用MDX中的一些字符串逻辑查找范围左侧的下一个现有字符串或范围右侧的上一个现有字符串。可以在MDX中使用VBA字符串函数。
感谢您的回答,Frank,在您的第二点中,当您说填充维度表时,这是否意味着我必须将缺少的日期值添加到数据源?@Viniez是的,我只是用所有日期填充该表,这些日期将覆盖生成查询的工具可能进入的所有日期范围。因此,这取决于该工具的限制,您需要添加多少。感谢您提供了正确的方向,Frank,没有比填写维度表更简单的解决方案了!