MDX – вычисление отдельного количества в диапазоне дат
у меня есть куб (многомерный) с
и размеры,[Measures].[persons #D]
- отчетливое количество[Person]
, и таблица фактов, содержащая даты выезда и прибытия человека.
Мне нужно подсчитать определенное количество людей, которые «останутся здесь» на выбранную пользователем дату. это значит, что мне нужно посчитать людей, у которых есть[Arrival Date]
до и[Departure Date]
после выбранной пользователем даты.
Выбранная пользователем дата сохраняется в[Measure].[EndOfPeriodDate]
.
В Dax/табличной модели я могу сделать это легко. что-то вроде того:
CALCULATE(COUNTA([Person]); FILTER(FactTable; ('FactTable'[Arrival Date] < [EndOfPeriodDate]) && 'FactTable'[Departure Date] > [EndOfPeriodDate])))
но я действительно не могу понять, как написать то же самое в MDX (я работаю с icCube).
Я написал следующую меру, и она работает хорошо:
create member [Measures].[PersonsAtEndOfPeriod] AS aggregate ( NULL:[Arrival Date].[Arrival Date].[Day].lookupByName([measures].[EndOfPeriodDate]) ,[Measures].[Persons #D] )
но это только первая часть. мне нужно добавить вторую часть моего условия
([Departure Date].[Departure Date].[Day].lookupByName([measures].[EndOfPeriodDate]:NULL)
я предполагаю, что это может выглядеть так:
NULL:[Arrival Date].[Arrival Date].[Day].lookupByName([measures].[EndOfPeriodDate]) + ([Departure Date].[Departure Date].[Day].lookupByName([measures].[EndOfPeriodDate]:NULL)
но это не работает...
ВОПРОС: как добавить второе (или более двух) условий в мою меру?
Заранее спасибо!
1 ответ
Во-первых, мера [Measures].[#People] должна представлять собой отдельный счетчик уникального идентификатора человека.
Определение должно быть:
WITH
MEMBER toto as eval(SubCubeUnion(null:[Departure].[Departure].[Day].[3 Nov 2019],[Arrival].[Arrival].[Day].[8 May 2019]:null ), [Measures].[#People])
SELECT
toto on 0
FROM [Cube]
Ссылки на документы:
Надеюсь, поможет!