2017-12-27 23 views
0

Oracle BI Desktopを使用し、Oracle PeopleSoftのデータを使用して作業しています。最低支払期間に関連付けられた支払開始日を検索します。

私が行う必要があるもの: 最低支払額を確認し、この支払い期間に関連付けられたE.PAY_BEGIN_Dを表示します。

私はこれに似たXMLファイルを持っている:1333行がある私の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> 

を。 1から535までの行は、E.PAY_PERIODが3に等しく、536から1333までの行は、E.PAY_PERIODが1に等しい。E.PAY_PERIODが3に等しいとき、B.PAY_BEGIN_DTは行1に対して2017-08-16に等しいE.PAY_PERIODが1に等しいとき、B.PAY_BEGIN_DTは行536〜1333に対して2017-08-30に等しい。

私がしようとしているのは、最低限の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

あなたが最小値を取得したら、その値を含むノードのための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]は、すべての一致を出力するのではなく、最初のオカレンスを検索する部分です。

+0

私はこの問題を解決するために非常によく似た何かを使用しました。残念ながら、PeopleSoftは、サブテンプレートにデータソースを接続させないようにするために、別のソリューションを検討しなければならず、このレポートは時間的制約のために保留になりました。しかし、あなたのフィードバックのために非常に感謝します。私はこのレポートを作成しているうちにかなり勉強しました。ピープルソフトではなく、コンピュータ上で動作します。 – Tony