MDX查询-年初至今由于位置原因产生不正确的结果

MDX查询-年初至今由于位置原因产生不正确的结果,mdx,Mdx,我想返回多个期间(如2012年3月至2013年1月)的年初至今(即1月至当前期间)值。然而,可以理解的是,当我应用where条款将其限制在“2012年3月至2013年1月”时,我们失去了YTD中的1月和2月值。下面是一些示例代码: WITH MEMBER [Measures].[Last Day of Month] AS TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBER_CAPTION MEM

我想返回多个期间(如2012年3月至2013年1月)的年初至今(即1月至当前期间)值。然而,可以理解的是,当我应用where条款将其限制在“2012年3月至2013年1月”时,我们失去了YTD中的1月和2月值。下面是一些示例代码:

WITH 
  MEMBER [Measures].[Last Day of Month] AS 
    TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBER_CAPTION
  MEMBER [Measures].[Calculate YTD] AS 
    Sum
    (
      periodstodate(
        [Date].[Calendar].[Year],[Date].[Calendar].CurrentMember
      )
     ,[Measures].[Internet Total Sales]
    ) 
SELECT 
  { 
   [Measures].[Last Day of Month]
   ,[Measures].[Internet Total Sales]
   ,[Measures].[Calculate YTD]
  } ON COLUMNS,
  [Date].[Calendar].[Month] 
  ON ROWS
FROM [Adventure Works Internet Sales Model]
WHERE 
(
 [Date].[Date].&[2012-03-01T00:00:00]:
 [Date].[Date].&[2013-01-01T00:00:00]
);
上述查询的结果与不正确的年初至今:

3-Mar   $373,483.01

4-Apr   $773,818.62

5-May   $1,132,696.51

6-Jun   $1,687,856.65

7-Jul   $2,132,414.88

8-Aug   $2,656,332.26

9-Sep   $3,142,509.71

10-Oct  $3,677,669.20

11-Nov  $4,215,624.71

12-Dec  $4,840,126.88

1-Jan   $29,456.25
我希望查询返回的值(正确的YTD值):


尝试使用YTD函数。无论是否使用where子句,它都将为您提供正确的结果

(AdventureWorks 2014,互联网销售额计量的年初至今)

或使用截止日期:

WITH 

   MEMBER [Measures].[Calculate YTD] AS 
    sum
    (
      periodstodate(
       [Date].[Calendar].[Calendar Year],   
            [Date].[Calendar].currentmember
      )
     ,[Measures].[Internet Sales Amount]
    ) 


SELECT 
  { 
  [Measures].[Internet Sales Amount]
  ,[Measures].[Calculate YTD]
  } ON COLUMNS,
  [Date].[Calendar].[Month] 
  ON ROWS
FROM [Adventure Works]
WHERE 
(
 [Date].[Date].&[20120301]:
 [Date].[Date].&[20130101]
);
两个查询返回相同的结果:

March 2012  $1,375,841.32
April 2012  $1,776,176.93
May 2012    $2,135,054.82
June 2012   $2,690,214.97
July 2012   $3,134,773.20
August 2012 $3,658,690.58
September 2012  $4,144,868.03
October 2012    $4,680,027.51
November 2012   $5,217,983.03
December 2012   $5,842,485.20
January 2013    $857,689.91

尝试使用YTD函数。无论是否使用where子句,它都将为您提供正确的结果

(AdventureWorks 2014,互联网销售额计量的年初至今)

或使用截止日期:

WITH 

   MEMBER [Measures].[Calculate YTD] AS 
    sum
    (
      periodstodate(
       [Date].[Calendar].[Calendar Year],   
            [Date].[Calendar].currentmember
      )
     ,[Measures].[Internet Sales Amount]
    ) 


SELECT 
  { 
  [Measures].[Internet Sales Amount]
  ,[Measures].[Calculate YTD]
  } ON COLUMNS,
  [Date].[Calendar].[Month] 
  ON ROWS
FROM [Adventure Works]
WHERE 
(
 [Date].[Date].&[20120301]:
 [Date].[Date].&[20130101]
);
两个查询返回相同的结果:

