Получите топ-5 брендов каждой подкатегории продуктов питания - PullRequest
0 голосов
/ 30 марта 2019

Я хотел бы взять 5 лучших продаваемых брендов для каждой подкатегории в категории продуктов питания по сравнению с годовым доходом в запросе mdx с использованием базы данных foodmart.

Если говорить более конкретно, у нас есть измерение под названием product, которое содержит категорию продукта и название продукта.Категория продукта может содержать много подкатегорий.Например:

{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Blue Medal].[Blue Medal Egg Substitute]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Blue Medal].[Blue Medal Large Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Blue Medal].[Blue Medal Large Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Blue Medal].[Blue Medal Small Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Blue Medal].[Blue Medal Small Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Giant]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Giant].[Giant Egg Substitute]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Giant].[Giant Large Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Giant].[Giant Large Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Giant].[Giant Small Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Giant].[Giant Small Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Jumbo]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Jumbo].[Jumbo Egg Substitute]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Jumbo].[Jumbo Large Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Jumbo].[Jumbo Large Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Jumbo].[Jumbo Small Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Jumbo].[Jumbo Small Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[National]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[National].[National Egg Substitute]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[National].[National Large Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[National].[National Large Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[National].[National Small Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[National].[National Small Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Urban]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Urban].[Urban Egg Substitute]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Urban].[Urban Large Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Urban].[Urban Large Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Urban].[Urban Small Brown Eggs]}
{[Product].[All Products].[Food].[Eggs].[Eggs].[Eggs].[Urban].[Urban Small Eggs]}

В приведенном выше примере мы видим, что яйца подкатегории содержат много подкатегорий, также содержащих бренды.

Конечная цель - показать, что для яиц подкатегории 5 лучших брендов для людей с годовым доходом <10.000 входят в список.И мы хотим, чтобы для каждой подкатегории продуктов питания категории использовалась единица измерения продаж. </p>

Выходные результаты должны быть такими:

salary   |Eggs                              |Meat
          Brand1|Brand2|Brand3|Brand4|Brand5|Brand1|Brand2|Brand3|Brand4|Brand5
&lt 10.000k |Name1 |Name2 |Name3 |Name4 |Name5 |Name1 |Name2 |Name3 |Name4 |Name5
&gt 10.000k |Name1 |Name2 |Name3 |Name4 |Name5 |Name1 |Name2 |Name3 |Name4 |Name5

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Это ваш сценарий. Есть много скобок, которые сигнализируют кортеж на Mondrian:

WITH 
MEMBER [Measures].[Top5] AS 
RANK ( 
  (
   [Product].[Product Category].currentmember
  ,[Product].[Brand Name].CurrentMember
  )
  , ORDER( 
      (
         [Product].[Product Category].currentmember
        ,[Product].[Brand Name].[Brand Name].Members
      ) 
      , [Measures].[Store Sales]
      , BDESC
    ) 
  ) 
SELECT
non empty 
(
  [Product].[Product Category].[Product Category]
 ,filter(
    [Product].[Brand Name].[Brand Name]
  , [Measures].[Top5]<6
   )
) on columns, 
non empty (
   [Yearly_Income].[Yearly Income],
   [Measures].[Store Sales]
) on rows 
from [projetDW];

Возможно, попробуйте использовать функцию CROSSJOIN для создания ваших наборов кортежей:

WITH 
MEMBER [Measures].[Top5] AS 
RANK ( 
  CROSSJOIN(
   { [Product].[Product Category].currentmember }
  ,{ [Product].[Brand Name].CurrentMember }
  )
  , ORDER( 
      CROSSJOIN(
         { [Product].[Product Category].currentmember }
        ,[Product].[Brand Name].[Brand Name].Members
      ) 
      , [Measures].[Store Sales]
      , BDESC
    ) 
  ) 
SELECT
non empty 
CROSSJOIN(
  [Product].[Product Category].[Product Category].MEMBERS
 ,FILTER(
     [Product].[Brand Name].[Brand Name]
   , [Measures].[Top5]<6
  )
) on columns, 
non empty 
(
   [Yearly_Income].[Yearly Income],
   [Measures].[Store Sales]
) on rows 
from [projetDW];
0 голосов
/ 31 марта 2019

Вам необходимо отфильтровать данные на основе рангов.Посмотрите на пример ниже.Он основан на приключенческих работах.В примере для каждой группы зарплаты я возвращаю три верхние подкатегории для каждой категории продуктов на основе их значений.

WITH 
MEMBER [Measures].[Internet Sales Amount Rank] AS
RANK( ([Product].[Category].currentmember,[Product].[Subcategory].CurrentMember),
ORDER( ([Product].[Category].currentmember,[Product].[Subcategory].[Subcategory].Members) , [Measures].[Internet Sales Amount], BDESC)
) 

select 
non empty
([Product].[Category].[Category],filter([Product].[Subcategory].[Subcategory],[Measures].[Internet Sales Amount Rank]<4))
on columns,
non empty 
([Customer].[Yearly Income].[Yearly Income],[Measures].[Internet Sales Amount])
on rows 
from [Adventure Works]

Результат

enter image description here

...