|
next
|
 Subject: Need Help --- A Special Sum Question Author: (Deleted User) Date: 08 May 2006 11:28 AM
|
Hongwei,
Try this...
<xsl:key name="EDI" match="Detail" use="concat(Entity, ':', Quantity/HourlyBeginTime, Quantity/HourlyEndTime)"/>
<xsl:template match="/EDI/Detail">
<xsl:apply-templates select="key('EDI', concat(Entity,':',Quantity/HourlyBeginTime, Quantity/HourlyEndTime))" mode="Sum"/>
</xsl:template>
<xsl:template match="Detail" mode="Sum">
<xsl:variable name="thekey" select="concat(Entity, ':', Quantity/HourlyBeginTime, Quantity/HourlyEndTime)"/>
<xsl:value-of select="sum(/EDI/Detail/Quantity/HourlyQuantity[concat(../../Entity, ':', ../HourlyBeginTime, ../HourlyEndTime) = $thekey])"/>
<xsl:text>
</xsl:text>
</xsl:template>
Regards
-Srini
|
next
|
 Subject: Need Help --- A Special Sum Question Author: Hongwei Jia Date: 13 May 2006 12:23 PM Originally Posted: 13 May 2006 12:18 PM
|
Srinivas,
Thank you very much for your suggestion! I just got a chance to transform the attached xml:
<EDI>
- <Detail>
<UnitOfMeasure>KW1</UnitOfMeasure>
<DirectionOfFlow>U</DirectionOfFlow>
<Entity>Cargill</Entity>
<EntityQualifier>ZEW</EntityQualifier>
<QuantityQualifier>Z05</QuantityQualifier>
- <Quantity>
<HourlyBeginTime>2006-07-01T04:00:00</HourlyBeginTime>
<HourlyEndTime>2006-07-01T22:00:00</HourlyEndTime>
<HourlyQuantity>-19000000</HourlyQuantity>
</Quantity>
- <Quantity>
<HourlyBeginTime>2006-07-01T22:00:00</HourlyBeginTime>
<HourlyEndTime>2006-07-02T00:00:00</HourlyEndTime>
<HourlyQuantity>-1000000</HourlyQuantity>
</Quantity>
- <Quantity>
<HourlyBeginTime>2007-07-01T04:00:00</HourlyBeginTime>
<HourlyEndTime>2007-07-01T22:00:00</HourlyEndTime>
<HourlyQuantity>15000000</HourlyQuantity>
</Quantity>
</Detail>
- <Detail>
<UnitOfMeasure>KW1</UnitOfMeasure>
<DirectionOfFlow>D</DirectionOfFlow>
<Entity>Cargill</Entity>
<EntityQualifier>ZEW</EntityQualifier>
<QuantityQualifier>Z05</QuantityQualifier>
- <Quantity>
<HourlyBeginTime>2006-07-01T22:00:00</HourlyBeginTime>
<HourlyEndTime>2006-07-02T00:00:00</HourlyEndTime>
<HourlyQuantity>5990000</HourlyQuantity>
</Quantity>
- <Quantity>
<HourlyBeginTime>2006-07-02T00:00:00</HourlyBeginTime>
<HourlyEndTime>2006-07-02T04:00:00</HourlyEndTime>
<HourlyQuantity>0</HourlyQuantity>
</Quantity>
</Detail>
- <Detail>
<UnitOfMeasure>KW1</UnitOfMeasure>
<DirectionOfFlow>D</DirectionOfFlow>
<Entity>Accord</Entity>
<EntityQualifier>ZEW</EntityQualifier>
<QuantityQualifier>Z05</QuantityQualifier>
- <Quantity>
<HourlyBeginTime>2006-07-01T04:00:00</HourlyBeginTime>
<HourlyEndTime>2006-07-02T04:00:00</HourlyEndTime>
<HourlyQuantity>84000000</HourlyQuantity>
</Quantity>
</Detail>
</EDI>
I am using the xslt:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href=".xslt"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:vbs="urn:schemas-sqlxml-org:vbs">
<xsl:key name="EDI" match="Detail" use="concat(Entity, ':', Quantity/HourlyBeginTime, Quantity/HourlyEndTime)"/>
<xsl:template match="/EDI">
<xsl:apply-templates select="Detail[count(.|key('EDI',concat(Entity,':',Quantity/HourlyBeginTime,Quantity/HourlyEndTime))[1])=1]" />
</xsl:template>
<xsl:template match="Detail">
<xsl:variable name="thekey" select="concat(Entity, ':', Quantity/HourlyBeginTime, Quantity/HourlyEndTime)"/>
<xsl:value-of select="sum(/EDI/Detail/Quantity/HourlyQuantity[concat(../../Entity, ':', ../HourlyBeginTime, ../HourlyEndTime) = $thekey])"/>
</xsl:template>
</xsl:stylesheet>
I got the gouped result by "Entity"," HourlyBeginTime" and "HourlyEndTime":
QTY+:Test -19000000
QTY+:Test 4990000
QTY+:Test 84000000
The result is missing QTY: 15000000.
This is a Muenchian Method group. Can anyone help me out on it?
Thanks in Advance!
HJ
|
next
|
 Subject: Need Help --- A Special Sum Question Author: Ivan Pedruzzi Date: 13 May 2006 01:26 PM
|
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="EDI" match="Detail/Quantity" use="concat(../Entity, ':', HourlyBeginTime, HourlyEndTime)"/>
<xsl:template match="/EDI">
<xsl:for-each select="Detail/Quantity">
<xsl:variable name="key" select="concat(../Entity,':',HourlyBeginTime,HourlyEndTime)"/>
<xsl:variable name="group" select="key('EDI', $key)"/>
<xsl:if test="generate-id(.) = generate-id( $group[1] ) ">
<xsl:variable name="quantity" select="sum($group/HourlyQuantity)"/>
<xsl:value-of select="concat(../Entity, ':', string($quantity), ' ')"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Ivan Pedruzzi
Stylus Studio Team
|
next
|
 Subject: Need Help --- A Special Sum Question Author: Ivan Pedruzzi Date: 18 May 2006 12:32 AM
|
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="EDI" match="Detail/Quantity" use="concat(../Entity, ':', HourlyBeginTime, HourlyEndTime)"/>
<xsl:key name="Group-Entity" match="Detail" use="Entity"/>
<xsl:template match="/EDI">
<xsl:for-each select="Detail">
<xsl:variable name="key2" select="Entity"/>
<xsl:variable name="group2" select="key('Group-Entity', $key2)"/>
<xsl:if test="generate-id(.) = generate-id( $group2[1] ) ">
<xsl:value-of select="concat(Entity, ': ')"/>
<xsl:variable name="groupedEntity" select="Entity"/>
<xsl:for-each select="$group2/Quantity">
<xsl:variable name="key" select="concat($groupedEntity,':',HourlyBeginTime,HourlyEndTime)"/>
<xsl:variable name="group" select="key('EDI', $key)"/>
<xsl:if test="generate-id(.) = generate-id( $group[1] ) ">
<xsl:variable name="quantity" select="sum($group/HourlyQuantity)"/>
<xsl:value-of select="concat(' ', $quantity, ' ')"/>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Ivan Pedruzzi
Stylus Studio Team
|
|
|
|