查找与最短支付期关联的支付开始日期

Find the Pay Begin Date associated with the minimum Pay Period

我正在使用 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 时,B.PAY_BEGIN_DT 等于2017-08-16 第 1 到 535 行,当 E.PAY_PERIOD 等于 1 时,B.PAY_BEGIN_DT 等于 2017-08-30 第 536 到 1333 行。

我想做的是找到最小值 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 来自哪个行号。

我希望我已经正确解释了这一点。

感谢您的帮助。

托尼

获得最小值后,您必须在 XML 中搜索包含该值的节点,并打印其对应的日期。这是一些伪代码,我(还没有测试过)。

<?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] 部分是搜索第一个匹配项,而不是打印所有匹配项。