计算不同的价值

时间:2016-06-14 04:22:40

标签: xml rtf bi-publisher

我必须做一个显示相同数据的报告摘要表。尝试使用xdoxslt:distinct_values对相同的值进行分组,但它不起作用,也不显示任何错误。

我现在拥有的:

001 - 1

002 - 1

001 - 1

我需要实现的目标:

001 - 2

002 - 1

要消除001的不同值,我使用下面的代码

[{
    "id": 0,
    "name": "Company1",
    "logoUrl": "/lib/assets/company1-logo.png",
    "location":{
      "country": "USA",
      "state": "California",
      "city": "Napa"
    },
    "active": false
  },
  {
    "id": 1,
    "name": "Company2",
    "logoUrl": "/lib/assets/company2-logo.png",
    "location":{
      "country": "Germany",
      "state": "",
      "city": "Berlin"
    },
    "active": false
  },
  {
    "id": 2,
    "name": "Company3",
    "logoUrl": "/lib/assets/company3-logo.png",
    "location":{
      "country": "USA",
      "state": "Michigan",
      "city": "Detroit"
    },
    "active": false
  }]

尝试使用下面的代码计算不同的值,但它不起作用

<?CwaProductCode[not(.=preceding::CwaProductCode)]?>

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

distinct_values将仅返回空格分隔的不同值列表。根据您的要求,您需要遍历每个不同的值并计算其实例。

我使用了这个xml:

<ROWSET>
    <ROW>
        <CwaProductCode>001</CwaProductCode>
    </ROW>
    <ROW>
        <CwaProductCode>002</CwaProductCode>
    </ROW>
    <ROW>
        <CwaProductCode>001</CwaProductCode>
    </ROW>
    <ROW>
        <CwaProductCode>003</CwaProductCode>
    </ROW>
</ROWSET>

这个BIP代码:

<?for-each-group:ROW;./CwaProductCode?>
<?CwaProductCode?><?'-'?><?count(current-group()/.)?>
<?end for-each-group?>

得到了这个输出:

001-2
002-1
003-1

答案 1 :(得分:0)

谢谢Ranjith!代码有效。

我编辑了代码并添加了if条件,如下所示(sumSub已在报告的顶部声明)

<?for-each-group:ROW;./CwaProductCode?>
<?if:CwaOrderType='UT Sales' and CwaChannel='Customer Portal'?>
<?CwaProductCode[not(.=preceding::CwaProductCode)]?>
<?count(current-group()/.)?>
<?xdoxslt:set_variable($_XDOCTX, 'sumSub', xdoxslt:get_variable($_XDOCTX,'sumSub')+count(current-group()/.))?>

CwaProductCode根据您的建议显示正确的结果。但计数会以某种方式显示结果,就好像没有添加过滤一样。