do rounding
This commit is contained in:
		
							parent
							
								
									d5c2980bb1
								
							
						
					
					
						commit
						95675428a4
					
				| @ -99,9 +99,9 @@ SELECT | |||||||
|         --create the column reference |         --create the column reference | ||||||
|         CASE appcol  |         CASE appcol  | ||||||
|             ----calculation should yield the value necessary to get to the target increment value------------ |             ----calculation should yield the value necessary to get to the target increment value------------ | ||||||
|             WHEN 'units'    THEN 'o.'||format('%I',cname)||' * vscale.factor AS '||format('%I',cname)  |             WHEN 'units'    THEN 'round(o.'||format('%I',cname)||' * vscale.factor,5) AS '||format('%I',cname)  | ||||||
|             WHEN 'value'    THEN 'o.'||format('%I',cname)||' * vscale.factor AS '||format('%I',cname)  |             WHEN 'value'    THEN 'round(o.'||format('%I',cname)||' * vscale.factor,2) AS '||format('%I',cname)  | ||||||
|             WHEN 'cost'     THEN 'o.'||format('%I',cname)||' * vscale.factor AS '||format('%I',cname)  |             WHEN 'cost'     THEN 'round(o.'||format('%I',cname)||' * vscale.factor,2) AS '||format('%I',cname)  | ||||||
|             WHEN 'version'  THEN '''app_forecast_name'' AS '||format('%I',_version_col) |             WHEN 'version'  THEN '''app_forecast_name'' AS '||format('%I',_version_col) | ||||||
|             WHEN 'iter'     THEN '''scale volume'' AS '||format('%I',_iter_col) |             WHEN 'iter'     THEN '''scale volume'' AS '||format('%I',_iter_col) | ||||||
|             WHEN 'logid'    THEN '(SELECT id FROM ilog) AS '||format('%I',_logid_col) |             WHEN 'logid'    THEN '(SELECT id FROM ilog) AS '||format('%I',_logid_col) | ||||||
| @ -126,9 +126,9 @@ SELECT | |||||||
|         CASE appcol  |         CASE appcol  | ||||||
|             WHEN 'units'    THEN '0::numeric AS '||format('%I',cname)  |             WHEN 'units'    THEN '0::numeric AS '||format('%I',cname)  | ||||||
|             WHEN 'cost'     THEN '0::numeric AS '||format('%I',cname)  |             WHEN 'cost'     THEN '0::numeric AS '||format('%I',cname)  | ||||||
|             WHEN 'value'    THEN $$(CASE WHEN pscale.factor = 0 THEN o.$$||_units_col||$$ * pscale.mod_price ELSE o.$$||format('%I',cname)||' * pscale.factor END)::numeric AS '||format('%I',cname)  |             WHEN 'value'    THEN $$round((CASE WHEN pscale.factor = 0 THEN o.$$||_units_col||$$ * pscale.mod_price ELSE o.$$||format('%I',cname)||' * pscale.factor END)::numeric,2) AS '||format('%I',cname)  | ||||||
|             WHEN 'version'  THEN '''app_forecast_name'' AS '||format('%I',_version_col) |             WHEN 'version'  THEN '''app_forecast_name'' AS '||format('%I',_version_col) | ||||||
|             WHEN 'iter'     THEN '''scale volume'' AS '||format('%I',_iter_col) |             WHEN 'iter'     THEN '''scale price'' AS '||format('%I',_iter_col) | ||||||
|             WHEN 'logid'    THEN '(SELECT id FROM ilog) AS '||format('%I',_logid_col) |             WHEN 'logid'    THEN '(SELECT id FROM ilog) AS '||format('%I',_logid_col) | ||||||
|             ELSE 'o.'||format('%I',cname) |             ELSE 'o.'||format('%I',cname) | ||||||
|         END |         END | ||||||
| @ -205,7 +205,7 @@ WHERE | |||||||
| ,volume AS ( | ,volume AS ( | ||||||
|     SELECT * FROM volume_only |     SELECT * FROM volume_only | ||||||
|     UNION ALL |     UNION ALL | ||||||
|     SELECT * FROM baseline WHERE (SELECT COUNT(*) FROM volume_only) = 0 |     SELECT * FROM basemix WHERE (SELECT factor FROM vscale) = 0 | ||||||
| ) | ) | ||||||
| ,pscale AS ( | ,pscale AS ( | ||||||
| SELECT | SELECT | ||||||
| @ -215,10 +215,13 @@ SELECT | |||||||
|         --if the base value is -0- scaling will not work, need to generate price, factor goes to -0- |         --if the base value is -0- scaling will not work, need to generate price, factor goes to -0- | ||||||
|         0 |         0 | ||||||
|     ELSE |     ELSE | ||||||
|         --expects inbound partial adjustment from volume table |         CASE WHEN (SELECT factor FROM vscale) = 0 | ||||||
|         --if the volume table does not have enough price added, need to get to goal increment |             --if the incoming volume dataset has just basemix data, then create an absolute factor and multiply by basemix | ||||||
|  |             THEN (SELECT pincr FROM target)/(SELECT sum($$||format('%I',_value_col)||$$) FROM volume) | ||||||
|  |             --if the incoming volume table already has an adjusment, just need to create a true-up factor | ||||||
|             --multiplying by the raw factor without adding 1 will work since this data set will be added to the volume data set |             --multiplying by the raw factor without adding 1 will work since this data set will be added to the volume data set | ||||||
|         ((SELECT pincr FROM target)-(SELECT sum($$||format('%I',_value_col)||$$) FROM volume))/(SELECT sum($$||format('%I',_value_col)||$$) FROM volume) |             ELSE ((SELECT pincr FROM target)-(SELECT sum($$||format('%I',_value_col)||$$) FROM volume))/(SELECT sum($$||format('%I',_value_col)||$$) FROM volume) | ||||||
|  |         END | ||||||
|     END factor |     END factor | ||||||
|     ,CASE WHEN (SELECT sum($$||format('%I',_value_col)||$$) FROM volume) = 0 THEN |     ,CASE WHEN (SELECT sum($$||format('%I',_value_col)||$$) FROM volume) = 0 THEN | ||||||
|         CASE WHEN ((SELECT pincr::numeric FROM target) - (SELECT sum($$||format('%I',_value_col)||$$) FROM volume)) <> 0 THEN |         CASE WHEN ((SELECT pincr::numeric FROM target) - (SELECT sum($$||format('%I',_value_col)||$$) FROM volume)) <> 0 THEN | ||||||
|  | |||||||
| @ -71,14 +71,14 @@ SELECT | |||||||
|     ,o."Trans. Date" |     ,o."Trans. Date" | ||||||
|     ,o."Post Date" |     ,o."Post Date" | ||||||
|     ,o."Description" |     ,o."Description" | ||||||
|     ,o."Amount" * vscale.factor AS "Amount" |     ,round(o."Amount" * vscale.factor,2) AS "Amount" | ||||||
|     ,o."Category" |     ,o."Category" | ||||||
|     ,o."Party" |     ,o."Party" | ||||||
|     ,o."Reason" |     ,o."Reason" | ||||||
|     ,'app_forecast_name' AS app_version |     ,'app_forecast_name' AS app_version | ||||||
|     ,'scale volume' AS app_iter |     ,'scale volume' AS app_iter | ||||||
|     ,(SELECT id FROM ilog) AS app_logid |     ,(SELECT id FROM ilog) AS app_logid | ||||||
|     ,o.app_units * vscale.factor AS app_units |     ,round(o.app_units * vscale.factor,5) AS app_units | ||||||
| FROM | FROM | ||||||
|     basemix o |     basemix o | ||||||
|     CROSS JOIN vscale |     CROSS JOIN vscale | ||||||
| @ -88,14 +88,34 @@ WHERE | |||||||
| ,volume AS ( | ,volume AS ( | ||||||
|     SELECT * FROM volume_only |     SELECT * FROM volume_only | ||||||
|     UNION ALL |     UNION ALL | ||||||
|     SELECT * FROM baseline WHERE (SELECT COUNT(*) FROM volume_only) = 0 |     SELECT * FROM basemix WHERE (SELECT factor FROM vscale) = 0 | ||||||
| ) | ) | ||||||
| ,pscale AS ( | ,pscale AS ( | ||||||
|     ----what if the selection has several value columns, which one to use?----- |  | ||||||
| SELECT | SELECT | ||||||
|     (SELECT pincr FROM target) AS target_increment |     (SELECT pincr FROM target) AS target_increment | ||||||
|     ,sum("Amount") AS value |     ,sum("Amount") AS value | ||||||
|         ,CASE WHEN (SELECT sum("Amount") FROM volume) = 0 THEN 0 ELSE (SELECT pincr FROM target)/sum("Amount") FROM volume END factor |     ,CASE WHEN (SELECT sum("Amount") FROM volume) = 0 THEN | ||||||
|  |         --if the base value is -0- scaling will not work, need to generate price, factor goes to -0- | ||||||
|  |         0 | ||||||
|  |     ELSE | ||||||
|  |         CASE WHEN (SELECT factor FROM vscale) = 0 | ||||||
|  |             --if the incoming volume dataset has just basemix data, then create an absolute factor and multiply by basemix | ||||||
|  |             THEN (SELECT pincr FROM target)/(SELECT sum("Amount") FROM volume) | ||||||
|  |             --if the incoming volume table already has an adjusment, just need to create a true-up factor | ||||||
|  |             --multiplying by the raw factor without adding 1 will work since this data set will be added to the volume data set | ||||||
|  |             ELSE ((SELECT pincr FROM target)-(SELECT sum("Amount") FROM volume))/(SELECT sum("Amount") FROM volume) | ||||||
|  |         END | ||||||
|  |     END factor | ||||||
|  |     ,CASE WHEN (SELECT sum("Amount") FROM volume) = 0 THEN | ||||||
|  |         CASE WHEN ((SELECT pincr::numeric FROM target) - (SELECT sum("Amount") FROM volume)) <> 0 THEN | ||||||
|  |             --if the base value is -0- but the target value hasn't been achieved, derive a price to apply | ||||||
|  |             ((SELECT pincr::numeric FROM target) - (SELECT sum("Amount") FROM volume))/(SELECT sum(app_units) FROM volume) | ||||||
|  |         ELSE | ||||||
|  |             0 | ||||||
|  |         END | ||||||
|  |     ELSE | ||||||
|  |         0 | ||||||
|  |     END mod_price | ||||||
| FROM | FROM | ||||||
|     volume |     volume | ||||||
| ) | ) | ||||||
| @ -106,12 +126,12 @@ SELECT | |||||||
|     ,o."Trans. Date" |     ,o."Trans. Date" | ||||||
|     ,o."Post Date" |     ,o."Post Date" | ||||||
|     ,o."Description" |     ,o."Description" | ||||||
|     ,(CASE WHEN pscale.factor = 0 THEN o.app_units * pscale.mod_price ELSE o."Amount" * pscale.factor END)::numeric AS "Amount" |     ,round((CASE WHEN pscale.factor = 0 THEN o.app_units * pscale.mod_price ELSE o."Amount" * pscale.factor END)::numeric,2) AS "Amount" | ||||||
|     ,o."Category" |     ,o."Category" | ||||||
|     ,o."Party" |     ,o."Party" | ||||||
|     ,o."Reason" |     ,o."Reason" | ||||||
|     ,'app_forecast_name' AS app_version |     ,'app_forecast_name' AS app_version | ||||||
|     ,'scale volume' AS app_iter |     ,'scale price' AS app_iter | ||||||
|     ,(SELECT id FROM ilog) AS app_logid |     ,(SELECT id FROM ilog) AS app_logid | ||||||
|     ,0::numeric AS app_units |     ,0::numeric AS app_units | ||||||
| FROM | FROM | ||||||
| @ -125,7 +145,7 @@ INSERT INTO | |||||||
| SELECT  | SELECT  | ||||||
|     *  |     *  | ||||||
| FROM  | FROM  | ||||||
|     volume  |     volume_only | ||||||
| UNION ALL  | UNION ALL  | ||||||
| SELECT  | SELECT  | ||||||
|     *  |     *  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user