ДАННЫЕ: Таблица со следующими полями: Продукт, ID, Дата вступления в силу, Цена
Требования: Извлечь цену идентификатора продукта, который соответствуетзаданный диапазон дат.
Допущения: В этом решении предполагается, что комбинации Product, Id, Price и Date являются уникальными.
Критерии даты: TheВ следующей таблице показаны несколько форматов критериев, которые можно использовать для извлечения цены идентификатора продукта на основе даты вступления в силу, а также выбор, который будет применяться для каждого критерия, если результат критерия включает несколько элементов.
Формулы: Поскольку таблица содержит уникальные комбинации Product, Id, Price и Date, а ожидаемый результат числовой (т. Е. Price)использование функции SUMIFS
представляется целесообразным.
Критерии: 1.Equals
Формула:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID,
[Effective Date range], #Date )
Где:
[Ценовой диапазон] =Столбец «Цена»
[Ассортимент продукта] = Столбец «Продукт»
#Product = Товар, который нам нужно найти
[Диапазон идентификаторов] = Столбец идентификатора
#ID = Идентификатор, который нам нужно найти
[Диапазон дат вступления в силу] = столбец Дата вступления в силу
#Date = Дата, которую нам нужно найти
Другие критерии: Следующие пять критериев могут вернуть несколько возможных Dates
поэтому мы будем использовать функцию AGGREGATE
для выбора требуемого Date
согласно таблице критериев.
Формула:
= AGGREGATE( #Sel, 6, [Effective Date range] /
( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] #ƒ #Date) ), 1 )
Где:
#Sel = Выбор, который будет применяться согласно таблице критериев (т.е. 14 = Самая поздняя дата и 15 = Самая ранняя дата)
# ƒ = Сравнение, которое будет применяться на основетребуемые критерии
Затем мы будем использовать дату, полученную из функции AGGREGATE, в функции SUMIFS для получения требуемой цены:
Формула:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID,
[Effective Date range], #AGGREGATE )
Где:
#AGGREGATE = Итоговая дата из функции AGGREGATE
Для последних пяти критериев базовая формула будет иметь вид:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
AGGREGATE( #Sel, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ( [Effective Date range] #ƒ #Date ) ), 1 ) )
, и мы просто заменим #Sel
и #ƒ
следующим образом:
Критерии: 2. До
#Sel = 14
# ƒ = <
Критерии: 3.До или равно
#Sel = 14
# ƒ = <=
Критерии: 4. Между
#Sel= 15
# ƒ = >=
и <=
# Date1 = Дата от
# Date2 = Дата до
Формула:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] >= #Date1) * ([Effective Date range] <= #Date2) ), 1 ) )
Критерии: 5.После или равно
#Sel = 15
# ƒ = >=
Критерии: 6.After
#Sel= 15
# ƒ = >
Решение: Чтобы применить требуемую формулу для каждого критерия, нам нужно объединить их все в одну формулу.Хотя этого можно достичь с помощью ряда вложенных IF
с, вместо этого мы будем использовать функцию CHOOSE
Формула:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
CHOOSE( #Criteria, #Date,
AGGREGATE( 14, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] < #Date) ), 1 ),
AGGREGATE( 14, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] <= #Date) ), 1 ),
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] >= #Date1) * ([Effective Date range] <= #Date2) ), 1 ),
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] >= #Date) ), 1 ),
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] > #Date) ), 1 ) ) )
Где:
# Критерии = Критерии, применяемые согласно таблице критериев (то есть от 1 до 6)
# ƒ = Сравнение, которое должно применяться на основе требуемых критериев
Массив формулможет использоваться для дальнейшего уменьшения длины формулы
Массив формул:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
IF( #Criteria = 1, #Date,
AGGREGATE( LOOKUP( #Criteria, {1,"N/A";2,14;4,15} ), 6, [Effective Date range] /
( ( [Product range] = #Product ) * ( [ID range] = #ID )
* CHOOSE( #CRITERIA, "N/A",
[Effective Date range] < #Date, [Effective Date range] <= #Date,
([Effective Date range] >= #Date1) * ([Effective Date range] <= #Date2),
[Effective Date range] >= #Date,[Effective Date range] > #Date ) ), 1 ) ) )
Реализация: Предполагается, что таблица данных расположена в B2:E8
Введите эту формулу в ячейку L6
и скопируйте в L7:L9
= SUMIFS( $E$6:$E$11, $B$6:$B$11, $H$6, $C$6:$C$11, $H$7, $D$6:$D$11,
CHOOSE( LEFT( $I6 ), $J6,
AGGREGATE( 14, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 < $J6 ) ), 1 ),
AGGREGATE( 14, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 <= $J6 ) ), 1 ),
AGGREGATE( 15, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 >= $J6 ) * ( $D$6:$D$11 <= $K6 ) ), 1 ),
AGGREGATE( 15, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 >= $J6 ) ), 1 ),
AGGREGATE( 15, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 > $J6 ) ), 1 ) ) )
Введите этот массив формул в ячейку M6
и копирование в M7:M9
FormulaArrays
вводятся нажатием CTRL + SHIFT + ENTER одновременно, формула будет заключена в {
и }
, если введено правильно.
= SUMIFS( $E$6:$E$11, $B$6:$B$11, $H$6, $C$6:$C$11, $H$7, $D$6:$D$11,
IF( --LEFT( $I6 ) = 1, $J6,
AGGREGATE( LOOKUP( --LEFT( $I6 ), {1,"N/A";2,14;4,15} ), 6, $D$6:$D$11 /
( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* CHOOSE( LEFT( $I6 ), "N/A",
$D$6:$D$11 < $J6, $D$6:$D$11 <= $J6,
( $D$6:$D$11 >= $J6 ) * ( $D$6:$D$11 <= $K6 ),
$D$6:$D$11 >= $J6, $D$6:$D$11 > $J6 ) ), 1 ) ) )
Альтернативный форматвидно на рисунке ниже:
Рекомендуется прочитать об использованных ресурсах:
Функция AGGREGATE , Функция ВЫБРАТЬ , Функция SUMIFS