Страницы: 1
RSS
Как написать на языке запросов DAX функцию суммесли
 
Добрый вечер, уважаемые.
Никак не получается написать в power BI аналог функции суммесли. Мануал по calculate, sum, sumx почитал, но все равно ничего не получилось. Чувствую, что теряю время. Прошу немного вашего :). Заранее спасибо.
Изменено: Valtron85 - 20.11.2019 17:24:23
 
Цитата
Valtron85 написал:
не получается написать в power BI
а почему пример в Excel? А BI - судя по примеру - сам сгруппирует и ничего прописывать не надо
Изменено: buchlotnik - 20.11.2019 17:47:12
Соблюдение правил форума не освобождает от модераторского произвола
 
Это не пример. То что вы хотите и так сделает сводная таблица. Или я такой далекий и не понимаю ваши высокие замыслы.
Сделайте нормальный пример с моделью данных с таблицами в ней и на пальцах объясните чего вам собственно надо?
Вот горшок пустой, он предмет простой...
 
Уважаемые, я просто попросил написать как будет выглядеть формула  к листу L1, столбец С, на языке запросов DAX. (аналог функции суммесли в Excel)
 
В DAX нет аналога функции СУММЕСЛИ в общем виде. Вам нужна функция для вычисляемого столбца в таблице? покажите ваши таблицы в модели и их связи. Вам нужна формула для меры? Покажите вид отчета и желаемый результат. формулы DAX это не формулы Эксель там все по-другому устроено.
Вот горшок пустой, он предмет простой...
 
Вам нужна функция для вычисляемого столбца в таблице?
да.
 
Цитата
Valtron85 написал:
да.
Цитата
PooHkrd написал:
покажите ваши таблицы в модели и их связи.
От этого будет зависеть формула.
Вот горшок пустой, он предмет простой...
 
Valtron85, если очень грубо говорить,
то можно использовать calculate & filter:
Код
Measure = Calculate (sum ([колонка которую суммируем]);Filter([таблица в которой суммируешь];[поле в котором пишешь фильтр]))
Пример из моего опыта:
Код
Measure = calculate(sum('budget'[RISK]);filter('budget';'budget'[YEAR]="2019"))
Как-то так...
Но опять же это только один вариант из многих!
Изменено: zhekachan - 20.11.2019 18:47:45
 
Если для столбца и максимально приближенно к самой логике СУММЕСЛИ, то так:
Код
=sumx(filter('Таблица1';'Таблица1'[ФИО]=EARLIER('Таблица1'[ФИО]));'Таблица1'[сумма])
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff огромнейшее Вам спасибо.
Именно это и было мне нужно. Тему можно закрывать.

P.S. всем также спасибо за участие.

P.S.S. а так тоже можно?
Столбец = CALCULATE(sumx(L2;L2[сумма]);L2[ФИО] =EARLIER(L1[ФИО]))
Изменено: Valtron85 - 21.11.2019 09:52:20
 
Valtron85, Пожалуйста. Только это вряд ли Вам поможет.
Вас не зря PooHkrd, спрашивал про желаемый вид отчета, так как для решения Вашей задачи скорее всего и не требовался такой подход.
Но Вы придумали себе именно этот способ решения и ровно при следующей задаче, Вы придете снова спрашивать, как поступить. В этом, конечно нет ничего плохого. Плохо то, что Вы не поймете суть. DAX  и Excel настолько разные в методах вычислений, как стиральная и посудомоечная машина в принципах работы.
Dax  не видит ячеек, он видит только столбцы. Логика и методы работы в формулах Dax  в корне отличаются от методов и логики работы в формулах Ecxel. А вы пытаетесь заставить его работать, по знакомым Вам методам.
Ну, это тоже самое, что пытаться помыть столовую посуду в стиральной машине вместо посудомоечной; с вилками и ложками еще-туда-сюда, ну немного пошумит, но отмоет - работает же, а вот когда загрузите и постираете тарелки, поймете, что делаете что-то не так.
Так же и тут- не пытайтесь заставить работать Dax  методами Excel, постарайтесь понять, как он работает и от этого исходите.

Ответ на ваш вопрос по формуле
Код
Столбец = CALCULATE(sumx(L2;L2[сумма]);L2[ФИО] =EARLIER(L1[ФИО]))

думаю, вы уже поняли сами:)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, зачем вы все время пользуете SUMX? Это не очень продуктивно, можно ведь так.
Код
=CALCULATE( SUM(L_2[сумма] ); FILTER( L_2; 'L_2'[ФИО] = EARLIER( L_1[ФИО] ) ) )

можно попробовать даже так, если хочется покороче:
Код
=CALCULATE( SUM(L_2[сумма] ); L_2[ФИО] = EARLIER( L_1[ФИО] ) )

Использование иксовых функций требуется только тогда когда нужно в формуле учесть контекст строки (эти функции его добавляют), а если он не нужен то лучше использовать стандартные агрегаторы без иксов, они менее ресурсозатратные.
Изменено: PooHkrd - 22.11.2019 15:25:59
Вот горшок пустой, он предмет простой...
 
PooHkrd, Я думал так:
Calculate в совместном использовании с агрегационной функцией  для каждой строки таблицы  создаст фильтр из каждого значения по столбцам объединяя их в режиме "И", то есть по сути создавая контекст строки.
То есть, в моем понимании это была просто более короткая форма записи формулы, которая по сути выполняет ту же операцию.
Ну например как для варианта
Код
L_2[ФИО] = EARLIER( L_1[ФИО])

- это же по сути просто укороченная форма записи. Внутри, Dax все равно построит конструкцию:
Код
 FILTER( L_2; 'L_2'[ФИО] = EARLIER( L_1[ФИО] ) )

Изменится только форма записи но не процесс вычисления.

А вот то, что X- функции более ресурсозатратны, я не знал. Спасибо.
Изменено: Dyroff - 23.11.2019 23:05:58
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
В данном конкретном случае план запроса у наших вариантов может и совпадать, т.к. в выражении во втором аргументе SUMX не применяются действия, которые по факту используют контекст строки. Тут уж как оптимизатор движка сработает. Но по-сути сами прикиньте что быстрее просто сложить элементы столбца или сначала вычислить все элементы, а потом уже их сложить?
Кстати это все можно проверить в dax studio.
Вот горшок пустой, он предмет простой...
 
Жаль, у меня нет DAX studio, было бы интересно проверить
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
Жаль, у меня нет DAX studio, было бы интересно проверить
Можно же скачать и установить DAX Studio
 
Андрей VG, спасибо), пошел устанавливать.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
Вы придете снова спрашивать, как поступить. В этом, конечно нет ничего плохого. Плохо то, что Вы не поймете суть.
Добрый день господа и дамы!
Согласен полностью и сожалею только об одном, что не прочитал то что Вы написали несколько недель назад (укатил в командировку и совершенно не было времени)

Если уж спрашивать, то до конца :)
Посоветуйте с чего начать изучение DAX, для тех, кто немного знаком с Excel, чуть-чуть пишет формулы, да составляет сводные таблички.
 
Цитата
Valtron85 написал:
с чего начать изучение DAX
С начала
Изменено: PooHkrd - 19.12.2019 16:43:00
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх