MDX过滤更精细的价值

时间:2016-09-12 09:36:54

标签: date filter mdx

我有一个MDX查询:

    SELECT
    ({[Measures].[Sales Count]}) ON COLUMNS, 
    {Filter([Creation Date].[Day].Members, 
    ([Creation Date].[Day].CurrentMember.Name >= '2016/09/01' AND 
    [Creation Date].[Day].CurrentMember.Name <= '2016/09/05'))} ON ROWS  
           FROM [Date Sales Schema]

它允许我选择日期范围的销售计数。 此外,我可以通过将[创建日期]。[日]查询到[创建日期]。[分钟]来过滤分钟。 但是,如果我想要按分钟过滤,并获得销售计数结果,我不知道,我必须写什么查询?

例如: 从9月8日 - 15:57过滤到9月10日 - 13:35 - 结果应为:

  • 9月8日15:57 - 23:59的销售数量
  • 9月9日24小时的销售数量
  • 9月10日00:00 - 13:35的销售数量

此类查询接近决定:

SELECT 
  {[Measures].[Sales Count]} ON COLUMNS
 ,Exists
  (
    [Creation Date].[Day].MEMBERS
   ,Filter
    (
      [Creation Date].[Minute].MEMBERS
     ,
        [Creation Date].[Minute].CurrentMember.Name >= '2016/09/01 15:57'
      AND 
        [Creation Date].[Minute].CurrentMember.Name <= '2016/09/10 15:57'
    )
  ) ON ROWS
FROM [Date Sales Schema];

但是,例如,如果我在10.02.2016 23:55进行销售,并且过滤器于10.02.2016 23:54开始,请求显示10.02的所有销售额。< / p>

下一个查询计算所有期间的总和,并将总和打印为每个日期维度的度量:

WITH MEMBER [Measures].[Day Period Sales Count] AS Aggregate(Filter
    (
      [Creation Date].[Minute].MEMBERS
     ,
        [Creation Date].[Minute].CurrentMember.Name >= '2016/09/01 07:27'
      AND 
        [Creation Date].[Minute].CurrentMember.Name <= '2016/09/01 15:57'
    )
)
SELECT 
([Measures].[Day Period Sales Count]) ON COLUMNS ,{[Creation Date].[Day].[2016/09/01],[Creation Date].[Day].[2016/09/02]} ON ROWS
FROM [Date Sales Schema]

但它没有按天划分结果

2 个答案:

答案 0 :(得分:2)

您可以将分钟过滤器放在子选择中:

SELECT 
  {[Measures].[Sales Count]} ON COLUMNS
 ,{
    Filter
    (
      [Creation Date].[Day].MEMBERS
     ,
        [Creation Date].[Day].CurrentMember.Name >= '2016/09/01'
      AND 
        [Creation Date].[Day].CurrentMember.Name <= '2016/09/05'
    )
  } ON ROWS
FROM 
(
  SELECT 
    [Creation Date].[Minute].&[1] : [Creation Date].[Minute].&[10] ON 0
  FROM [Date Sales Schema]
);

没有subselect

SELECT 
  {[Measures].[Sales Count]} ON COLUMNS
 ,Exists
  (
    [Creation Date].[Day].MEMBERS
   ,Filter
    (
      [Creation Date].[Minute].MEMBERS
     ,
        [Creation Date].[Minute].CurrentMember.Name >= '2016/09/01 15:57'
      AND 
        [Creation Date].[Minute].CurrentMember.Name <= '2016/09/10 15:57'
    )
  ) ON ROWS
FROM [Date Sales Schema];

试试这个:

WITH 
  MEMBER [Measures].[Day Period Sales Count] AS 
    Aggregate
    (
      (EXISTING 
        Filter
        (
          [Creation Date].[Minute].MEMBERS
         ,
            [Creation Date].[Minute].CurrentMember.Name >= '2016/09/01 07:27'
          AND 
            [Creation Date].[Minute].CurrentMember.Name <= '2016/09/01 15:57'
        ))
     ,[Measures].[Sales Count]
    ) 
SELECT 
  [Measures].[Day Period Sales Count] ON COLUMNS
 ,{
    [Creation Date].[Day].[2016/09/01]
   ,[Creation Date].[Day].[2016/09/02]
  } ON ROWS
FROM [Date Sales Schema];

答案 1 :(得分:0)

了解您的日期/时间维度是如何构建的。

分钟/小时是日期的属性吗?是否有任何与这两者相关的层次结构?

您可以将日期设为RANGE。甚至应该有助于提高表现。

[时间]部分...... SSAS不准备处理分钟和小时以及日期,除非你实际上在层次结构中同时关联,这应该使得它与Range非常直接地获得所有值。只需在子选择中使用Range,就像他们指出的那样,并使用轴上的 NameError: undefined local variable or method `user' for #<RSpec::ExampleGroups::Address:0x00000001a94b00> # ./spec/models/addres

[Creation Date].[Day]

但这很大程度上取决于你的尺寸。