Tengo lo que podría considerarse una pregunta impar. Quiero ver si puedo encontrar una fórmula/ecuación que me ayude con lo siguiente.
Estoy trabajando en un paquete de software que estamos utilizando para calcular las tasas. El problema es que hay muchas limitaciones en lo que la aplicación puede hacer, como pocas o ninguna función, límites de caracteres, etc.
Necesito calcular una tarifa prorrateada en función de los metros cuadrados y del mes.
Ejemplos:
250 pies cuadrados en octubre son 50
3200 pies cuadrados en abril son 62,50
Los valores base provienen de una tabla, así:
0-499 500-999 1000-1999 2000-2999 3000-3999
10 50.00 60.00 75.00 100.00 125.00
11 45.83 55.00 68.75 91.67 114.58
12 41.67 50.00 62.50 83.33 104.17
1 37.50 45.00 56.25 75.00 93.75
2 33.33 40.00 50.00 66.67 83.33
3 29.17 35.00 43.75 58.33 72.92
4 25.00 30.00 37.50 50.00 62.50
5 20.83 25.00 31.25 41.67 52.08
6 16.67 20.00 25.00 33.33 41.67
7 12.50 15.00 18.75 25.00 31.25
8 8.33 10.00 12.50 16.67 20.83
9 4.17 5.00 6.25 8.33 10.42
Tengo una bonita sentencia If anidada que funciona bien, sin embargo, utilizar la tabla completa (los valores llegan hasta los 60.000+ pies cuadrados) supera ampliamente el límite de 3k caracteres...
Aquí hay un recorte de esa declaración If:
If($[60RETAIL]MONTH$ = 1,
If(AND($[60RETAIL]SQFT$ > 0, $[60RETAIL]SQFT$ <= 499), 41.67 - 50,
(If(AND($[60RETAIL]SQFT$ > 499, $[60RETAIL]SQFT$ <= 999), 50 - 60,
(If(AND($[60RETAIL]SQFT$ > 999, $[60RETAIL]SQFT$ <= 1999), 62.5 - 75,
(If(AND($[60RETAIL]SQFT$ > 1999, $[60RETAIL]SQFT$ <= 2999), 83.33 - 100,
(If(AND($[60RETAIL]SQFT$ > 2999, $[60RETAIL]SQFT$ <= 3999), 104.17 - 125,
(If(AND($[60RETAIL]SQFT$ > 3999, $[60RETAIL]SQFT$ <= 4999), 125 - 150,
(If(AND($[60RETAIL]SQFT$ > 4999, $[60RETAIL]SQFT$ <= 5999), 166.67 - 200,
(If(AND($[60RETAIL]SQFT$ > 5999, $[60RETAIL]SQFT$ <= 6999), 208.33 - 250,
(If(AND($[60RETAIL]SQFT$ > 6999, $[60RETAIL]SQFT$ <= 7999), 250 - 300,
(If(AND($[60RETAIL]SQFT$ > 7999, $[60RETAIL]SQFT$ <= 8999), 291.67 - 350,
(If(AND($[60RETAIL]SQFT$ > 8999, $[60RETAIL]SQFT$ <= 9999), 333.33 - 400,
(If(AND($[60RETAIL]SQFT$ > 9999, $[60RETAIL]SQFT$ <= 10999), 416.67 - 500,
(If(AND($[60RETAIL]SQFT$ > 10999, $[60RETAIL]SQFT$ <= 19999), 500 - 600,
(If(AND($[60RETAIL]SQFT$ > 19999, $[60RETAIL]SQFT$ <= 29999), 583.33 - 700,
(If(AND($[60RETAIL]SQFT$ > 29999, $[60RETAIL]SQFT$ <= 39999), 666.67 - 800,
(If(AND($[60RETAIL]SQFT$ > 39999, $[60RETAIL]SQFT$ <= 49999), 750 - 900,
(If(AND($[60RETAIL]SQFT$ > 49999, $[60RETAIL]SQFT$ <= 59999), 833.33 - 1000,
(If($[60RETAIL]SQFT$ > 59999, 917.67 - 1100,
1))))))))))))))))))))))))))))))))))),
Multiplica eso por 12 y puedes ver lo grande que se pone.. Estoy esperando una ecuación que pueda usar que reduzca mis matemáticas a una solución más pequeña..
¿Es posible?
Gracias.
EDITAR: He metido esto en la sección de Matemáticas ya que buscaba una solución matemática ya que el programa que estoy utilizando tiene muy poca capacidad de programación. Parece que está en espera por estar en la sección equivocada? ¡Si a alguien se le ocurre una zona mejor lo pondré allí con mucho gusto! Mi primer post :)
¡Gracias!
EDIT2: Creo que las limitaciones del software ganan esta vez incluso después de acortarlo un poco con algunas de las grandes sugerencias aquí, todavía no será lo suficientemente corto para encajar en las limitaciones de caracteres.
Dicho esto, tengo un plan B que involucra triggers SQL / Procedimientos almacenados que funcionará, sólo estaba tratando de evitar el uso de la parte de atrás. Sin embargo, las ideas que has proporcionado me ayudarán mucho, ya que las fórmulas acortarán mi código en el back-end.
¡Gracias a todos!