Search code examples
ssasmdx

MDX: How to access currently selected dimension members?


I'm trying to create a measure in MDX to get the first day in the selected period (I have a YMD date dimension). I'm using EXISTING function to get the selected members. It's working fine if I only select one dimension member in Excel pivot table filter. However, as soon as I select multiple members (Example: 2012 & 2013 together), the EXISTING function is not working as expected.

I've created another measure to debug and see what is going on. The measure is defined as:

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

If I have only one dimension member selected, this works fine, I get this back:

{[Date].[Date YMD].[All].[2013]}

However, as soon as I select 2012 and 2013 together, I get a list of all dimension members back:

{[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]}

The EXISTING function seems to work only when a single member is selected?

--

Update:

Maybe I was not clear enough in the original post. The problem I'm facing is getting the first and last date member if the date dimension is being filtered (in an Excel pivot table filter) and multiple date members are selected in the filter (example: when years 2012 & 2013 are selected together).

I've tried using the solution from here: http://bimic.blogspot.com/2011/07/mdx-rewrite-query-with-currentmember.html, but to no success.

I've created 2 measures now:

  1. First Day Single:
HEAD(
DESCENDANTS(
    [Date].[Date YMD].CURRENTMEMBER,
    [Date].[Date YMD].[Day]
    ),
1
).ITEM(0).member_value
  1. First Day Multiple Years
MIN(EXISTING [Date].[Date YMD].[Year].members, [Measures].[First Day Single])

Unfortunately I can't include a screenshot directly. You can see it on this link: http://social.msdn.microsoft.com/Forums/getfile/446659

As you can see, the measures work when a single year is selected in the pivot table filter, but don't work when you select more than one year.


Solution

  • Really old topic, but I am posting my solution here as I haven't found the solution elsewhere:

    Using dynamic set seems to have done the trick for me as will be populated only with members in context:

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