如何查看层次结构中的第一个和/或最后一个成员值

时间:2014-11-18 01:26:55

标签: ssas mdx

我有办法在层次结构级别查看第一个和/或最后一个叶子值吗?

我正在尝试在SSAS中创建一个计算维度,其中包括,例如,年初至今的计算,我不希望在将来显示日期。

我已经研究了如何在最低级别(日期)实现这一点,但是在尝试实现该技术时,我会在聚合级别上遇到错误。

为了帮助我完成我想要的事情,我在我的维度中包含了一个[Date In Past]成员,如果日期是过去的话,则包含0,如果不是,则包含a。

例如此查询,按日期返回计算:

with member [Measures].[Year To Date] as
            Sum(
                 { IIF(strtovalue(
                        [Time Order Date].[Date In Past].Currentmember.membervalue
                                    ) = 0, null, [Measures].[Product Rev (with ship, no disc)]
                        ) } *
                   PeriodsToDate(
                                [Time Order Date].[Fiscal Date].[Fiscal Year Name],
                                [Time Order Date].[Fiscal Date].CurrentMember
                                 ) 
                )
select
{[Measures].[Product Rev (with ship, no disc)],
[Measures].[Year To Date]} on 0,
[Time Order Date].[Date].Children on 1
from [Sales Analysis]

将在[年初到期]度量中返回将来所有日期的空值。

此查询按周返回计算:

with member [Measures].[Year To Date] as
            Sum(
                 { IIF(strtovalue(
                        [Time Order Date].[Date In Past].Currentmember.membervalue
                                    ) = 0, null, [Measures].[Product Rev (with ship, no disc)]
                        ) } *
                   PeriodsToDate(
                                [Time Order Date].[Fiscal Date].[Fiscal Year Name],
                                [Time Order Date].[Fiscal Date].CurrentMember
                                 ) 
                )
select
{[Measures].[Product Rev (with ship, no disc)],
[Measures].[Year To Date]} on 0,
[Time Order Date].[Fiscal Week Name].Children on 1
from [Sales Analysis]

返回所有[Year To Date]值的错误,我假设因为本周有多个成员。

我想将它与本周的最后一天进行比较。我怎么能这样做?

谢谢, - sw

1 个答案:

答案 0 :(得分:0)

从字面上回答您的问题:是的,您可以使用HeadTail方法获取集合的第一个或最后一个成员,从而获得级别。请注意,这些返回一个单元素集,因此您经常使用Tail(something).Item(0).Item(0)来获取成员。

但是,正如我理解您的问题,您真正需要知道的是,在当前上下文中,成员[Time Order Date].[Date In Past].[a]是否存在。 在那种情况下,我会使用

with member [Measures].[Year To Date] as
            IIf(Intersect(EXISTING [Time Order Date].[Date In Past].[Date In Past].Members,
                          {[Time Order Date].[Date In Past].[a]}
                         ).Count = 1,
                NULL,
                Sum(PeriodsToDate([Time Order Date].[Fiscal Date].[Fiscal Year Name],
                                  [Time Order Date].[Fiscal Date].CurrentMember
                                 )
                    [Measures].[Product Rev (with ship, no disc)]
                   )
               )
select
{[Measures].[Product Rev (with ship, no disc)],
[Measures].[Year To Date]} on 0,
[Time Order Date].[Fiscal Week Name].Children on 1
from [Sales Analysis]

EXISTING获取当前上下文中存在的所有Date In Past成员的集合。并且与成员a的单元素集的交集具有1个元素(如果a是第一个集合的成员)或0个元素(如果a不是包含在集合中),它解释了IIf的条件。