【问题标题】:Jasper iReport - how to call a subdataset with parameter using a variable expression?Jasper iReport - 如何使用变量表达式调用带有参数的子数据集?
【发布时间】:2012-07-18 15:07:18
【问题描述】:

我需要一个变量表达式来调用带有附加参数的子数据集。

我有一个数据集,它返回一份杂货购买清单。类似的东西:

Milk, NJ, $1.23

Chicken, DE, $5.45

Milk, NY, $1.44

我可以使用购买价格的总和变量来获得价格总和。但是,我需要一个将州税考虑在内的总数。在上面的示例中,假设 NJ 销售税乘数为 1.06,NY 销售税为 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)})

我怎样才能做到这一点?使用主数据集中的购买状态字段查询 SALES_TAX 子数据集时,我的 getTax 变量需要是什么样的?

【问题讨论】:

    标签: sql dataset jasper-reports ireport


    【解决方案1】:

    玛丽安娜,

    您能否在查询中构建一个税金字段?您可以创建一个案例陈述来评估购买的状态。您的查询可能会显示税前价格、税值和税后价格。 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
    

    【讨论】:

    • 或者,代替 case 语句,在查询中添加一个嵌套的 select 语句来定义 TAX_RATE 字段,例如: (SELECT TAX_TABLE.TAX_RATE FROM TAX_TABLE WHERE TAX_TABLE.STATE = $P{PURCHASE_STATE}) AS TAX_RATE
    • 感谢您的意见。我无法在变量中硬编码州税。我需要能够动态使用数据库中该字段中的任何内容,这些内容将随着州税的变化而更新。我不明白第二个建议。我的主要报告是购买:SELECT * FROM PURCHASES 意思是,我没有购买状态的参数,这将是每次购买的独立字段。有没有办法让我的变量对我的子数据集进行查询?
    • 见上文 - 您可以在 SQL 选择语句中添加子查询以提取该税收变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多