Я работаю над формулой Google Таблиц, позволяющей распределять комиссию по разным уровням. Мне нужно распределить полученную сумму комиссии по четырем уровням с конкретными лимитами:
• Tier 1: 0 - 100,000 EUR
• Tier 2: 100,000 - 150,000 EUR (max 50,000 EUR)
• Tier 3: 150,000 - 200,000 EUR (max 50,000 EUR)
• Tier 4: 200,000 EUR and above
Идея состоит в том, чтобы заполнить каждый уровень последовательно. Например, если комиссия составляет 170 000 евро, для уровня 1 потребуется 100 000 евро, для уровня 2 — 50 000 евро, для уровня 3 — 20 000 евро, а для уровня 4 — пусто.
**Что я пробовал: ** Я попытался использовать ARRAYFORMULA с MIN, MAX и базовыми арифметическими операциями, чтобы распределить комиссию по этим уровням. Вот подходы, которые я пробовал:
1. Basic allocation formula for each tier:
• Tier 1: ARRAYFORMULA(MIN(100000; A2:A))
• Tier 2: ARRAYFORMULA(MIN(50000; MAX(0; A2:A - 100000)))
• Tier 3: ARRAYFORMULA(MIN(50000; MAX(0; A2:A - 150000)))
• Tier 4: ARRAYFORMULA(MAX(0; A2:A - 200000))
2. Adjusting the logic to ensure that the tiers are filled sequentially and correctly capped at their limits.
**Я также пробовал эту формулу: **
• Tier 1: ARRAYFORMULA(MIN(100000; MAX(0; A2:A)))
• Tier 2: ARRAYFORMULA(MIN(50000, MAX(0, A2:A - B2:B)))
• Tier 3: ARRAYFORMULA(MIN(50000, MAX(0, A2:A - B2:B - C2:C)))
• Tier 4: 200,000 EUR and above
Однако формулы либо неправильно распределяют суммы по уровням, либо вообще не заполняют значения в ячейках.
С формулами во всех столбцах C:D в первой строке у меня было пустое поле или 50 000 евро. Формула массива также не работала для следующих строк. Первый ряд сработал.
Вот возможное решение:
=ARRAYFORMULA(LET(v;TOCOL(A3:A;1);REDUCE(TOROW(;1);
MAP(B2:E2;LAMBDA(t;IFERROR(MMULT(SPLIT(SUBSTITUTE(t;".";);" €-");{-1;1});9^9)));
LAMBDA(x;t;HSTACK(x;REDUCE(TOCOL(;1);
IFERROR(REDUCE(v;SEQUENCE(1;COLUMNS(x));LAMBDA(a;i;a-INDEX(x;;i)));v);
LAMBDA(a;c;LET(s;SUM(a);{a;IF(OR(c=0;s>=t);;IF(s+c>t;t-s;c))}))))))))
Ты настоящий герой! Спасибо!