В MDX, как я могу отфильтровать измерение / ось на основе TopCount - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть куб, который содержит географические данные о продажах. Я хочу отобрать продажи товаров из всех магазинов, основываясь на 5 лучших продавцах из произвольно известного магазина (кстати, это упрощенная версия реальной проблемы).

В sql (позор мне) это будет

select StoreId, ProductId, Sales from cube where ProductId in 
    (select top 5 ProductId from cube where Store = @Store order by Sales desc)

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Для этого вы можете использовать функцию Topcount.При условии, что у вас есть измерения с именем Product and Store и мера с именем [Sales]:

Select [Measures].[Sales] On Columns,
       CrossJoin([Store].Members,Generate(Topcount(Crossjoin({[Store].@[<StoreId>]},[Product].Members),5,[Measures].[Sales]),[Product].CurrentMember)) On Rows
  From [Yourcube]

Замените конкретным магазином, который вас интересует. При генерации будет проходить 5 лучших из найденных для конкретного магазина.хранить и возвращать только членов Продукта.Этот результат затем объединяется со всеми магазинами.

0 голосов
/ 16 декабря 2010

При этом будут извлечены 5 лучших товаров для вашего магазина по оси ROWS, а затем выбрано [Продажи] этих товаров согласно элементу defaultMember измерения [Store].Если [Store] defaultMember является корнем агрегируемой иерархии, это должно давать продажи каждого продукта по всем магазинам.

SELECT

[Показатели]. [Продажи] ON 0,

TopCount ([Store]. [Your-store] * [Product] .Members), 5, [Measures]. [Sales]) ON 1

FROM [your-cube]

...