0

请帮我在我的报告中传递一个输入参数,以便我可以使用带有参数的多选查询。

在我的报告中,我正在使用$x{IN,ADMIN1,admins}但得到

错误:参数 admins 的 java.lang.string 类型错误,admins 应该是一个数组或集合。

mysql查询:

Select ADMIN1,WEEK1,WEEK2,WEEK3,(((WEEK3-WEEK2)/WEEK2)*100) as percentage_change, (WEEK3-

WEEK2) as MSU_Difference,SUMWEEK2,SUMWEEK3,SUMWEEK,WEEK4,WEEK5,(((WEEK5-WEEK4)/WEEK4)*100)

 as percentage_change_PRE,admin,ORGNo,OrgAbbr,msus from ((select admin as ADMIN1, sum(msu) 

as WEEK1 from sccp_raw where dt >= date_sub(date($P{start_date}), INTERVAL 14 DAY) and dt 

< date_sub(date($P{end_date}), INTERVAL 13 DAY) group by admin order by WEEK1) as 

q1,(select admin as ADMIN2, sum(msu) as WEEK2 from sccp_raw where dt >= 

date_sub(date($P{start_date}), INTERVAL 7 DAY) and dt < date_sub(date($P{end_date}), 

INTERVAL 6 DAY) group by admin order by WEEK2) as q2,(select admin as ADMIN3, sum(msu) as 

WEEK3 from sccp_raw where dt between $P{start_date} and $P{end_date} group by admin order 

by WEEK3) as q3,(select sum(msu) as SUMWEEK2 from sccp_raw where dt >= 

date_sub(date($P{start_date}), INTERVAL 7 DAY) and dt < date_sub(date($P{end_date}), 

INTERVAL 6 DAY))as q4,(select sum(msu) as SUMWEEK3 from sccp_raw where dt >= 

date_sub(date($P{start_date}), INTERVAL 14 DAY) and dt < date_sub(date($P{end_date}), 

INTERVAL 13 DAY))as q5,(select sum(msu) as SUMWEEK from sccp_raw where dt BETWEEN 

$P{start_date} and $P{end_date})as q6,(select sum(msu) as WEEK4 from sccp_raw where dt >= 

date_sub(date($P{start_date}), INTERVAL 372 DAY) and dt < date_sub(date($P{end_date}), 

INTERVAL 371 DAY)) as q7,(select sum(msu) as WEEK5 from sccp_raw where dt >= 

date_sub(date($P{start_date}), INTERVAL 365 DAY) and dt < date_sub(date($P{end_date}), 

INTERVAL 364 DAY)) as q8,(select sum(msu) as MSU from sccp_raw where dt between 

$P{start_date} and $P{end_date}) as q9,(select a.dt,a.admin,b.ORGNo, b.OrgAbbr, sum(a.msu) 

as msus from sccp_raw a left join (select ORGNo, ADMINS, OrgAbbr from orig) b on 

a.admin=b.ADMINS where a.dt between $P{start_date} and $P{end_date} group by a.admin)as 

q10)  where $X{IN,ADMIN1,admins} and ADMIN1=ADMIN3 and ADMIN2=ADMIN3 and admin=ADMIN3 

group by ADMIN1 order by WEEK3 desc; 

参数配置:

parameter "admins":  

class: `java.util.Collection`  

Default Value Expression: "select admin from sccp_raw group by admin"  

还可以帮助我了解是否要创建此下拉列表以选择为“所有管理员”,然后选择管理员列表。

4

2 回答 2

0

对于Collection类型的multiselect参数,您不需要给出“All”来选择iReport中的所有值作为该参数的默认值,默认情况下这意味着所有值都被选中。

但是如果参数是单选,那么对 jasperreport 服务器输入控件的查询将在输入控件值中获取“全部”:-

 SELECT * FROM (
 SELECT 'All Admins' admin from sccp_raw 
 UNION
 SELECT DISTINCT admin from sccp_raw) a
 ORDER BY admin

和 iReport 查询将是:-

  SELECT *
  FROM table
  WHERE ($P{admins}='All Admins' OR Admin=$P{admins}) 

例如,使用 ireport 中的示例 HSQL 数据库查看此报告:-

  <?xml version="1.0" encoding="UTF-8"?>
  <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
  http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1"     
  pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20"  
   topMargin="20" bottomMargin="20" uuid="0d2f9917-101e-4d51-9d78-172909ca097a"> 
<property name="ireport.zoom" value="1.0"/> 
<property name="ireport.x" value="0"/> 
<property name="ireport.y" value="0"/> 
<parameter name="p_SHIPCOUNTRY" class="java.lang.String">
    <defaultValueExpression><![CDATA["Germany"]]></defaultValueExpression>
</parameter>
<queryString>
    <![CDATA[SELECT SHIPCOUNTRY,SHIPCITY

    FROM orders
    WHERE  ($P{p_SHIPCOUNTRY}='All' OR SHIPCOUNTRY=$P{p_SHIPCOUNTRY})]]>
</queryString>
<field name="SHIPCOUNTRY" class="java.lang.String"/>
<field name="SHIPCITY" class="java.lang.String"/>
<background>
    <band splitType="Stretch"/>
</background>
<detail>
    <band height="29">
        <textField>
            <reportElement uuid="f6cbe144-e64a-4537-b3b8-e6a461dd5a72"
                   x="114" y="0" width="100" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{SHIPCOUNTRY}]]>
                </textFieldExpression>
        </textField>
        <textField>

            <reportElement uuid="c13e2483-d005-4f56-8ce8-d64f923f0359"
                 x="417" y="3" width="100" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{SHIPCITY}]]>             
        </textFieldExpression>
        </textField>
    </band>
        </detail>

            </jasperReport>

更详细的可以访问我的博客

于 2014-05-22T15:40:19.420 回答
0

您必须在 jrxm 文件中使用 java.util.Collection。

Here, send your multi ids from your selection to your .jasper file.
      String qGelirGrubu = "1,2,3,4,5";
      String[] convertedGelirArray = qGelirGrubu.split(",");
      List<Integer> convertedGelirList = new ArrayList<Integer>();
      for (String number : convertedGelirArray) {
           convertedGelirList.add(Integer.parseInt(number.trim()));
      }
     parameters.put("qGelirGrubu1", convertedGelirList);

在您的 .jrxml 文件中;像这样定义你的参数;

<parameter name="qGelirGrubu1" class="java.util.Collection"/>

和你的 SQL 查询,你可以像这样使用你的参数;

select * from TABLE_NAME A where A.ID IN (1,2,3,4,5); 像 .jrxml 文件中的那样:

 select * from TABLE_NAME A where  $X{IN,A.ID,qGelirGrubu1} 

$X{IN,COLUMN_NAME,YOUR_PARAMETER_NAME}

于 2019-06-22T11:12:32.320 回答