Страницы: 1
RSS
Аналог СУММЕСЛИМН с помощью DAX в PowerPivot
 
Доброго дня, уважаемые форумчане!

Очень прошу откликнуться, всех, кто может помочь!
В файле во вложении постарался максимально упростить пример для его понимания.
Суть проблемы: в модели данных PP для консолидированного отчета, данные которого собираются через PowerQwery и обрабатываются в PowerPivot, необходим дополнительный вычисляемый столбец (именно столбец, а не мера - т.к. прописать меру проблем нет), который бы вычислял сумму по столбцу количество на основании условий значений нескольких текстовых строк (прописывать все текстовые значения в формуле FILTER к сожалению не вариант, т.к. оч.много их вариаций), по сути полный аналог СУММЕСЛИМН но через DAX.
т.о. аналогичные значения желтого столбца в исходном листе с примером, расчетно пытаюсь получить в PowerPivot...

Если кто-то сталкивался с подобной задачей - просьба поделиться вариантами решения!
 
Доброе время суток
Можно так, к примеру
Код
=SUMX(FILTER(ALL('Table1'); 'Table1'[Месяц] = EARLIER('Table1'[Месяц])); 'Table1'[Количество])   

Только какой смысл, не сообщите ли в подобном?
Успехов.
 
Андрей VG, немножко не так. Автор хотел вот этого вот. Извините, если это был ваш педагогический порыв, и я все испортил  :oops:
Код
=SUMX(
   FILTER(
      ALL('Склад'); 
      'Склад'[Склад] = EARLIER('Склад'[Склад]) && 
      'Склад'[Кладовщик] = EARLIER('Склад'[Кладовщик]) && 
      'Склад'[Номенклатура] = EARLIER('Склад'[Номенклатура])
   ); 
   'Склад'[Количество]
)

Ну и остается открытым вопрос нафига, и чего бы такое не сделать сразу в PQ? Зачем лишнюю оперативку и вычислительные ресурсы на вычисляемый столбец затрачивать?
Изменено: PooHkrd - 26.02.2018 18:35:01
Вот горшок пустой, он предмет простой...
 
PooHkrd,  коллега, тяжело на телефоне текст писать. Да и ТС подумать удовольствия не хочу лишать ;)
 
Спасибо за ответы!!!
PooHkrd, это то, что было нужно!
честно говоря я был уверен, что EARLIER не работает с текстом.
на счет расчета сразу в PQ уже были мысли, правда еще не пробовал добавлять там вычисления такого рода + не знаю насколько это скажется на быстродействии в сравнении с PP на больших объемах данных.
 
В PQ это делается двумя шагами. Попробуйте на большом массиве заодно и проверите. Ну чуть подольше будет загрузка в модель данных занимать, зато сама моделька ворочаться будет шустрее.
Вот горшок пустой, он предмет простой...
 
Спасибо большое, попробую!
PooHkrd, можно подробнее, не разобрался как сделать последний шаг по объединению в PQ ?
 
В том виде как у меня в примере только ручками. если нужно чисто кнопочный вариант для понимания шагов то приложил другой вариант.
Но на больших массивах рекомендую использовать тот что я предложил в начале, ибо по информации от Максима Зеленского такое сочетание функций Table.Group и Table.Join оптимизировано в трансляторе или чем там эти скрипты обрабатываются гораздо лучше чем сочетание Table.Group и Table.NestedJoin, которое применено во приложенном варианте. По своим замерам времени на выполнение скриптов по нескольку миллионов строк могу сказать что так оно и есть.
Вот горшок пустой, он предмет простой...
 
Доброго дня!

Еще один способ с помощью оператора CALCULATE и ALLEXCEPT

=CALCULATE(SUM('Склад'[Количество]);ALLEXCEPT('Склад';'Склад'[Кладовщик];'Склад'[Склад];'Склад'[Номенклатура]))
 
Уважаемые эксперты, направьте пож, что не так, в случае, где необходимо получить в сводную кол-во коробок по бренду в адресе:

Код
=SUMX(
      FILTER(
             ALL('Таблица1'),
                 'Таблица1'[Бренд ТМА Крупно] = "Бтн" && 
                 'Таблица1'[Адрес] = 'Таблица1'[Адрес]
      ),
            'Таблица1'[Кол-во кор.]
     )

в этом случае возвращает общую сумму таблицы по "Бтн", а когда пробую применить EARLIER - сообщение "... EARLIER/EARLIEST ссылается на более ранний контекст строки, который не существует."
 