March 2012  $1,375,841.32
April 2012  $1,776,176.93
May 2012    $2,135,054.82
June 2012   $2,690,214.97
July 2012   $3,134,773.20
August 2012 $3,658,690.58
September 2012  $4,144,868.03
October 2012    $4,680,027.51
November 2012   $5,217,983.03
December 2012   $5,842,485.20
January 2013    $857,689.91

不太确定这两种方法是否有效,但不管怎样

子选择

WITH 
  MEMBER [Measures].[Last Day of Month] AS 
    TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBER_CAPTION
  MEMBER [Measures].[Calculate YTD] AS 
    Sum
    (
      periodstodate(
        [Date].[Calendar].[Year],[Date].[Calendar].CurrentMember
      )
     ,[Measures].[Internet Total Sales]
    ) 
SELECT 
  { 
   [Measures].[Last Day of Month]
   ,[Measures].[Internet Total Sales]
   ,[Measures].[Calculate YTD]
  } ON COLUMNS,
  [Date].[Calendar].[Month] 
  ON ROWS
FROM 
( 
SELECT
  [Date].[Date].&[2012-03-01T00:00:00]:
  [Date].[Date].&[2013-01-01T00:00:00] ON 0
FROM [Adventure Works Internet Sales Model] 
);
具有
子句:

WITH 
MEMBER [Measures].[Last Day of Month VALUE] AS 
    TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBERVALUE 

  MEMBER [Measures].[Last Day of Month] AS 
    TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBER_CAPTION
  MEMBER [Measures].[Calculate YTD] AS 
    Sum
    (
      periodstodate(
        [Date].[Calendar].[Year],[Date].[Calendar].CurrentMember
      )
     ,[Measures].[Internet Total Sales]
    ) 
SELECT 
  { 
   [Measures].[Last Day of Month VALUE]
   ,[Measures].[Last Day of Month]
   ,[Measures].[Internet Total Sales]
   ,[Measures].[Calculate YTD]
  } ON COLUMNS,
  [Date].[Calendar].[Month] 
  HAVING 
    (
      [Measures].[Last Day of Month VALUE] >=CDATE('3/1/2012')   
      AND  [Measures].[Last Day of Month VALUE] <=CDATE('1/1/2013')
    ) 
  ON ROWS
