Страницы: 1
RSS
DAX. Создание меры. Аналог СУММЕСЛИМН. Суммируем значения из одной таблицы в другую
 
Добрый день уважаемые коллеги.

В отчете PowerBI есть 3 таблицы.
1. - Общая имеет значения в разрезе месяцев.
2 и 3 таблицы представляют собой схлопнутый вариант первой таблицы но без месяцев и значений (как бы сводная но пока без значений).

Не могу найти формулу с помощью которой смог бы затянуть значения из основной таблицы в вспомогательные создав новую меру в dax.
Пропишу как бы аналог в эксель  -  суммеслимн('Данныеbi'[Значение];'ДанныеBI'[признак отчета]='Данные +'[Признак отчета];'ДанныеBI'[город]='Данные +'[город].

Но полагаю, так как DAX не мыслит строками, а мыслит столбцам, он не может спэмить условия из разных таблиц.
Посмотрите пожалуйста скриншот.

Более подробно:
Я создал две отдельные таблицы  (+ и -) они схлопнуты в части месяцев, то есть как будто сводная но без месяца (сразу значения к году).
Теперь мне надо в них затянуть значения, то есть суммировать по двум условиям - "признак отчета" и "город" - что бы суммировать значения за все месяца по данным условиям. Подскажите пожалуйста как мне прописать правильно данную формулу для создания меры.
Изменено: bobyjoy - 02.07.2019 19:50:35
 
Доброе время суток
Цитата
bobyjoy написал:
DAX не мыслит строками
Ну, до мыслить Power BI пока ещё далеко, разве что через Python или R воспользоваться для этого реализацией какой-нибудь нейросети :) . Но может работать и на строках. Просто стоит поискать Dax строковый контекст :)
Варианты.
1. Точно тоже что суммесли
Код
Column+3 = Var calc = CALCULATE(SUM('ДанныеBI'[Значение]); FILTER('ДанныеBI'; 'ДанныеBI'[Город] = EARLIER('ДанныеBI +'[Город]) && 'ДанныеBI'[Признак отчета] = EARLIER('ДанныеBI +'[Признак отчета])))
Return IF(calc > 0; calc; BLANK())

2. почти аналогично
Код
Column+2 = Var subTable = FILTER('ДанныеBI'; 'ДанныеBI'[Город] = EARLIER('ДанныеBI +'[Город]) && 'ДанныеBI'[Признак отчета] = EARLIER('ДанныеBI +'[Признак отчета]))
Var calc = SUMX(subTable; 'ДанныеBI'[Значение])
Return IF(calc > 0; calc; BLANK())

3. Чуть экзотичнее
Код
Column+ = Var common = SUMMARIZE('ДанныеBI'; 'ДанныеBI'[Город]; 'ДанныеBI'[Признак отчета]; "common sum"; SUM('ДанныеBI'[Значение]))
Var plusResult = FILTER(common; 'ДанныеBI'[Город] = EARLIER('ДанныеBI +'[Город]) && 'ДанныеBI'[Признак отчета] = EARLIER('ДанныеBI +'[Признак отчета]) && [common sum] > 0)
Return MAXX(plusResult; [common sum])
Изменено: Андрей VG - 02.07.2019 20:17:23
 
Добрый день!
Используйте для задания условия функцию EARLIER. Она выхватит значение строки из столбца
 
Цитата
Андрей VG написал:
1. Точно тоже что суммесли
А можно вместо && использовать еще раз оператор FILTER? или там есть ограниения по кол-во данного оператора?
Код
Column+3 = Var calc = CALCULATE(SUM('ДанныеBI'[Значение]); FILTER('ДанныеBI'; 'ДанныеBI'[Город] = EARLIER('ДанныеBI +'[Город]) && 'ДанныеBI'[Признак отчета] = EARLIER('ДанныеBI +'[Признак отчета])))
Return IF(calc > 0; calc; BLANK())

Изменено: bobyjoy - 02.07.2019 20:29:20
 
Андрей.

Пробую применить формулу №1 (Columnt+3), не получается, выдает следующую ошибку.
 
Коллеги, прописал корректно формулу.
Оказывается с данным оператором earlier, нужно добавлять не МЕРУ а КОЛОНКУ!
Изменено: bobyjoy - 04.07.2019 16:34:57
 
Цитата
bobyjoy написал:
А можно вместо && использовать еще раз оператор FILTER?
можно. но не нужно. зачем два раза бегать по одной и той же таблице, вместо одного пробега?
F1 творит чудеса
 
Максим Зеленский,
Тогда я понял как она работает) Спасибо)
Страницы: 1
Наверх