Страницы: 1
RSS
DAX. Сумма нарастающим итогом.
 
Привет.
Мучаюсь долго. Задача: необходимо для каждого клиента посчитать его объем покупки в течение последних 6 месяцев и исходя из этого классифицировать. Как делать это формулами в экселе - понятно. Но данные лежат в модели данных, поэтому надо сделать это в пивоте, и вот тут никак не возьму в толк, как написать формулу, которая будет аналогом классическому СУММЕСЛИМН.
Во вложении пример данных, справа (зеленые столбцы) то, что нужно получить в модели данных в пивоте.
Буду благодарен за помощь.
 
Название темы должно отражать суть задачи. Предложите. Модераторы заменят
 
Посмотрите ссылку, поковыряйтесь. Там все с примерами. Если что-то будет не понятно - спрашивайте.
Предлагаю тему.
DAX. Суммирование по условию.
Изменено: PooHkrd - 04.07.2018 15:00:48
Вот горшок пустой, он предмет простой...
 
PooHkrd,
уже видел, поковырялся. Не понятно - спрашиваю. Если нечего ответить по существу вопроса - не пишите.

vikttur,
Аналог СУММЕСЛИМН в DAX
или вариант выше подойдет.
 
Блин, не глянул сразу ваш пример. Вам же другое совсем нужно.
Здесь, пример, как нужный вам результат сразу выводить в мере. Или вам принципиально нужна формула для столбца? Она составляется по аналогии с учетом контекста строки в таблице. В той же теме посмотрите ссылку из поста №2, оттуда почерпнете как сделать формулу для расчетного столбца в таблице модели.
Для модераторов правильная тема.
DAX. Сумма нарастающим итогом.
Изменено: PooHkrd - 04.07.2018 15:09:57
Вот горшок пустой, он предмет простой...
 
Цитата
PavelZakharov написал:
Если нечего ответить по существу вопроса - не пишите.
Это теперь вместо "спасибо" так принято? Человек пытается Вам помочь, а Вы...
 
Юрий М,
в сабже я написал, что уже давно ковыряюсь с вопросом и не могу найти его решение. Ссылка на страницу, которая первой гуглится по запросу "формула calculate", не сильно продвинула в решении задачи. В идеале хотелось бы увидеть формулу по этому примеру или похожему.

PooHkrd,
читаю тему, спасибо.
да, нужен расчетный столбец, а не мера, т.к. на его основе в данных будет добавлен другой столбец с классификацией.
я правильно понимаю, что нужно в фильтре задавать EARLIER, что означает необходимость сортировки исходных данных по датам?
 
Предварительная сортировка не требуется. У вас же в таблице столбец с датами. Когда вы для конкретной строки в функции FILTER( Таблица; Таблица[Дата] <= EARLIER(Таблица[Дата]) ) укажете что-то подобное, то именно для этой строки EARLIER означает что вы посчитаете сумму по всем датам, которые больше либо равны дате в текущей строке.
Все таки посмотрите ссылочку  ABC Classification там как раз все и про сумму нарастающим итогом, и про дальнейшую классификацию.
Изменено: PooHkrd - 04.07.2018 16:06:43
Вот горшок пустой, он предмет простой...
 
Я вообще не уверен, что для этой конкретной классификации "старый/новый" нужно считать сумму нарастающим итогом. Достаточно убедиться, что для этого клиента нет строк продаж в предыдущие периоды (ок, за 6 предыдущих месяцев)
Изменено: Максим Зеленский - 04.07.2018 16:26:39
F1 творит чудеса
 
Максим Зеленский, да, необязательно. В общем, логика именно такова - если сумма нулевая <=> строк нет => новый.
Но глобально хочется понимать в принципе, как посчитать сумму по условию в dax, т.к. чтение различных источников ясности не дало.
 
В общем, методом подбора нашлось такое решение:
в PQ добавлен столбец "Month6", each Date.AddMonths([Date], -6)

В DAX формула следующая:
Код
=CALCULATE(sum('table1'[Value]);
FILTER(ALL('table1');'table1'[Client]=EARLIER('table1'[Client]));
FILTER(ALL('table1');'table1'[Date]<EARLIER('table1'[Date]));
FILTER(ALL('table1');table1[Date]>EARLIER('table1'[Month6])))

не очень изящно, но вроде работает.

PooHkrd, спасибо за ссылку, буду вникать.
 
Доброе время суток.
Цитата
PavelZakharov написал:
в PQ добавлен столбец "Month6", each Date.AddMonths([Date], -6)
А зачем? в DAX своя функция есть ;)
Код
= IF (
    COUNTROWS (
        FILTER (
            'table1';
            'table1'[КЛИЕНТ] = EARLIER ( 'table1'[КЛИЕНТ] )
            && 'table1'[ДАТА ПОКУПКИ] < EARLIER ( 'table1'[ДАТА ПОКУПКИ] )
            && 'table1'[ДАТА ПОКУПКИ] > EDATE ( EARLIER ( 'table1'[ДАТА ПОКУПКИ] ); -6 )
        )
    );
    "Old";
    "New"
)
 
Андрей VG, доброго!
я пробовал написать

Код
=CALCULATE(sum('table1'[Value]);
FILTER(ALL('table1');'table1'[Client]=EARLIER('table1'[Client])); 
FILTER(ALL('table1');'table1'[Date]<EARLIER('table1'[Date])); 
FILTER(ALL('table1');table1[Date]>DATEADD(EARLIER('table1'[Month6]);-6;MONTH))
)

чтобы не делать лишних телодвижений в PQ, но вышло сообщение об ошибке. Ваш вариант работает, спасибо! приму на вооружение.

&& позволяет в одном фильтре задать все условия фильтрации, верно? и не писать FILTER для каждого условия, соответственно.
Изменено: PavelZakharov - 05.07.2018 11:11:48
 
Цитата
PavelZakharov написал:
&& позволяет в одном фильтре задать все условия фильтрации, верно? и не писать FILTER для каждого условия, соответственно.
&& - условие И
|| - условие ИЛИ
Вот горшок пустой, он предмет простой...
 
PooHkrd,
круто, спасибо!
Страницы: 1
Наверх