我正在使用BI Publisher Desktop并使用来自Oracle PeopleSoft的数据。
我需要做什么: 找到最小的E.PAY_PERIOD并显示与此付款期相关的E.PAY_BEGIN_DT。
我有一个类似于此的XML文件:
<row rownumber="535">
<C.OTH_HRS>-100.0</C.OTH_HRS>
<C.OTH_EARNS>-1000.00</C.OTH_EARNS>
<C.ERNCD><![CDATA[WCB]]></C.ERNCD>
<D.DESCR><![CDATA[Workers Compensation]]></D.DESCR>
<B.PAY_END_DT>2017-08-29</B.PAY_END_DT>
<E.PAY_BEGIN_DT>2017-08-16</E.PAY_BEGIN_DT>
<E.PAY_END_DT>2017-08-29</E.PAY_END_DT>
<B.EMPLID><![CDATA[99999]]></B.EMPLID>
<B.NAME><![CDATA[LastName,FirstName]]></B.NAME>
<F.UNION_CD><![CDATA[7]]></F.UNION_CD>
<E.PAY_PERIOD><![CDATA[3]]></E.PAY_PERIOD>
</row>
<row rownumber="536">
<C.OTH_HRS>0</C.OTH_HRS>
<C.OTH_EARNS>-10.00</C.OTH_EARNS>
<C.ERNCD><![CDATA[052]]></C.ERNCD>
<D.DESCR><![CDATA[Adjustment to sick pay (15%)]]></D.DESCR>
<B.PAY_END_DT>2017-09-12</B.PAY_END_DT>
<E.PAY_BEGIN_DT>2017-08-30</E.PAY_BEGIN_DT>
<E.PAY_END_DT>2017-09-12</E.PAY_END_DT>
<B.EMPLID><![CDATA[99998]]></B.EMPLID>
<B.NAME><![CDATA[LastName,FirstName]]></B.NAME>
<F.UNION_CD><![CDATA[7]]></F.UNION_CD>
<E.PAY_PERIOD><![CDATA[1]]></E.PAY_PERIOD>
</row>
在我的XML文件中有1333行。编号为1到535的行的E.PAY_PERIOD等于3,编号为536到1333的行的E.PAY_PERIOD等于1.当E.PAY_PERIOD等于3时,对于行1,B.PAY_BEGIN_DT等于2017-08-16到535,当E.PAY_PERIOD等于1时,对于行536到1333,B.PAY_BEGIN_DT等于2017-08-30。
我要做的是找到minimun E.PAY_PERIOD,当找到时显示相关的B.PAY_BEGIN_DT。报告需要此日期,我只需要显示一次。
这就是我一直在使用的:
<?xdoxslt:set_variable($_XDOCTX, ‘minPayPeriod’, xdoxslt:minimum(E.PAY_PERIOD))?>
<?choose:?>
<?when:xdoxslt:get_variable($_XDOCTX, ‘minPayPeriod’)?>
minPayPeriod: <?xdoxslt:get_variable($_XDOCTX, ‘minPayPeriod’)?>
E.PAY_BEGIN_DT: <?E.PAY_BEGIN_DT?>
E.PAY_END_DT: <?E.PAY_END_DT?>
<?end when?>
<?end choose?>
这个输出是:
minPayPeriod: 1 <-- this is correct
E.PAY_BEGIN_DT: 2017-08-16 <-- I need this date to be 2017-08-30 since this is the date when E.PAY_PERIOD is 1.
E.PAY_END_DT: 2017-08-29 <-- I need this date to be 2017-09-12 since this is the date when E.PAY_PERIOD is 1.
另外,如何判断E.PAY_BEGIN_DT和E.PAY_END_DT来自哪个行号。
我希望我已经正确解释了这一点。
感谢您的帮助。
贝
答案 0 :(得分:0)
获得最小值后,您必须在XML中搜索包含该值的节点,并打印其相应的日期。这是一些pseducode,我(尚未测试过)。
<?choose:?>
<?when:xdoxslt:get_variable($_XDOCTX, ‘minPayPeriod’)?>
minPayPeriod: <?xdoxslt:get_variable($_XDOCTX, ‘minPayPeriod’)?>
E.PAY_BEGIN_DT: <?row [E.PAY_PERIOD = xdoxslt:get_variable($_XDOCTX, ‘minPayPeriod’)]/[0]/E.PAY_BEGIN_DT?>
E.PAY_END_DT: <?row [E.PAY_PERIOD = xdoxslt:get_variable($_XDOCTX, ‘minPayPeriod’)]/[0]/E.PAY_END_DT?>
<?end when?>
<?end choose?>
/ [0]部分是搜索第一次出现,而不是打印所有匹配。