我需要一个变量表达式来调用附加了参数的子数据集。
我有一个数据集,它返回了所购买的杂货清单。类似的东西:
Milk, NJ, $1.23
Chicken, DE, $5.45
Milk, NY, $1.44
我可以使用购买价格的总和变量获得价格总和。但是,我需要考虑州税的总额。在上面的例子中,假设新泽西州的销售税乘数为1.06,纽约州的销售税为1.08。而不是我的牛奶总和是2.76(= 1.44 + 1.23),我需要它是2.859(= 1.23 * 1.06 + 1.44 * 1.08)。
我有一个带有查询的子数据集SALES_TAX
:
SELECT tax_multiplier FROM mydb.sales_tax WHERE state=$P{STATE}
我基本上需要:
Sum($F{PURCHASE_PRICE} * $V{getTax($F{PURCHASE_STATE)})
我怎样才能做到这一点?我的getTax变量需要在主数据集中使用购买状态字段查询SALES_TAX子数据集吗?
答案 0 :(得分:2)
玛丽安娜
您可以在查询中建立税收字段吗?您可以创建一个案例陈述来评估购买的状态。您的查询可能会吐出税前价格,税收价值和税后价格。 case语句看起来像(我正在使用Oracle,你可能需要调整你的数据库):
CASE
WHEN PURCHASE_STATE = 'NY' THEN 1.08
WHEN PURCHASE_STATE = 'NJ' THEN 1.06
WHEN PURCHASE_STATE = 'DE' THEN 1.00
ELSE 1.05 /** default value **/
END AS TAX_RATE
如果您想在iReport中执行此操作,我建议您创建一个变量来应用税率。变量表达式类似于:
$F{PURCHASE_STATE} == "NY" ? "1.08" :
$F{PURCHASE_STATE} == "NJ" ? "1.06" :
$F{PURCHASE_STATE} == "DE" ? "1.00" : "1.05"
然后,您的iReport详细信息区域应输出一个带有文本字段表达式的文本字段 $ F {PURCHASE_PRICE},一个带有文本字段表达式$ V {TAX_RATE}的文本字段,以及一个带有文本字段表达式$ F {PURCHASE_PRICE} * $ V {TAX_RATE}的文本字段。
如果要在SQL查询中使用子查询来查找销售税,可以:
SELECT P.PURCHASE_ITEM AS ITEM,
P.PURCHASE_PRICE AS PRICE,
P.PURCHASE_STATE AS STATE,
(SELECT T.TAX_RATE
FROM TAX_TABLE T
WHERE T.STATE = P.PURCHASE_STATE
) AS TAX_RATE,
PURCHASE_OTHER_INFO AS OTHER
FROM PURCHASE_TABLE P