2016-06-09 2 views
1

Я пытаюсь суммировать сумму продаж всех продуктов в категории и ее подкатегориях, добавляя количество продаж для продуктов с одним и тем же ключом размера продукта только один раз.MDX: Sum, игнорируя членов с дублирующимся именем

Каждая категория может иметь любое количество подкатегорий, и каждая подкатегория может иметь любое количество подкатегорий, до пяти уровней подкатегорий. Количество подкатегорий может меняться.
Так category_hierarchy в category_dimension имеет эти уровни:

main_category, sub_category_1, sub_category_2, ..., sub_category_5

и может выглядеть следующим образом:

id main_category  sub_category_1 sub_category_2  sub_category_3 ... 
1  Electronics 
2  Electronics  Camera & Photo 
3  Electronics  Camera & Photo Accessories 
4  Electronics  Camera & Photo Digital Cameras 
5  Electronics  Camera & Photo Film Photography Film Cameras 
6  Electronics  Camera & Photo Film Photography Film 
7  Electronics  Headphones 
8  Home & Kitchen 
... 

В таблице фактов есть номера продаж для каждого продукта на каждую категорию в день, и каждый продукт может принадлежать более чем одной категории (если продукт относится к более чем одной категории, он имеет одинаковые номера продаж в каждой из этих категорий), например ,

id product_id category_id date_id  sales other_information 
1  1    1    2016-06-30 4  AAA 
2  1    2    2016-06-30 4  BBB 
3  1    6    2016-06-30 4  CCC 
4  2    2    2016-06-30 5  DDD 
5  2    4    2016-06-30 5  EEE 
... 

Если я теперь запустить простой MDX запрос, чтобы показать мне количество продаж для каждой категории будет просуммировать число продаж несколько раз, если продукт находится в нескольких категориях:

SELECT 
    {[DATE_DIMENSION].[DATE_HIERARCHY].ALLMEMBERS} ON COLUMNS 
,NON EMPTY 
     {[CATEGORY_DIMENSION].[CATEGORY_HIERARCHY].ALLMEMBERS} 
    * 
     {[PRODUCT_DIMENSION].[PRODUCT_HIERARCHY].ALLMEMBERS} ON ROWS 
FROM [Cube] 
WHERE [MEASURES].[SALES]; 

возвращает

           2016-06-30 2016-06-29 ... 
CATEGORY     PRODUCT_ID  SALES  SALES 
All Categories    All Products  22   ... 
           1    12 
           2    10 
    Electronics    All Products  22 
           1    12 
           2    10 
    Camera & Photo   All Products  18 
           1    8 
           2    10 
     Digital Cameras  All Products  5 
           2    5 
     Film Photography  All Products  4 
           1    4 
     Film    All Products  4 
           1    4 

Я хотел бы всегда получить продажи 4 для продукта 1 и продаж 5 для продукта 2 на 2016-06-30 (но по-прежнему иметь возможность агрегировать продажи на неделю/месяц/год):

           2016-06-30 2016-06-29 ... 
CATEGORY     PRODUCT_ID  SALES  SALES 
All Categories    All Products  9   ... 
           1    4 
           2    5 
    Electronics    All Products  9 
           1    4 
           2    5 
    Camera & Photo   All Products  9 
           1    4 
           2    5 
     Digital Cameras  All Products  5 
           2    5 
     Film Photography  All Products  4 
           1    4 
     Film    All Products  4 
           1    4 
+1

Что делать, если продажи для (ProductA/Подкатегории 1) = 5 и (ProductA/Подкатегория 2) = 3? – whytheq

+0

Продажи для (ProductA/Подкатегории 1) всегда = (ProductA/Подкатегория 2) –

+0

Отредактирован вопрос, чтобы уточнить структуру категории. –

ответ

0

Это еще не завершено или не проверено - это только первоначальная идея: мне нужно будет протестировать AdvWrks после того, как у меня будет доступ к ней.

Для того, чтобы скорректировать Все участники, необходимо учитывать все ваши потребности.

WITH 
SET [All_tuples] AS 
    ORDER(
     {[CATEGORY_DIMENSION].[CATEGORY_HIERARCHY].[CATEGORY_HIERARCHY].MEMBERS} 
    * {[PRODUCT_DIMENSION].[PRODUCT_HIERARCHY].MEMBERS} 
    , [PRODUCT_DIMENSION].CURRENTMEMBER.MEMBER_CAPTION 
    , BDESC 
    ) 
SET [NoDupes] AS 
    FILTER(
    [All_tuples] AS X, 
    X.CURRENT.ITEM(1) NOT IS X.CURRENT.LAG(1).ITEM(1) 
) 
MEMBER [CATEGORY_DIMENSION].[CATEGORY_HIERARCHY].[All].[Category I NEW] AS 
    AGGREGATE(
    [NoDupes] 
) 
SELECT 
    {[Measures].[Sales]} ON COLUMNS 
,NON EMPTY 
    [CATEGORY_DIMENSION].[CATEGORY_HIERARCHY].[All].[Category I NEW] ON ROWS 
FROM [Cube]; 
+0

Возвращает синтаксическую ошибку. Кроме того, добавление нового элемента основной категории не помогло бы, потому что: а) количество основных категорий не фиксировано и может меняться со временем, а б) проблема уже может возникнуть на уровне под_категории. Я изложил свой первоначальный вопрос, чтобы уточнить структуру категории. –

Смежные вопросы