Подсчитать отличительное значение
Я должен сделать сводную таблицу отчета, которая будет отображать те же данные. Попытался использовать xdoxslt:different_values для группировки одного и того же значения, но оно не работает и не отображает никаких ошибок.
Что у меня сейчас есть:
001 - 1
002 - 1
001 - 1
Чего мне нужно добиться:
001 - 2
002 - 1
Чтобы исключить различные значения для 001, я использовал код, как показано ниже
<?CwaProductCode[not(.=preceding::CwaProductCode)]?>
Пытался использовать код, как показано ниже, для подсчета различных значений, но это не работает
<?count(xdoxslt:distinct_values(CwaProductCode))?>
Какие-либо предложения?
2 ответа
Different_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
Спасибо, Ранджит! Код работает.
Я отредактировал код и добавил условие 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 отображает правильный результат в соответствии с вашими предложениями. Но счетчик каким-то образом отображает результат, как будто не было добавлено фильтрации.