Страницы: 1
RSS
DAX. Как снять фильтр наложеный на страницу с одной конкретной меры
 
Доброй ночи.
Разрабатываю отчет по предприятию в Power BI о доходах и расходах.
В частности необходимо сделать следующее.
Есть мера, чистый доход, она состоит из 3 других мер. которые в свою очередь состоят с следующих
На листе есть 2 фильтра, организация и культура растения.
Мне нужно вывести показатель дохода по организации, таким образом чтоб он изменялся только при смене организации, а когда меняеться культра он показывает доход всего предприятия, не фильтруя по культуре.
Как можно так наложить фильтр?
Мера имеет примерно следующий вид
Чистый доход= выручка+допполнительный доход-общие расходы

Возможно еще какие данные нужны незнаю, выложил бы файл но он в Power BI.
Спасибо.
Изменено: San4o - 05.04.2020 00:07:25
 
Цитата
San4o написал:
выложил бы файл но он в Power BI
ну и что, можно и pbix поковырять
Соблюдение правил форума не освобождает от модераторского произвола
 
Добрый день. Создал упрощенную модель. И столкнулся еще с одним вопросом фильтрации.
1. По поводу вопроса выше.
В примере на странице 1 есть карточка "По предприятию" вот на нее нужно наложить фильтр что б при выборе культуры в фильтре, (слева вверху), чистый доход на ней не менялся, а остался по всем культурам(по выбранному предприятию). Изменялся только тогда когда мы меняем предприятие. (Вторая карточка плавающая, показывает то что сейчас отфильтровано).

2. Возникший вопрос следующий на странице 2 в примере.
По какой причине фильтр может не работать из-за смены столбца фильтрации?
Мера "ОПР, $/га" = if(contains('Спр_Культура';'Спр_Культура'[ВидКультуры];"Пар")||contains('Спр_Культура';'Спр_Культура'[ВидКультуры];"кормовые");0;CALCULATE('ОрПлата'[ОПР, $];ALLEXCEPT('Спр_Организация';'Спр_Организация'[Организация])))/CALCULATE('Площадь'[Площадь, га];'Спр_Культура'[Культура]<>"Пар"&&'Спр_Культура'[Культура]<>"Травы на сено";ALLSELECTED('Спр_Культура'[Культура]);ALLSELECTED('Спр_Культура'[ВидКультуры]))

работает при фильтрации культур правильно, но когда я ее роблю так:

"ОПР, 2 "= if(contains('Спр_Культура';'Спр_Культура'[ВидКультуры];"Пар")||contains('Спр_Культура';'Спр_Культура'[ВидКультуры];"кормовые");0;CALCULATE('ОрПлата'[ОПР, $];ALLEXCEPT('Спр_Организация';'Спр_Организация'[Организация])))/CALCULATE('Площадь'[Площадь, га];'Спр_Культура'[ВидКультуры]<>"Пар"&&'Спр_Культура'[ВидКультуры]<>"кормовые";ALLSELECTED('Спр_Культура'[Культура]);ALLSELECTED('Спр_Культура'[ВидКультуры]))

Потому как кормовых культур много проще фильтровать по виду. Мера не срабатывает, и данные меняются. Где может быть ошибка?
Спасибо.
 
По первому вопросу нашел решение, Взаимодействие фильтров.
А вот второй пока никак не пойму почему по одному столбцу работает по другому нет. ... может кто сталкивался с этим?
Изменено: Sancho2020 - 06.04.2020 11:19:19
 
Гуру DAX, не ужели ни кого нету идей?
 
Вы там немного лишнего навернули... целиком разбирать не буду, некогда

Если правильная для вас первая формула, а вторая неверная, то тогда так:

Верхняя часть формул у вас одинаковая, разница только в одном кусочке знаменателя, смотрим только на него:
Код
CALCULATE (
        'Площадь'[Площадь, га];
        'Спр_Культура'[Культура] <> "Пар"
            && 'Спр_Культура'[Культура] <> "Травы на сено";
        ALLSELECTED ( 'Спр_Культура'[Культура] );
        ALLSELECTED ( 'Спр_Культура'[ВидКультуры] )
)

Код
CALCULATE (
        'Площадь'[Площадь, га];
        'Спр_Культура'[ВидКультуры] <> "Пар"
            && 'Спр_Культура'[ВидКультуры] <> "кормовые";
        ALLSELECTED ( 'Спр_Культура'[Культура] );
        ALLSELECTED ( 'Спр_Культура'[ВидКультуры] )
)


Все дело в том, что выражение
Код
'Спр_Культура'[Культура] <> "Пар"  && 'Спр_Культура'[Культура] <> "Травы на сено";
является эквивалентом формулы
Код
FILTER(ALL('Спр_Культура'[Культура]); 'Спр_Культура'[Культура] <> "Пар" ) 
    && FILTER(ALL('Спр_Культура'[Культура]); 'Спр_Культура'[Культура] <> "Травы на сено" )

Как видите, сначала сбрасывается примененный фильтр по столбцу Культура, потом отбираются те значения, которые не равны Пар.
Аналогично с травами на сено. Итого после применения этих фильтров у нас остаются все культуры, которые не "Пар" и не "Травы на сено".

При этом у вас мало того, что срез по культуре, но и в строке матрицы стоит культура. этот внешний контекст вашей формулой игнорируется - за счет того, что вот эти вот FILTER на нее тоже плевать хотели.

Если смотреть на вторую меру, у нее фильтр выглядит уже не так:
Код
FILTER(ALL( 'Спр_Культура'[ВидКультуры]); 'Спр_Культура'[ВидКультуры] <> "Пар")
    && FILTER(ALL( 'Спр_Культура'[ВидКультуры]); 'Спр_Культура'[ВидКультуры] <> "кормовые")
То есть, здесь фильтр со столбца [Культура] уже не сбрасывается, сбрасывается только с "ВидКультуры", но там и нет фильтра, значит, фильтр по Культуре продолжает действовать и надо его сбросить:
Код
CALCULATE (
        'Площадь'[Площадь, га];
        'Спр_Культура'[ВидКультуры] <> "Пар"
            && 'Спр_Культура'[ВидКультуры] <> "кормовые";
        ALL ( 'Спр_Культура'[Культура] )
)

а в первой формуле достаточно такого:
Код
CALCULATE (
        'Площадь'[Площадь, га];
        'Спр_Культура'[Культура] <> "Пар"
            && 'Спр_Культура'[Культура] <> "Травы на сено"
)

Ну разве что у вас где-то еще используется срез по видам культур.
F1 творит чудеса
 
Максим Зеленский
Агонь, всё сработало.
Большое Вам спасибо.  
Страницы: 1
Наверх