MDX 小于等于过滤器表达式不起作用

MDX Less Than Equal to Filter Expression Not Working

我在 SQL Server 2016 上有以下 MDX 查询 运行:

SELECT NON EMPTY(Measures.[Enrolments Count]) ON COLUMNS,                   
                    NON EMPTY FILTER ( [Term Record Creation].[Year].CHILDREN * [Term Record Creation].[Week].CHILDREN *
                        [Term Enrolments].[Term Year].CHILDREN ,
                        [Term Record Creation].[Week]  <= 5)
                     DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
        FROM [Enrolments]

我试图只接受在一年中的第 5 周(该周是 ISO 周)之前创建的学期记录的注册。

Term Year 是学期开始的年份。它是术语记录创建维度之外的一列,即 [Term Record Creation].[Year][Term Record Creation].[Week].

我遇到的问题是过滤器正在执行某种过滤(因为我的度量列很低),但我仍然在一年中的所有星期都得到一个反对他们的数字,例如我在结果集中有如下一行:

Creation Year Creation Week Term Year Enrolments Count 2012 16 2013 4

如果有人能解释问题所在并提供解决方案,我将不胜感激。

谢谢。

它不会工作:

[Term Record Creation].[Week]  <= 5

您将周层次结构与数字进行比较。这没有意义。尝试如下操作:

Select
[Measures].[Enrolments Count] on columns,                   
Non Empty 
    Filter(
        [Term Record Creation].[Week].[Week].Members,
        Right(
            [Term Record Creation].[Week].CurrentMember.Member_Caption,
            2
        )  <= "05"
    ) *
    [Term Record Creation].[Year].[Year].Members *    
    [Term Enrolments].[Term Year].Children on rows  
From [Enrolments]

也许尝试只过滤周:

SELECT 
  NON EMPTY 
    Measures.[Enrolments Count] ON COLUMNS
 ,NON EMPTY 
      [Term Record Creation].[Year].Children*
      Filter
      (
        [Term Record Creation].[Week].Children
       ,
        [Term Record Creation].[Week] <= 5
      )*
      [Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];

尽管我认为 Daylo 是正确的,因为您需要使用密钥:

SELECT 
  NON EMPTY 
    Measures.[Enrolments Count] ON COLUMNS
 ,NON EMPTY 
      [Term Record Creation].[Year].Children*
      Filter
      (
        [Term Record Creation].[Week].Children
       ,
        [Term Record Creation].[Week].CURRENTMEMBER.MEMBER_KEY <= 5
      )*
      [Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];

在我们的立方体中,一周的关键是这样的201709所以这可能会更好:

SELECT 
  NON EMPTY 
    Measures.[Enrolments Count] ON COLUMNS
 ,NON EMPTY 
      [Term Record Creation].[Year].Children*
      Filter
      (
        [Term Record Creation].[Week].Children
       ,
        Cint([Term Record Creation].[Week].CurrentMember.Member_Caption) <= 5
      )*
      [Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];

好的 - 最后一种方法可以针对 AdvWrks:

的类似脚本进行测试
SELECT 
  [Measures].[Internet Sales Amount] ON 0
 ,
    [Product].[Product Categories].[Subcategory]
  * 
    Filter
    (
      [Date].[Day of Month].[Day of Month]
     ,
      Cint([Date].[Day of Month].CurrentMember.Member_Caption) > 10
    ) ON 1
FROM [Adventure Works];

结果: