Могу ли я переформулировать этот запрос MDX, чтобы использовать наборы вместо «И»? - PullRequest
0 голосов
/ 14 июля 2010
with member [Measures].[BoughtDispenser] as
    Sum(Descendants([Customer].[Customer].CurrentMember, [Customer].[Customer]),
        Iif(
            (IsEmpty(([Item].[ItemNumber].&[011074], [Measures].[Sale Amount]))
            And IsEmpty(([Item].[ItemNumber].&[011069], [Measures].[Sale Amount]))
            )
            Or IsEmpty([Measures].[Sale Amount]),
            0 , 1
        )
    )
select 
{[Measures].[Sale Amount]} on columns,
non empty filter([Customer].[Customer].children, [Measures].[BoughtDispenser])
    * {[Item].[ItemNumber].members}
on rows
from [Sales]
where [EnteredDate].[Quarter].&[2010-01-01T00:00:00]
;

Цель состоит в том, чтобы показать все предметы, приобретенные клиентами, которые также купили один из двух дозаторов (011069 и 011074).

Я основал вычисляемый элемент на запросе, который я обнаружил для анализа корзины. Я чувствую, что должен быть способ написать это с помощью набора {[Item]. [ItemNumber]. & [011074], [Item]. [ItemNumber]. & [011069]} вместо двух тестов IsEmpty. Все, что я пробовал, заканчивалось тем, что у каждого клиента был результат.

Моя среда - SQL Server Analysis Services 2005.

1 Ответ

0 голосов
/ 14 июля 2010

Да, я могу!Просто требуется немного другой подход к вычисляемому члену:

with member [Measures].[BoughtDispenser] as
    Sum(Descendants([Customer].[Customer].CurrentMember, [Customer].[Customer])
        * {[Item].[ItemNumber].&[011069], [Item].[ItemNumber].&[011074]},
        [Measures].[Quantity Shipped]
    )
select 
{[Measures].[Sale Amount]} on columns,
non empty filter([Customer].[Customer].children, [Measures].[BoughtDispenser])
    * {[Item].[ItemNumber].members}
on rows
from [Sales]
where [EnteredDate].[Quarter].&[2010-01-01T00:00:00]
;
...