繁体   English   中英

MDX:如何访问当前选定的维度成员?

[英]MDX: How to access currently selected dimension members?

我正在尝试在MDX中创建一个度量来获取所选期间的第一天(我有一个 YMD 日期维度)。 我正在使用EXISTING function 来获取选定的成员。 如果我在 Excel pivot 表过滤器中只使用 select 一维成员,它工作正常。 但是,一旦我 select 多个成员(例如:2012 和 2013 一起), EXISTING的 function 就无法按预期工作。

我创建了另一种方法来调试并查看发生了什么。 该度量定义为:

SetToStr(EXISTING([Date].[Date YMD].[Year].members))

如果我只选择了一个维度成员,这很好,我得到了这个:

{[日期].[日期 YMD].[全部].[2013]}

但是,只要我将 select 2012 和 2013 放在一起,我就会得到所有维度成员的列表:

{[Date].[Date YMD].[All].[N/A],[Date].[Date YMD].[All].[2007],[Date].[Date YMD].[All].[2008],[Date].[Date YMD].[All].[2009],[Date].[Date YMD].[All].[2010],[Date].[Date YMD].[All].[2011],[Date].[Date YMD].[All].[2012],[Date].[Date YMD].[All].[2013],[Date].[Date YMD].[All].[2014]}

EXISTING function 似乎仅在选择单个成员时才有效?

--

更新:

也许我在原始帖子中不够清楚。 如果日期维度被过滤(在 Excel pivot 表过滤器中)并且在过滤器中选择了多个日期成员(例如:一起选择 2012 年和 2013 年时),我面临的问题是获取第一个和最后一个日期成员.

我尝试使用此处的解决方案: http://bimic.blogspot.com/2011/07/mdx-rewrite-query-with-currentmember.html ,但没有成功。

我现在创建了 2 个措施:

  1. 第一天单曲:
 HEAD( DESCENDANTS( [Date].[Date YMD].CURRENTMEMBER, [Date].[Date YMD].[Day] ), 1 ).ITEM(0).member_value
  1. 多年第一天
MIN(EXISTING [Date].[Date YMD].[Year].members, [Measures].[First Day Single])

不幸的是,我不能直接包含屏幕截图。 你可以在这个链接上看到它: http://social.msdn.microsoft.com/Forums/getfile/446659

如您所见,当在 pivot 表过滤器中选择一年时,这些措施有效,但当您在 select 超过一年时无效。

在我的多维数据集和通过Management Studio中,我可以编写如下脚本来创建基于每个月的第一天和最后一天返回数值的度量:

WITH 
SET [Last12Months] AS
    TAIL ( 
        [Date].[Date - Calendar Month].[Calendar Month].members, 
        12)
MEMBER [Measures].[FirstDay] AS
    HEAD(
        DESCENDANTS(
            [Date].[Date - Calendar Month].CURRENTMEMBER,
            [Date].[Date - Calendar Month].[Calendar Day]
            ),
        1
        ).ITEM(0).member_value
MEMBER [Measures].[LastDay] AS
    TAIL(
        DESCENDANTS(
            [Date].[Date - Calendar Month].CURRENTMEMBER,
            [Date].[Date - Calendar Month].[Calendar Day]
            ),
        1
        ).ITEM(0).member_value
SELECT
    {[Measures].[FirstDay],[Measures].[LastDay]} ON 0,
    [Last12Months] ON 1
FROM [MyCube]

我们使用Office 2010但使用OLAP Pivottables extensions插件,我可以在数据OLAP Pivottables extensions中添加以下两项措施:

1. [Measures].[FirstDay]

HEAD(
    DESCENDANTS(
        [Date].[Date - Calendar Month].CURRENTMEMBER,
        [Date].[Date - Calendar Month].[Calendar Day]
        ),
    1
    ).ITEM(0).member_value

2. [Measures].[LastDay]

TAIL(
    DESCENDANTS(
        [Date].[Date - Calendar Month].CURRENTMEMBER,
        [Date].[Date - Calendar Month].[Calendar Day]
        ),
    1
    ).ITEM(0).member_value

现在,无论我在Rows中使用什么,都可以从数据透视中获得正确的答案:

在此处输入图片说明


编辑

如果我操纵数据透视表以使我们的日期维度位于数据透视表的过滤器中,然后选择2013和2014年的多项选择,那么excel正在使用的`mdx'似乎如下:

WITH 
MEMBER [Measures].[FirstDay] as
 HEAD (
  DESCENDANTS ( [Date].[Date - Calendar Month].CURRENTMEMBER, [Date].[Date - Calendar Month].[Calendar Day] )
  , 1
 ).ITEM( 0 ).member_value
MEMBER [Measures].[LastDay] as
 TAIL (
  DESCENDANTS ( [Date].[Date - Calendar Month].CURRENTMEMBER, [Date].[Date - Calendar Month].[Calendar Day] )
  , 1
 ).ITEM( 0 ).member_value
SELECT
  { [Measures].[FirstDay], [Measures].[LastDay] }  ON COLUMNS
FROM 
   (
   SELECT 
     ({ [Date].[Date - Calendar Month].[Calendar Year].&[2012], 
        [Date].[Date - Calendar Month].[Calendar Year].&[2013] }) ON COLUMNS
   FROM [OurCube]
   ) 

我认为此脚本的自定义度量中的函数CURRENTMEMBER上下文将由于子选择而丢失。

这里有一个针对您问题的解决方法: http : //sqlblog.com/blogs/mosha/archive/2007/09/26/how-to-detect-subselect-inside-mdx-calculations-aka-multiselect-in- excel-2007.aspx 但是,正如作者(SSAS的开发者之一)所写的那样,“该解决方案既不优雅也不高效”。 无论如何,它需要将另一个度量值组添加到多维数据集,并编写一个存储过程。

真的很老的话题,但我在这里发布我的解决方案,因为我没有在其他地方找到解决方案:

使用 dymanic set 似乎对我有用,因为只会在上下文中填充成员:

CREATE DYNAMIC SET [LastUpdateSet]
AS
    TAIL(
        NONEMPTY(
                [LastUpdateDate].[Date].ALLMEMBERS
                , [Measures].[Quantity]
        )
    , 1)
;
CREATE MEMBER CURRENTCUBE.[Measures].[LastUpdateQuantity]
 AS (
        [LastUpdateSet].item(0)
        , [Measures].[Quantity]
    )
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM