Вы можете решить вышеуказанную проблему с помощью вычисленной меры.Функция MDX BottomCount решит вашу проблему.Вот пример, основанный на AdventureWorks.Приведенный ниже запрос содержит список даты, объема продаж и количества клиентов.
select [Measures].[Customer Count] on columns,
nonempty(
{(
{[Date].[Date].&[20130101]:[Date].[Date].&[20130713]},
[Sales Reason].[Sales Reason].[Sales Reason])}
,[Measures].[Customer Count]
)
on rows
from [Adventure Works]
where
([Date].[Calendar Year].&[2013])
Результат
Теперь давайте создадим вычисленную меру и протестируем ее для случая с выборкой.
with member measures.t
as
(bottomcount(
nonempty(
existing
{([Date].[Date].[Date].members,[Sales Reason].[Sales Reason].currentmember)}
,[Measures].[Customer Count]),
1
).item(0)
,[Measures].[Customer Count])
select measures.t on columns
from [Adventure Works]
where
([Date].[Date].&[20130101]:[Date].[Date].&[20130111],
[Sales Reason].[Sales Reason].[Other])
Идея состоит в том, что вы можете передать диапазон дат и причину продаж, где и показатель будет содержать последнее значение.
Редактировать: следующий запрос будет обработанситуация, когда пользователь пропускает одну дату, а атрибуты передаются.Если пользовательская иерархия пройдена, жесткое кодирование начала года может быть предотвращено
with member measures.t
as
(bottomcount(
nonempty(
{({[Date].[Date].&[20130101]:[Date].[Date].currentmember},[Sales Reason].[Sales Reason].currentmember)}
,[Measures].[Customer Count]),
1
).item(0)
,[Measures].[Customer Count])
select measures.t on columns
from [Adventure Works]
where
([Date].[Date].&[20130111],
[Sales Reason].[Sales Reason].[Other])