FROM [Adventure Works Internet Sales Model];
与
成员[度量][月的最后一天值]为
尾部(现有[Date].[Date].[Date].MEMBERS).项(0).项(0).成员值
成员[措施][月的最后一天]作为
尾部(现有[Date].[Date].[Date].MEMBERS).项目(0).项目(0).成员标题
成员[度量][计算年初至今]为
总和
(
周期截止日期(
[日期][日历][年],[日期][日历].CurrentMember
)
,[措施][互联网总销售额]
) 
挑选
{ 
[度量值][月的最后一天值]
,[措施][月的最后一天]
,[措施][互联网总销售额]
,[度量值][计算年初至今]
}在专栏上,
[日期][日历][月份]
有
(
[度量值].[月的最后一天值]>=CDATE('2012年3月1日')

和[度量值][月的最后一天值]不太确定这两种方法是否有效,但无论如何

子选择

WITH 
  MEMBER [Measures].[Last Day of Month] AS 
    TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBER_CAPTION
  MEMBER [Measures].[Calculate YTD] AS 
    Sum
    (
      periodstodate(
        [Date].[Calendar].[Year],[Date].[Calendar].CurrentMember
      )
     ,[Measures].[Internet Total Sales]
    ) 
SELECT 
  { 
   [Measures].[Last Day of Month]
   ,[Measures].[Internet Total Sales]
   ,[Measures].[Calculate YTD]
  } ON COLUMNS,
  [Date].[Calendar].[Month] 
  ON ROWS
FROM 
( 
SELECT
  [Date].[Date].&[2012-03-01T00:00:00]:
  [Date].[Date].&[2013-01-01T00:00:00] ON 0
FROM [Adventure Works Internet Sales Model] 
);
具有
子句:

WITH 
MEMBER [Measures].[Last Day of Month VALUE] AS 
    TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBERVALUE 

  MEMBER [Measures].[Last Day of Month] AS 
    TAIL(EXISTING [Date].[Date].[Date].MEMBERS).ITEM(0).ITEM(0).MEMBER_CAPTION
  MEMBER [Measures].[Calculate YTD] AS 
    Sum
    (
      periodstodate(
        [Date].[Calendar].[Year],[Date].[Calendar].CurrentMember
      )
     ,[Measures].[Internet Total Sales]
    ) 
SELECT 
  { 
   [Measures].[Last Day of Month VALUE]
   ,[Measures].[Last Day of Month]
   ,[Measures].[Internet Total Sales]
   ,[Measures].[Calculate YTD]
  } ON COLUMNS,
  [Date].[Calendar].[Month] 
  HAVING 
    (
      [Measures].[Last Day of Month VALUE] >=CDATE('3/1/2012')   
      AND  [Measures].[Last Day of Month VALUE] <=CDATE('1/1/2013')
    ) 
  ON ROWS
FROM [Adventure Works Internet Sales Model];
与
成员[度量][月的最后一天值]为
尾部(现有[Date].[Date].[Date].MEMBERS).项(0).项(0).成员值
成员[措施][月的最后一天]作为
尾部(现有[Date].[Date].[Date].MEMBERS).项目(0).项目(0).成员标题
成员[度量][计算年初至今]为
总和
(
周期截止日期(
[日期][日历][年],[日期][日历].CurrentMember
)
,[措施][互联网总销售额]
) 
挑选
{ 
[度量值][月的最后一天值]
,[措施][月的最后一天]
,[措施][互联网总销售额]
,[度量值][计算年初至今]
}在专栏上,
[日期][日历][月份]
有
(
[度量值].[月的最后一天值]>=CDATE('2012年3月1日')

和[度量值][月的最后一天值]您好Vldmrrdjcc,非常感谢您的回答!我解释的问题是正确的。但是我在这里的财政年度实际上是7月至6月。因此,我认为我不能使用YTD函数,因为它依赖于时间层次结构中的年份级别。我所知的唯一解决方法是使用如上所述的时段STODATE。是否有办法不通过t重新调整它他是where子句吗?我不太明白你想达到什么目的,因为当我使用你的公式,比如这个成员[Measures].[Calculate YTD]作为总和(periodstodate([Date].[Calendar].[Calendar].[Calendar].[Calendar].currentmember),[Measures].[Internet Sales Amount])我也得到了与YTD相同的结果,所以同样,你会得到相同的数字,这些数字不会受到where子句HI Vldmrrdjcc的影响,非常感谢你的回答!我解释的问题是正确的。但是我的财政年度实际上是7月至6月。所以我认为我不能使用YTD函数,因为它依赖于yea时间层次结构中的r级别。我所知道的唯一解决方法是使用如上所述的periodstodate。是否有某种方法不通过where子句对其进行重新限制?我不太明白您想要实现什么,因为当我使用您的公式时,像这个成员一样[Measures].[Calculate YTD]作为sum(periodstodate([Date])。【日历】【日历年】【日期】【日历】【当前成员】【度量】【互联网销售额】)我也得到了和年初至今一样的结果,所以同样的,你也会得到同样的数字,这些数字不会受到where的影响clause@phil…如果这是答案,也许您可以取消检查错误答案并检查此答案-这有助于未来用户(并帮助我尝试越过20k线!)@whytheq-很抱歉,我想我可以勾选你和其他人,因为他们都是正确的。我勾选了你的,因为你是第一张海报(我认为这是正确的礼仪?)。但是我认为你需要删除子集选项,因为这似乎不起作用。@phil没问题,phil。很高兴答案有帮助。嗯。有人,没有勇气解释自己,把我的答案记下来了…在问题被标记为正确答案后,这有点奇怪,因为这似乎表明它是正确的答案!定义它ely不是我。从我的观点来看,这是正确的。再次感谢!@phil……如果这是答案,也许你可以取消对错误答案的检查,并检查这一个-这有助于未来用户(并帮助我尝试越过20k线!)@whytheq-很抱歉,我想我可以勾选你和其他人,因为他们都是正确的。我勾选了你的,因为你是第一张海报(我认为这是正确的礼仪?)。但是我认为你需要删除子集选项,因为这似乎不起作用。@phil没问题,phil。很高兴答案有帮助。嗯。有人,没有勇气解释自己,把我的答案记下来了……在问题被标记为正确答案后,这似乎有点奇怪,因为这表明答案是正确的