Вариант для вашего случая (чуть отличный, так как наименование с кодом продукта для измерения по строкам задаётся с таблицы прайса, а не продаж. Чуть сложнее.
Скрытый текст |
---|
Код |
---|
=
VAR priceIterator =
GROUPBY( 'прайс'; [Код продукта]; 'прайс'[Дата прайса] ) // таблица ключей пар прайса по коду продукта и дате
RETURN
// цикл по строковому контексту текущей пары код продукта дата вступления прайса, ака each в Power Query
SUMX(
priceIterator;
VAR curProduct = 'прайс'[Код продукта] // получаем текущий код продукта прайса
VAR curPriceDate = 'прайс'[Дата прайса] // получаем текущую дату по текущего кода продукта
VAR nextPriceDate =
// вычисляем следующую дату изменения прайса по текущему коду продукта
CALCULATE(
MIN( 'прайс'[Дата прайса] ); // как минимум из последующих дат
ALLEXCEPT( 'прайс'; 'прайс'[Код продукта] ); // отпуская фильтрацию по всем кроме текущего кода продукта
'прайс'[Дата прайса] > curPriceDate // отбирая даты, большие текущей
)
VAR toPriceDate =
// довычисляем следующую дату изменения прайса по текущему продукту
// если полученная следующая дата не существует, то принимаем некоторую очень большую, иначе используем вычисленную
IF( ISBLANK( nextPriceDate ); DATE( 9999; 01; 01 ); nextPriceDate )
VAR curPriceValue =
CALCULATE( SUM( 'прайс'[Цена] ) ) // в строковом контексте определяем текущую цену текущего кода и даты прайса
VAR saleProductCount =
CALCULATE( // определяем количество данного проданного кода продукта по дате действия прайса для него
SUM( 'продажи'[Кол-во] );
'продажи'[Дата продажи] >= curPriceDate;
'продажи'[Дата продажи] < toPriceDate;
'продажи'[Код продукта] = curProduct
)
RETURN
// возвращаем стоимость как количесво проданного кода на текущую цену по прайсу
curPriceValue * saleProductCount
) |
|