А что вы пытаетесь с чем сравнить вот в этом выражении?
Код
'Таблица1'[Адрес] = 'Таблица1'[Адрес]
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
А что вы пытаетесь с чем сравнить вот в этом выражении?
PooHkrd, убрав отсюда EARLIER, формула вывела сумму общего количества по бренду "Бтн" - она так первый раз заработала. Далее подобрал чуть другой вариант, он посчитал мне верное количество в адресе:
Код
=CALCULATE(
           SUM([Кол-во кор.]),
                              ALLEXCEPT('Таблица1','Таблица1'[Адрес],'Таблица1'[Бренд ТМА Крупно]),
                              FILTER('Таблица1','Таблица1'[Бренд ТМА Крупно]="Бтн" && 'Таблица1'[Статус  ПРОМО Шоубокс]<>"_ПРОМО")
          )
… догадываюсь, что эта формула может быть лаконичнее, в данный момент уже пытаюсь получить следующий показатель 'Кол-во уник. адресов, для которых Кол-во коробок >= 1', чтобы впоследствии для тех, где уникальных больше 5, считать бонус - момент кажется посложнее:
Код
=CALCULATE(
           DISTINCTCOUNT('Таблица1'[Адрес]),
             FILTER('Таблица1','Таблица1'[БатДиз SUM Бтн]>=1)
          )

задачу пока не решил, буду блгодарен, если направите в нужное направление
 
Цитата
Дмитрий Марков написал:
убрав отсюда EARLIER, формула вывела
Т.е. разобраться с механизмом действия этой непростой функции вы не хотите? Просто: "убрал и чего-то посчиталось?" Это пять!
Мой аналитик с таким подходом вылетел бы на первой космической.
Или вы все таки разобрались почему так?
Цитата
Дмитрий Марков написал:
задачу пока не решил, буду блгодарен, если направите в нужное направление
По правилам форума один вопрос - одна тема. Поэтому в рамках данной темы помочь с новым вопросом, увы не смогу.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Или вы все таки разобрались почему так?
Конечно, сравнение с самим собой фильтрацию не даст, формулу писал по подобию, и вариант был первым, корректно написанным/отработавшим. И, разумеется, пока сложновато по хелпам увидеть картину работы контекстов
Да, сформулирую новую тему, спасибо
 
Цитата
PooHkrd написал:
Мой аналитик с таким подходом вылетел бы на первой космической.
Воу-воу, вот это пафос:)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Дмитрий Марков написал:
сообщение "... EARLIER/EARLIEST ссылается на более ранний контекст строки, который не существует."
я вообще имел в виду вот это. С причиной ошибки разобрались?

Dyroff, считаете такую схему рабочей?
ТС явно схватил формулу расчета для вычисляемого столбца (в котором по умолчанию есть контекст, с которым может работать EARLIER) и попытался построить на её основе меру, в которой такой же контекст нужно создавать самому. Лично я доходил до механики этой функции не быстро и при помощи пинков от местных знатоков вроде Максима Зеленского, Андрея VG и Владимира Чебыкина. А тут - методом перебора и результат вроде бы совпадает. А то что от такого расчета, скажем, прогноза можно принести предприятию убытков на десяток-другой лямов это фиг с ним?
Вот горшок пустой, он предмет простой...
 
PooHkrd, Да конечно же такая схема не работает тут даже нет места для  разногласий, понятно, что человек  только изучает инструмент. Просто такой назидательный тон, думаю, неприятен человеку, который обратился за помощью.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, так со стороны видится? Ну звиняйте, если кто обиделся. С другой стороны я ж не 100 баксов, чтобы всем нравиться.
Изменено: PooHkrd - 16.03.2020 17:02:10
Вот горшок пустой, он предмет простой...
 
PooHkrd,  :)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Дмитрий Марков,
если вы пытаетесь и вам интересно разбираться с DAX - то качайте DAX Studio
 
Цитата
PooHkrd написал:
С причиной ошибки разобрались?
Ваш ответ дал больше понимания, хелпы в некоторой степени смогли это непрямо подтвердить, функция выч столбцов, требует исходного контекста строки, а у меня применена в мере, отсюда и не работает, примеры - в основном про нарастающий итог на источнике... По крайней мере, помимо TotalMTD и TotalYTD, увидел вариант  c Earlier
 
DrillPipe, большое спасибо, тема уже давно примечена и актуальна, материалы подобраны, все никак не доберусь...  
Страницы: 1
Наверх