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

Jasper reports 如何在jasper报告中将列名作为参数传递,jasper-reports,Jasper Reports,每当执行查询时,我需要能够将列名作为jasper报表中字段引用的参数传递 这是必需的,这样.jrxml报表就不会与查询中列出的列名绑定,从而有效地允许对jrxml报表运行任何sql查询 我想对图表中的值或类别表达式执行类似$F{$p!{Parameter1}}的操作,其中: <parameter name="Parameter1" class="java.lang.String" isForPrompting="false"> <defaultValueExpressi

每当执行查询时,我需要能够将列名作为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%有人试图做同样的事情,有什么建议吗?

您可以试试这个,直接使用默认值的参数,在您的案例中是列名

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

我会尝试像动态sql一样操作查询,使用您在categoryDataset中使用的参数

我们使用了很多次来准备查询,以检索指定的列,主要是使用jasperreports进行分组,我相信这也适用于您

您的查询将如下所示:

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

from
   yourTable

这也包含在。

中,您不能将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; 

从一开始就尝试过:$P不能解析为变量。这里的技巧是期望值是对$F字段对象的引用,而不是对参数的引用。我尝试在表达式中使用变量作为$V,内部变量引用$P,但它再次没有解析$P,而是用$P{Parameter1}替换$V直接…这会将查询列按某种顺序耦合。正如您所暗示的,字段将以$P!{Parameter1}表示为SERIES_表达式,并表示为$P!{Parameter2}作为VALUE_表达式,因此针对报表触发的查询必须知道列的提供顺序。换句话说,查询应该知道它必须使用AS指令将自身耦合到哪个通用字段名。我们已经在解析jrxml,因为报表单元很笨,并且不显示其jrxml资源的参数……更多解决方法nds听起来令人担忧。使用纯SQL可以,但使用JasperReports,您在两者之间有一个抽象层。所以对于这个问题,这似乎不是一个正确的答案。