MDX: Как получить доступ к текущим выбранным элементам измерения?

Вопрос: Я пытаюсь создать меру в MDX чтобы получить первый день в выбранный период (у меня есть измерение даты YMD). Я использую функцию EXISTING для получения выбранных элементов. Он работает нормально, если я выбираю только один элемент измерения в элементе таблицы сводной таблицы Excel. Однако, как только я выберу несколько членов (пример: 2012 и 2013

Вопрос:

Я пытаюсь создать меру в MDX чтобы получить первый день в выбранный период (у меня есть измерение даты YMD). Я использую функцию EXISTING для получения выбранных элементов. Он работает нормально, если я выбираю только один элемент измерения в элементе таблицы сводной таблицы Excel. Однако, как только я выберу несколько членов (пример: 2012 и 2013 вместе), функция EXISTING работает не так, как ожидалось.

Я создал еще одну меру для отладки и просмотра того, что происходит. Мера определяется как:

SetToStr (СУЩЕСТВУЕТ ([Дата]. [Дата YMD]. [Год].members))

Если у меня выбран только один элемент измерения, это отлично работает, я получаю это обратно:

{[Дата]. [Дата YMD]. [Все]. [2013]}

Однако, как только я выбираю 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 работает только при выборе одного элемента?

Обновить:

Возможно, я не был достаточно ясен в оригинальном посте. Проблема, с которой я столкнулся, – это получить первый и последний член даты, если размер даты фильтруется (в фильтре таблицы сводной таблицы Excel), и в фильтре выбраны несколько членов даты (например, когда годы 2012 и 2013 выбраны вместе),

Я попытался использовать это решение здесь: http://bimic.blogspot.com/2011/07/mdx-rewrite-query-with-currentmember.html, но безуспешно.

Сейчас я создал две меры:

  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

Как вы можете видеть, меры работают, когда в фильтре сводной таблицы выбран один год, но не работают, когда вы выбираете более одного года.

Лучший ответ:

Существует обходной путь для вашей проблемы, описанной здесь: excel-2007.aspx. Но, как пишет автор (один из разработчиков SSAS), “решение не является ни элегантным, ни эффективным”. Во всяком случае, для добавления в куб требуется еще одна группа мер и хранимая процедура для записи.

Ответ №1

В моем кубе и через студию управления я могу написать сценарий, подобный этому, для создания мер, возвращающих числовые значения в зависимости от первого дня и последнего дня каждого месяца:

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 я могу добавить следующие две меры для моей стратегии:

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

Теперь, что бы я ни использовал в рядах, я получаю правильный ответ от стержня:

РЕДАКТИРОВАТЬ

Если я манипулирую с центром, чтобы наше измерение даты находилось в сводном фильтре, а затем переходим к мультивыборке 2013 и 2014, кажется, что “mdx”, который использует excel, выглядит следующим образом:

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 в пользовательских мерах этого скрипта будет потерян из-за подвыборки.

Оцените статью
Добавить комментарий