Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Tabular grand total  [new]
IDVT
Member

Откуда:
Сообщений: 196
Коллеги подскажите пожалуйста, есть куб табличной модели, в нем некоторая мера осуществляет следующий расчет:

Если Сумма( поле) <0
тогда Сумма( поле)
иначе Пусто

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

пример на T-SQL:

Drop table if exists dbo.fact_test
go
Create table dbo.fact_test
(  Sku       VarChar (64)  not null
 , TitleSku  VarChar (128) not null
 , TypeGroup Char(1)       not null
 , QTY       int           not null
)

Insert into dbo.fact_test
(  sku
 , TitleSku
 , TypeGroup
 , QTY
)
Values ( 'Sku 1', 'Товар 1',   'A',  10)
     , ( 'Sku 2', 'Товар 2',   'A', -10)
     , ( 'Sku 3', 'Товар 3',   'B',  3)
     , ( 'Sku 4', 'Товар 4',   'B',  10)
     , ( 'Sku 4', 'Товар 4',   'B', -60)
     , ( 'Sku 4', 'Товар 4',   'B',  10)
     , ( 'Sku 5', 'Товар 5',   'A',  8)
     , ( 'Sku 5', 'Товар 5',   'A', -13)
     , ( 'Sku 6', 'Товар n/a', 'C',  6)
     , ( 'Sku 6', 'Товар n/a', 'C',  6)
     , ( 'Sku 6', 'Товар n/a', 'C', -20)
     , ( 'Sku 7', 'Товар n/a', 'C',  10)
     , ( 'Sku 7', 'Товар n/a', 'C',  10)
     , ( 'Sku 7', 'Товар n/a', 'C',  10)
     , ( 'Sku 7', 'Товар n/a', 'C', -99)

-- Мера выводит результат агрегата в том случае, если его значение отрицательное

Select Sku
     , Case when Sum( QTY) < 0
            then Sum( QTY)
            else null end as Мера1
     , Sum( QTY) as AllSumQty
from dbo.fact_test
group by Sku                         -- grand total должен быть -132, по факту равен -119

Select Sku
     , TypeGroup
     , Case when Sum( QTY) < 0
            then Sum( QTY)
            else null end as Мера1
     , Sum( QTY) as AllSumQty
from dbo.fact_test
group by Sku
       , TypeGroup                    -- grand total должен быть -132, по факту равен -119


в итоге: в общих итогах сводной таблицы мне необходимо получить сумму по колонке "Мера1", но сейчас получаю сумму по колонке "AllSumQty" (разумеется если она отрицательная). Можно ли как-то в табулярке управлять общими итогами?
31 май 17, 08:45    [20525978]     Ответить | Цитировать Сообщить модератору
 Re: Tabular grand total  [new]
mbabkin
Member

Откуда: Москва
Сообщений: 97
IDVT,
Вам нужно предварительно рассчитать таблицу с нужными агрегатами, используя SUMMARIZE или GROUPBY (Смотря какая версия Tabular у вас), потом ее отфильтровать и заново сделать суммирование.
Схематично примерно так:
Мера2 :=
SUMX (
    FILTER (
        SUMMARIZE (
            'fact_test';
            [Sku];
            [TitleSku];
            [TypeGroup];
            "Мера1"; SUM ( [QTY] )
        );
        [Мера1] < 0
    );
    [Мера1]
)
31 май 17, 11:15    [20526506]     Ответить | Цитировать Сообщить модератору
 Re: Tabular grand total  [new]
IDVT
Member

Откуда:
Сообщений: 196
Большое Вам спасибо за ответ!
Это будет корректно работать? ведь заранее неизвестно какие атрибуты выбрал пользователь, в результате которых grand total будет динамически менять значение, или я уже совсем загнался в поисках решения.....
Мера2 :=
SUMX (
    FILTER (
        SUMMARIZE (
            'fact_test';
            [Sku];                    <--
            [TitleSku];              <--
            [TypeGroup];           <--
            "Мера1"; SUM ( [QTY] )
        );
        [Мера1] < 0
    );
    [Мера1]
)
31 май 17, 11:59    [20526766]     Ответить | Цитировать Сообщить модератору
 Re: Tabular grand total  [new]
IDVT
Member

Откуда:
Сообщений: 196
mbabkin

Большое спасибо за содействие! все получилось! голову совсем забил себе =)
31 май 17, 13:59    [20527359]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить