2016-06-16 5 views
0

Так что я должен сделать отчет, который будет отображать и считать отчетливо CwaProductCode на основе CwaChannel и CwaOrderType.count dictentlyly group in xml bi publisher

Heres мой XML:

<OrderEntry-Orders> 
      <CwaChannel>Customer Portal</CwaChannel> 
      <CwaOrderType>UT Sales</CwaOrderType> 
      <ListOfOrderEntry-LineItems> 
        <OrderEntry-LineItems> 
          <CwaLineTotalAmount2>1000</CwaLineTotalAmount2> 
          <CwaProductCode>001</CwaProductCode> 
        </OrderEntry-LineItems> 
        <OrderEntry-LineItems> 
          <CwaLineTotalAmount2>1000</CwaLineTotalAmount2> 
          <CwaProductCode>005</CwaProductCode> 
        </OrderEntry-LineItems> 
      </ListOfOrderEntry-LineItems> 
    </OrderEntry-Orders> 
    <OrderEntry-Orders> 
      <CwaChannel>Customer Portal</CwaChannel> 
      <CwaOrderType>UT Sales</CwaOrderType> 
      <ListOfOrderEntry-LineItems> 
        <OrderEntry-LineItems> 
          <CwaLineTotalAmount2>1000</CwaLineTotalAmount2> 
          <CwaProductCode>005</CwaProductCode> 
        </OrderEntry-LineItems> 
      </ListOfOrderEntry-LineItems> 
    </OrderEntry-Orders> 
    <OrderEntry-Orders> 
      <CwaChannel>Customer Portal</CwaChannel> 
      <CwaOrderType>UT Redemption</CwaOrderType> 
      <ListOfOrderEntry-LineItems> 
        <OrderEntry-LineItems> 
          <CwaLineTotalAmount2>1000</CwaLineTotalAmount2> 
          <CwaProductCode>005</CwaProductCode> 
        </OrderEntry-LineItems> 
      </ListOfOrderEntry-LineItems> 
    </OrderEntry-Orders> 

Heres мой BIP код:

<?for-each-group: OrderEntry-LineItems; CwaProductCode?> 
<?if:../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal'?> 
<?for-each: current-group()?> 
<?CwaProductCode?> 
<?xdoxslt:set_variable($_XDOCTX, 'countFund', xdoxslt:get_variable($_XDOCTX, 'countFund')+1)?> 
<?xdoxslt:set_variable($_XDOCTX, 'TotalCount', xdoxslt:get_variable($_XDOCTX, 'TotalCount')+1)?> 
<?xdoxslt:get_variable($_XDOCTX, 'countFund')?> 
<?xdoxslt:set_variable($_XDOCTX, 'countFund', 0)?> 
<?end if?> 
<?end for-each-group?> 
<?xdoxslt:get_variable($_XDOCTX, 'TotalCount')?> 

Но результат вышел, как если бы не было, если условие. Например, CwaProductCode отобразит правильный результат, но он будет считать все в целом, как если бы фильтрация вообще отсутствовала.

Не знаете, где пошло не так.

ответ

0

Как только вы выполняете групповой доступ, доступ к любому родительскому элементу выше этой группировки возвращает неоднозначные данные. Он всегда может указывать на первый узел OrderEntry-Orders. Вы можете увидеть это, если вы измените порядок элементов в xml.

Если ваше требование к группе только узлы этих «OrderEntry-LineItems», который имеет CwaOrderType = «UT Sales» и .CwaChannel = «Customer Portal», вы можете дать этот фильтр прямо в группировке так:

<?for-each-group: OrderEntry-LineItems[../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal']; CwaProductCode?> 

Попробуйте этот код:

<?for-each-group: OrderEntry-LineItems[../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal']; CwaProductCode?> 
<?for-each: current-group()?> 
<?CwaProductCode?> 
<?xdoxslt:set_variable($_XDOCTX, 'countFund', xdoxslt:get_variable($_XDOCTX, 'countFund')+1)?> 
<?xdoxslt:set_variable($_XDOCTX, 'TotalCount', xdoxslt:get_variable($_XDOCTX, 'TotalCount')+1)?> 
<?xdoxslt:get_variable($_XDOCTX, 'countFund')?> 
<?xdoxslt:set_variable($_XDOCTX, 'countFund', 0)?> 
<?end for-each-group?> 
<?xdoxslt:get_variable($_XDOCTX, 'TotalCount')?> 

дает этот результат:

001 
1 
1 
005 
1 
005 
1 
3 

<?for-each-group: OrderEntry-LineItems[../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal']; CwaProductCode?> 
<?CwaProductCode?> 
<?count(current-group()/.)?> 
<?xdoxslt:set_variable($_XDOCTX, 'TotalCount', xdoxslt:get_variable($_XDOCTX, 'TotalCount')+ count(current-group()/.))?> 
<?end for-each-group?> 

<?xdoxslt:get_variable($_XDOCTX, 'TotalCount')?> 

дает

001 
1 
005 
2 
3 
+0

Спасибо @RanjithR! Попробовал немного модифицировать код для достижения результата 001 - 2 005 - 2 но я нахожусь в тупике. Какие-либо предложения? – Yan

+0

+0

Привет @RanjithR. Допустим, если бы я захотел сгруппировать 2 поля и подсчитать их на основе того же значения, что и эти 2 поля. ><переменная @ InContext: код_продукта; CwaProductCode><переменная @ InContext:????????? SwitchIn; CwaSwitchInFundCode> <число (ток-группа() ./ [ ../ CwaProductCode = $ ProductCode] [../ CwaSwitchInFundCode = $ SwitchIn])?> Это правильный способ написать xpath? – Yan