Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 双发行者条件排序问题_Xslt_Obiee_Bi Publisher - Fatal编程技术网

Xslt 双发行者条件排序问题

Xslt 双发行者条件排序问题,xslt,obiee,bi-publisher,Xslt,Obiee,Bi Publisher,我无法让BI Publisher根据我的参数进行排序。数据模型中的参数名为SORTBY,有两个选项名称:出生日期。这些值来自数据模型中与结果集中的字段名匹配的值列表。我希望报告按用户选择的字段排序 下面是我在RTF模板中使用BI Pub标记的代码: <?param@begin:SORTBY?> <?for-each:G_1?> <?if:SORTBY='NAME'?> <?sort:NAME;'ascending';'text'?> <?

我无法让BI Publisher根据我的参数进行排序。数据模型中的参数名为SORTBY,有两个选项名称:出生日期。这些值来自数据模型中与结果集中的字段名匹配的值列表。我希望报告按用户选择的字段排序

下面是我在RTF模板中使用BI Pub标记的代码:

<?param@begin:SORTBY?>
<?for-each:G_1?>
<?if:SORTBY='NAME'?>
  <?sort:NAME;'ascending';'text'?>
<?end if?>
<?if:SORTBY='BIRTH_DATE'?>
  <?sort:BIRTH_DATE;'ascending';'text'?>
<?end if?>
下面是从Microsoft Word导出的相关结果xsl fo:

<xsl:for-each select=".//G_1" xdofo:ctx="3">
  ...
  <xsl:if test=".//SORTBY = 'NAME'" xdofo:ctx="3">
    <xsl:sort select="(.//NAME)[1]" order="ascending" data-type="text"/>
  </xsl:if>
  <xsl:if test=".//SORTBY = 'BIRTH_DATE'" xdofo:ctx="3">
    <xsl:sort select="(.//BIRTH_DATE)[1]" order="ascending" data-type="text"/>
  </xsl:if>
  ...
</xsl:for-each>

通过一些同行编程,我的一位同事找到了答案。for-each不喜欢在其内部有if或choose。因此,您必须将参数分配给一个变量,并在排序中使用该变量

在for循环之外:

<?xdoxslt:set_variable($_XDOCTX,'Order',SORTBY)?>
For循环:

<?for-each:G_1?>
<?sort:./*[name() = xdoxslt:get_variable($_XDOCTX,'Order')];'ascending';'text'?>

说清楚一点,我认为声明应该是,你不能有条件地应用排序。当然,您可以在for each中使用条件if,选择/when格式化。但不能有条件地应用排序。提出的解决方案是一个很好的解决方案,这里也介绍了这一点: