[Мастер класс по DAX] Вывод в Power BI (P Pivot) последней измененной цены товара на выбранную дату

Поделиться
HTML-код
  • Опубликовано: 19 окт 2024

Комментарии • 12

  • @ДмитрийНикитин-и8о
    @ДмитрийНикитин-и8о 3 месяца назад

    Спасибо! Я похожую задачку недавно решал путём добавления в Power Query нехватающих строк с датами по товарам и заполнением их последней ценой вниз. Возьму на вооружение этот способ. Я чуть упростил формулу:
    Последняя цена :=
    VAR Last_Date =
    CALCULATE(
    MAX( 'ИзменениеЦенПоТоварам'[ДатаИзмененияЦены] ),
    'спрКалендарь'[Date]

  • @liliyastorogenko
    @liliyastorogenko 4 года назад

    Спасибо. Здорово!

  • @makotkin
    @makotkin 2 года назад

    Недавно попалась интересная задачка о ценах и прибыли.
    Где вместо таблицы изменения цены (дата, товар, цена) у нас есть:
    1. таблица закупок (дата, товар, КОЛВО, цена закупки).
    2. таблица продаж (дата, товар, колво, цена продажи).
    Как в этом случае рассчитать чистую прибыль от продаж за периоды (например понедельно).
    Ведь закупки разного объема. Сегодня купили 100шт по 10 рублей, а завтра 2000шт по 9 рублей. И продажи разного объема.
    Есть мысли как это решается?

  • @webdozor
    @webdozor 3 года назад +1

    Не совсем понял, для чего существует связь между таблицами, в данном случае она просто заставляет всякий раз сбрасывать фильтры с даты.
    В любом случае, на моей взгляд, данную задачу можно решить одним CALCULATE.
    Последняя цена =
    VAR CURRENTDATE = MAX ( 'спрКалендарь'[Date] )
    RETURN
    IF ( HASONEFILTER ( 'ИзменениеЦенПоТоварам'[Товар] ),
    CALCULATE ( LASTNONBLANKVALUE ( 'ИзменениеЦенПоТоварам'[ДатаИзмененияЦены], SUM ( 'ИзменениеЦенПоТоварам'[Цена] ) ),
    ALL ( 'спрКалендарь'[Date] ),
    'ИзменениеЦенПоТоварам'[ДатаИзмененияЦены]

    • @bi-powerbipivotdax7623
      @bi-powerbipivotdax7623  3 года назад +1

      1) в DAX одну и ту же задачу можно решить многими способами. Моим, Вашим и другими
      2) Связь с календарем создана, так как в реальной ситуации в модели данных будет справочник календарь. И все расчеты должны идти через этот справочник. В DAX есть правило - не использовать те даты, которые находятся в таблицах. Для дат нужно создавать отдельные календари, иначе многие функции работы с датами в определенных ситуациях будут выдавать ошибки и неверные результаты.

    • @webdozor
      @webdozor 3 года назад +1

      @@bi-powerbipivotdax7623 Я не пытался сказать, что мой вариант единственно верный. Просто был вопрос ниже о более заточенном способе. Из известных мне, LASTNONBLANKVALUE - наиболее подходит для этой задачи. Плюс, всегда есть вопрос производительности. На маленькой выборке это конечно не критично, но с увеличением объема данных и количества мер, каждая миллисекунда дорога. И если говорить чисто о производительности, то мой вариант тоже не самый - самый.

    • @ВладЛев-х7м
      @ВладЛев-х7м 7 месяцев назад

      сортов того, как делать не нужно тоже много, мы ведь инженеры и должны стремится к совершенству @@bi-powerbipivotdax7623

    • @ВладЛев-х7м
      @ВладЛев-х7м 7 месяцев назад

      @@webdozor Позволю себе критику))
      На больших данных ваш код может работать чуть медленно из-за функции LASTNONBLANKVALUE, так как эта функция будем высчитывать цену на каждую дату. Вместо это можно использовать функцию MAX или LASTADE которые вернут просто последнюю дату. Я подготовил пример:
      Последня цена =
      VAR _LastDate =
      CALCULATETABLE(
      LASTDATE('ИзменениеЦенПоТоварам'[ДатаИзмененияЦены]),
      'спрКалендарь'[Date]

    • @webdozor
      @webdozor 7 месяцев назад +2

      @@ВладЛев-х7м Я уже и забыл про этот пост. В любом случае, про производительность я писал в своем следующем комментарии. Идея была в том, что LASTNOTBLANKVBALUE существует как раз для решения подобных задач, и раз уж мы рассматривем этот вопрос, про нее неплохо было бы знать.
      Но если уж вы напираете нп производительность, без ущерба для красоты решение должно быть примерно такое:
      last_price =
      VAR PREVIOUS_PRICE_CHANGE_DATE = CALCULATE(
      MAX('ИзменениеЦенПоТоварам'[ДатаИзмененияЦены]),
      'спрКалендарь'[Date]

  • @zhiv_pro
    @zhiv_pro 5 лет назад

    Добрый день! Возможно ли данные Мастер-классы увидеть в своем личном кабинете?

    • @bi-powerbipivotdax7623
      @bi-powerbipivotdax7623  5 лет назад

      Здравствуйте, Игорь. Да, данные мастер-классы уже доступны в личном кабинете учеников курса "DAX - это просто". В папке самого курса, в подпапке "дополнительные материалы"