Как распределить многоуровневую комиссию по разным уровням в Google Таблицах с помощью ARRAYFORMULA?

Я работаю над формулой 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 — пусто.

Как распределить многоуровневую комиссию по разным уровням в Google Таблицах с помощью ARRAYFORMULA?

**Что я пробовал: ** Я попытался использовать 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 евро. Формула массива также не работала для следующих строк. Первый ряд сработал.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот возможное решение:

=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))}))))))))

Ты настоящий герой! Спасибо!

Poshin 14.08.2024 10:00

Другие вопросы по теме