我正在研究 Google Sheets 公式,以便在不同层级或级别之间分配佣金。我需要将产生的佣金金额分配给具有特定限制的四个层级:
• 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 级将为空。
**我尝试过的: ** 我尝试使用带有 MIN、MAX 和基本算术运算的 ARRAYFORMULA 在这些层之间分配佣金。以下是我尝试过的方法:
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 也不适用于下一行。第一行是有效的。
这是一个可能的解决方案:
=ARRAYFORMULA(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(TOCOL(A3:A;1);SEQUENCE(1;COLUMNS(x));LAMBDA(a;i;a-INDEX(x;;i)));TOCOL(A3:A;1));
LAMBDA(a;c;LET(s;SUM(a);{a;IF(OR(c=0;s>=t);;IF(s+c>t;t-s;c))})))))))