Оптимизация запросов MDX OLAP Cube - PullRequest
0 голосов
/ 26 января 2019

Проблема: я пытаюсь написать запрос MDX, который покажет первую дату, когда член имеет значения показателей.

Данные препятствия: 1. У меня нет доступа к хранилищу данных / исходным данным 2. Я не могу запросить какие-либо физические изменения или изменения CUBE

Ищу: я знаю, что это противоречит тому, что CUBE должен делать, но есть ли способ достичь этого результата. Я сталкиваюсь с конфликтами блокировок и общими проблемами времени выполнения.

Справочная информация: после проб и ошибок. У меня есть рабочий запрос, но, к сожалению, он практичен только при фильтрации менее 10 сотрудников. Я попытался зациклить, но в кубе есть ~ 60 000 идентификаторов сотрудников, каждый из которых имеет 10-20 ключей emp (по одному на каждое изменение информации о сотруднике).

//must have values for measure 1 or 2
WITH 
set NE_measures as
{
[Measures].[measure1] ,
[Measures].[measure2]
} 

//first date with measure values for each unique emp key
MEMBER [Measures].[changedate] AS
 Head
 (
 NonEmpty([Dim Date].[Date].[Date].allMEMBERS, NE_measures)
 ).Item(0).Member_Name

SELECT  non empty  {[Measures].[changedate]} ON COLUMNS,
non empty   [Dim Employee].[Emp Key].[Emp Key].allmembers ON ROWS

FROM [Cube]

1 Ответ

0 голосов
/ 26 января 2019

Попробуйте это:

MEMBER [Measures].[changedate] AS
Min(
 [Dim Date].[Date].[Date].allMEMBERS, 
 IIF(
  NOT(ISEMPTY([Measures].[measure1]))
  OR NOT(ISEMPTY([Measures].[measure2])),
  [Dim Date].[Date].CurrentMember.MemberValue,
  NULL
 )
);

Я предполагаю, что KeyColumn или ValueColumn более вероятны для правильной сортировки, чем имя. Так что если MemberValue не работает, попробуйте Member_Key.

Наиболее эффективный способ сделать это - добавить столбец даты в таблицу фактов с мерой 1 и мерой 2, а затем создать для нее меру AggregateFunction = Min. Но вы сказали, что не можете сменить куб, поэтому я не предложил этот лучший вариант.

...