MDX查询-年初至今由于位置原因产生不正确的结果
我想返回多个期间(如2012年3月至2013年1月)的年初至今(即1月至当前期间)值。然而,可以理解的是,当我应用where条款将其限制在“2012年3月至2013年1月”时,我们失去了YTD中的1月和2月值。下面是一些示例代码: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
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。很高兴答案有帮助。嗯。有人,没有勇气解释自己,把我的答案记下来了……在问题被标记为正确答案后,这似乎有点奇怪,因为这表明答案是正确的