在SSAS中,当跨越月份和年份时,无法使平行周期函数工作

在SSAS中,当跨越月份和年份时,无法使平行周期函数工作,ssas,Ssas,我正在Analysis Services 2008R2中针对Adventure Works多维数据集生成MDX请求。我希望以行表示月份,以列表示年份,结果如下所示: 2005 | 2006 | 2007 | ... January ... | ... | ... | ... February ... | ... | ... | ... March ... | ... | ... | ... ... 以下请求可以正常工作: SELECT [D

我正在Analysis Services 2008R2中针对Adventure Works多维数据集生成MDX请求。我希望以行表示月份,以列表示年份,结果如下所示:

          2005 | 2006 | 2007 | ...
January    ... |  ... |  ... | ...
February   ... |  ... |  ... | ...
March      ... |  ... |  ... | ...
...
以下请求可以正常工作:

SELECT 
[Date].[Month of Year].CHILDREN ON ROWS,
( [Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount] } ) ON COLUMNS
FROM [Adventure Works]
现在,我想将本月的销售额与上月的销售额进行比较:

               2005                ||      2006                || ...
          Sales | Sales prev month || Sales | Sales prev month ||...
January     ... |              ... ||   ... |              ... || ...
February    ... |              ... ||   ... |              ... || ...
March       ... |              ... ||   ... |              ... || ...
...
我使用ParallelPeriod函数编写了一个请求:

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], ParallelPeriod([Date].[Calendar].[Month], 1))
SELECT
[Date].[Month of Year].CHILDREN ON ROWS,
( [Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month] } ) ON COLUMNS
FROM [Adventure Works]
问题是我得到了[Sales Amount Prev Month]度量值的空值

看起来,尽管每个单元格都表示月份和年份,但SSAS似乎无法确定当前的[日期].[日历].[月份]成员。然后,并行周期无法获得前一个月的数据

在这种情况下如何使ParallelPeriod函数工作?非常感谢。

那么:

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], [Date].[Month of Year].CurrentMember.PrevMember),
FORMAT_STRING = "Currency"
SELECT
[Date].[Month of Year].CHILDREN ON ROWS,
( [Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month] } ) ON COLUMNS
FROM [Adventure Works]
当您想要上一季度中的相应月份时,使用平行周期。这里应该足够了

更新:在您的评论之后,我试图利用其他解决方案中已经存在的层次结构:

WITH 
MEMBER [Sales Amount Prev Month] AS 
    ([Measures].[Sales Amount], [Date].Calendar.currentMember.prevMember), 
FORMAT_STRING = "Currency"

SELECT
{[Date].[Calendar].[Month].Members} ON ROWS,
(  { [Measures].[Sales Amount], [Sales Amount Prev Month] } ) ON COLUMNS
FROM [Adventure Works]
那么:

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], [Date].[Month of Year].CurrentMember.PrevMember),
FORMAT_STRING = "Currency"
SELECT
[Date].[Month of Year].CHILDREN ON ROWS,
( [Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month] } ) ON COLUMNS
FROM [Adventure Works]
当您想要上一季度中的相应月份时,使用平行周期。这里应该足够了

更新:在您的评论之后,我试图利用其他解决方案中已经存在的层次结构:

WITH 
MEMBER [Sales Amount Prev Month] AS 
    ([Measures].[Sales Amount], [Date].Calendar.currentMember.prevMember), 
FORMAT_STRING = "Currency"

SELECT
{[Date].[Calendar].[Month].Members} ON ROWS,
(  { [Measures].[Sales Amount], [Sales Amount Prev Month] } ) ON COLUMNS
FROM [Adventure Works]

我从Microsoft收到以下MDX查询:

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], ParallelPeriod([Date].[Calendar].[Month], 1))
member measures.def2
as
([Measures].[Sales Amount], ParallelPeriod(
    [Date].[Calendar].[Month],
    1,         
    exists(
        descendants([Date].[Calendar].currentmember,[Date].[Calendar].[Month],SELF),
        [Date].[Month of Year].currentmember).item(0)
        )
)
SELECT
[Date].[Month of Year].CHILDREN ON ROWS,
( [Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month],def2 } ) ON COLUMNS
FROM [Adventure Works]

这相当复杂,但似乎解决了问题。

我从Microsoft收到了以下MDX查询:

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], ParallelPeriod([Date].[Calendar].[Month], 1))
member measures.def2
as
([Measures].[Sales Amount], ParallelPeriod(
    [Date].[Calendar].[Month],
    1,         
    exists(
        descendants([Date].[Calendar].currentmember,[Date].[Calendar].[Month],SELF),
        [Date].[Month of Year].currentmember).item(0)
        )
)
SELECT
[Date].[Month of Year].CHILDREN ON ROWS,
( [Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month],def2 } ) ON COLUMNS
FROM [Adventure Works]

这很复杂,但似乎解决了问题。

嗯,看起来不错,只是一月的结果总是空的。我想知道是否有一个函数可以找到位于给定月份和给定年份交叉点的层次结构成员。这将允许使用ParallelPeriod函数。谢谢。看起来不错,只是一月份的结果总是空的。我想知道是否有一个函数可以找到位于给定月份和给定年份交叉点的层次结构成员。这将允许使用ParallelPeriod函数。谢谢。你试过我的第二个解决方案了吗?如果它对你有效,那就简单多了。我试过你的解决方案,是的。谢谢不幸的是,我需要在不同的轴上获得年份和行。事实上,在我的第一次尝试中,我也使用了日历层次结构中的月份,但表中部分是空的(只有对角线上的单元格被填满)。您尝试过我的第二个解决方案吗?如果它对你有效,那就简单多了。我试过你的解决方案,是的。谢谢不幸的是,我需要在不同的轴上获得年份和行。实际上,在我的第一次尝试中,我也使用了日历层次结构中的月份,但表中部分是空的(只有对角线上的单元格被填满)。