如何在jasper报告中将列名称作为参数传递

时间:2014-06-16 11:52:12

标签: jasper-reports

我需要能够在执行查询时将列名称作为jasper报告中字段引用的参数传递。

这是必需的,以便.jrxml报告不会与查询中列出的列名相关联(有效地允许在jrxml报告上运行任何sql查询)。

我想对图表中的值或类别表达式执行$ F {$ P!{Parameter1}}之类的操作,其中:

<parameter name="Parameter1" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["country"]]></defaultValueExpression>
</parameter>

但我收到错误:“找不到字段”获得$ P!{Parameter1 --- net.sj.jasperreports.engine.design.JRDesignExpression

类别数据集(图表):

<categoryDataset>
            <categorySeries>
                <seriesExpression><![CDATA[country]]></seriesExpression>
                <categoryExpression><![CDATA[$F{$P!{Parameter1}}]]></categoryExpression>
                <valueExpression><![CDATA[$F{number_of_sites}]]></valueExpression>
            </categorySeries>
        </categoryDataset>

我100%有人试图做同样的事情,有什么建议吗?

3 个答案:

答案 0 :(得分:0)

你可以尝试这个,直接使用参数和默认值,在你的情况下是列名。

<categoryDataset>
     <categorySeries>
         <seriesExpression><![CDATA[$P!{Parameter1}]]></seriesExpression>
         <categoryExpression><![CDATA[$P!{Parameter1}]]></categoryExpression>
         <valueExpression><![CDATA[$F{number_of_sites}]]></valueExpression>
     </categorySeries>
</categoryDataset>

答案 1 :(得分:0)

我会尝试使用你在categoryDataset内的参数来操纵查询(比如动态sql)。

我们多次使用这些来准备我们的查询以检索指定的列以进行分组(主要是使用jasperreports),并且我非常确定这对你也有用。

您的查询将如下所示:

select
    column1,
    column2,
    column3,
    column4,
    $P!{Parameter1} as GROUP_COL

from
   yourTable

jasper docs

也涵盖了这一点

答案 2 :(得分:-1)

您不能将SQL中的变量设置为列名或表名。但是你可以通过以下技巧。 我希望这会对你有所帮助。

    DECLARE @variable1 system; /* type system is datatype for tablenames, columns etc.*/
    DECLARE @variable2 system;
    DECLARE @variable3 system;

    Select @variable1 = tablename, @variable2 = columname, @variable3 = variable
    From tempdb.dbo.powerdeviation
    Where ID = @ID

    /*please note that if the select result is giving you more then one result,
    the first row is used as the variable! There will be not error*/


    DECLARE @sqlCommand nvarchar(max)='
    SELECT something
      FROM [db@variable1].[dbo].['+ @variable2 +']
      where LogInterval = 10 and PlantID = ''@variable3''
    '
    SET @sqlCommand = REPLACE(@sqlCommand,'@variable',@variable);
    SET @sqlCommand = REPLACE(@sqlCommand,'@variable2',@variable2);
    SET @sqlCommand = REPLACE(@sqlCommand,'@variable3',@variable3)

    PRINT @sqlCommand;
    EXEC sys.sp_executesql @sqlCommand;