Страницы: 1
RSS
Поиск по неточному совпадению в DAX, Аналог поиска по неточному совпадению в функциях ВПР и ИНДЕКС+ПОИСКПОЗ
 
Всех приветствую!
Прошу помощи в написании формулы в DAX:
Задача - узнать стоимость отправления в зависимости от веса и объема.
Логика расчета - определяем стоимость по наибольшему показателю если стоимость больше по весу-  выводим по весу, если по объему- выводим по объему.
Как решаю сейчас в Exel:
сначала узнаю стоимость по весу -          ИНДЕКС(Таблица2[Тариф];ПОИСКПОЗ(Лист3!A2;Таблица2[Вес, кг];1))
потом определяю стоимость по объему -  ИНДЕКС(Таблица2[Тариф];ПОИСКПОЗ(B2;Таблица2[Объём, м3];1))
Потом, соответсвено определяю максимум -МАКС(ИНДЕКС(Таблица2[Тариф];ПОИСКПОЗ(Лист3!A2;Таблица2[Вес, кг];1));ИНДЕКС(Таблица2[Тариф];ПОИСКПОЗ(B2;Таблица2[Объём, м3];1)))

Как тоже самое сделать в Dax?
Заранее благодарен.
Изменено: Dyroff - 10.06.2019 13:22:20
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Добрый день. Формула для столбца:
Код
=MAX( 
   CALCULATE(
      MAX('спрТариф'[Тариф]);
      FILTER('спрТариф';[Вес, кг]<'Таблица3'[Вес]) ); 
   CALCULATE(
      MAX('спрТариф'[Тариф]);
      FILTER('спрТариф';[Объём, м3]<'Таблица3'[Объем]) 
   )
)
Вот горшок пустой, он предмет простой...
 
Код
=
MAX (
    CALCULATE (
        MAX ( 'спрТариф'[Тариф] );
        FILTER ( ALL ( 'спрТариф'[Вес. кг] ); 'спрТариф'[Вес. кг] <= 'Таблица3'[Вес] )
    );
    CALCULATE (
        MAX ( 'спрТариф'[Тариф] );
        FILTER ( ALL ( 'спрТариф'[Объём. м3] ); 'спрТариф'[Объём. м3] <= 'Таблица3'[Объем] )
    )
)

PooHkrd, не стоит пихать в FILTER всю таблицу без необходимости. Мало ли, она на стороне "много" в отношениях
F1 творит чудеса
 
Максим Зеленский, спасибо за совет, но я все таки посмотрел, что таблицы не связаны и это все таки справочник.
А вот применение ALL к справочнику в формуле столбца оно принципиально?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
А вот применение ALL к справочнику в формуле столбца оно принципиально?
это просто best practice для быстродействия:
1) FILTER сама по себе тяжелая функция, и чем меньший объем данных ей передаем, тем лучше
2) в данном случае ALL или VALUES или DISTINCT или ALLNOBLANKROW - не принципиально. Главное, чтобы на вход FILTER получила минимально необходимый набор данных в виде таблицы
3) даже если эти таблицы между собой не связаны, справочник может оказаться на стороне "много" в других связях (теоретически). И если пихнуть всю таблицу в FILTER, она будет перебирать расширенную таблицу со всеми столбцами из таблиц на стороне 1.
4) пользуемся best practice в мелочах => не забываем пользоваться когда надо :)
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
она будет перебирать расширенную таблицу со всеми столбцами из таблиц на стороне 1.
Вот! А про это я и не подумал. Вы недавно в группе вроде бы про то же самое кому-то толковали, а я к этой теме не применил. Как всегда спасибо.
Вот горшок пустой, он предмет простой...
 
PooHkrd, Максим Зеленский,  Спасибо  вам за решение и отдельно за переписку из которой всегда можно взять очень много полезной доп информации к решению:)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Наверх