Ситуация не работает для всех условий
with member test as
case
when ([All Products].[All Products].[Group 2].&[1],[Measures].[minus-prod-trx])>0
then (ancestor([All Products].[All Products].[Group 2].&[1],2),[Measures].[minus-prod-trx])
when ([All Products].[All Products].[Group 2].&[2],[Measures].[minus-prod-trx])>0
then (ancestor([All Products].[All Products].[Group 2].&[2],2),[Measures].[minus-prod-trx])
end
Проблема: Как я могу получить оба значения, если вышеуказанные оба условия удовлетворяют? Теперь возвращается только один результат, хотя оба условия удовлетворяют. Я пробовал с:
case
when [All Products].[Group 2].CURRENTMEMBER IS [All Products].[Group 2].&[1]
then...
Но это не работает.
1 ответ
Предполагая, что эта иерархия ON ROWS
:
[All Products].[All Products]
Тогда что-то вроде следующего:
WITH MEMBER [Measures].test AS
CASE
WHEN
[All Products].[All Products].CURRENTMEMBER
IS [All Products].[All Products].[Group 2].&[1]
AND [Measures].[minus-prod-trx] > 0
THEN
(ancestor([All Products].[All Products].[Group 2].&[1],2),[Measures].[minus-prod-trx])
WHEN
....
Вот пример вышеупомянутого в использовании против куба AdvWrks от MS:
WITH
MEMBER [Measures].test AS
CASE
WHEN
[Product].[Product Categories].CurrentMember
IS
[Product].[Product Categories].[Product].[Hitch Rack - 4-Bike]
AND
[Measures].[Internet Sales Amount] > 0
THEN
(
Ancestor
(
[Product].[Product Categories].[Product].[Hitch Rack - 4-Bike]
,2
)
,[Measures].[Internet Sales Amount]
)
WHEN
[Product].[Product Categories].CurrentMember
IS
[Product].[Product Categories].[Product].[Road Bottle Cage]
AND
[Measures].[Internet Sales Amount] > 0
THEN
(
Ancestor
(
[Product].[Product Categories].[Product].[Road Bottle Cage]
,3
)
,[Measures].[Internet Sales Amount]
)
END
SELECT
NON EMPTY
{
[Measures].[Internet Sales Amount]
,[Measures].test
} ON 0
,[Product].[Product Categories].[Product] ON 1
FROM [Adventure Works];
Результаты в следующем:
В комментариях вы ставите следующее
with member [Measures].Test as
case
when [Dim Date].[Hierarchy].currentmember
IS [Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2]
then (ancestor([Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2],2),[Measures].[Amount]) end
select {[Measures].Test} on 0
from [My Adventure Works];
Этот код выглядит нормально для меня. [Dim Date].[Hierarchy].currentmember
не равен члену, указанному вами выше - currentmember
просматривает каждую строку выходных данных и возвращает текущий член, но в приведенном выше у вас нет этой иерархии в ваших строках... поэтому текущий член является членом All, поэтому ваш WHEN
условие ложное.
Sourav исправил вышесказанное, создав контекст так, чтобы текущий член возвращал члена, отличного от All
член иерархии:
with member [Measures].Test as
case
when [Dim Date].[Hierarchy].currentmember
IS [Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2]
then (ancestor([Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2],2),[Measures].[Amount]) end
select
{[Measures].Test} on 0,
[Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2] on 1 //<<including this means that the currentmember has something to work with!!
from [My Adventure Works];
Пожалуйста, ознакомьтесь с определением функции текущего члена: https://msdn.microsoft.com/en-us/library/ms144948.aspx