2011-06-07 236 views
1

我一直在嘗試將xsl應用於Analysis Service數據庫返回的結果集。 結果集看起來如下...排序後跟蹤位置

<Axis name="Axis1"> 
    <Tuples> 
    <Tuple> 
     <Member Hierarchy="[Org].[Class1]"> 
     <UName>[Org].[Class1].&amp;[10629]</UName> 
     <Caption>Independent</Caption> 
     <LName>[Org].[Class1].[Ownership]</LName> 
     <LNum>2</LNum> 
     <DisplayInfo>65898</DisplayInfo> 
     <PARENT_UNIQUE_NAME>[Org].[Class1].&amp;[2]</PARENT_UNIQUE_NAME> 
     </Member> 
    </Tuple> 
    <Tuple> 
     <Member Hierarchy="[Org].[Class1]"> 
     <UName>[Org].[Class1].&amp;[14331]</UName> 
     <Caption>A #5839</Caption> 
     <LName>[Org].[Class1].[Owner Region]</LName> 
     <LNum>3</LNum> 
     <DisplayInfo>65537</DisplayInfo> 
     <PARENT_UNIQUE_NAME>[Org].[Class1].&amp;[10629]</PARENT_UNIQUE_NAME> 
     </Member> 
    </Tuple> 
    .... 
    </Tuples> 
</Axis> 

<CellData> 
    <Cell CellOrdinal="0"> 
    <FmtValue>Ownership</FmtValue> 
    </Cell> 
    <Cell CellOrdinal="1"> 
    <ForeColor>0</ForeColor> 
    <FmtValue>73%</FmtValue> 
    </Cell> 
    <Cell CellOrdinal="2"> 
    <ForeColor>0</ForeColor> 
    <FmtValue>68%</FmtValue> 
    </Cell> 
    <Cell CellOrdinal="3"> 
    <ForeColor>0</ForeColor> 
    <FmtValue>70%</FmtValue> 
    </Cell> 
    <Cell CellOrdinal="4"> 
    <ForeColor>0</ForeColor> 
    <FmtValue>59%</FmtValue> 
    </Cell> 
    <Cell CellOrdinal="5"> 
    <FmtValue>Owner Region</FmtValue> 
    </Cell> 
    <Cell CellOrdinal="6"> 
    <ForeColor>0</ForeColor> 
    <FmtValue>75%</FmtValue> 
    </Cell> 
    ..... 
</CellData> 

上述每個元組具有相應的一組在CellData細胞。 因此,如果文件被順序解析,可以使用Tuple的position()來收集相關的單元格。但是,如果元組使用xsl-sort,LNum屬性進行排序,並且使用for-each進行迭代,則元組的位置現在會更改,因此無法找到Tuple的相應單元格。

我該如何跟蹤基於UName的元組序號,以便我可以到達相關單元格。
我已經創造了UNAME作爲重點

<xsl:key name="tuples-by-uName" match="/xa:root/xa:Axes/xa:Axis/xa:Tuples/xa:Tuple" use="xa:Member/xa:UName" /> 
<xsl:key name="tuples-by-parentUName" match="/xa:root/xa:Axes/xa:Axis/xa:Tuples/xa:Tuple" use="xa:Member/xa:PARENT_UNIQUE_NAME" /> 

而且要遍歷使用像下面這樣的元組。

<xsl:for-each select="key('tuples-by-parentUName', $thisQuestion/xa:Member/xa:UName)"> 
<xsl:sort data-type="number" select="xa:Member/xa:LNum" order="descending"/> 

這裏我需要Tuple的原始位置,所以我可以計算Cell的位置。

花了很多時間,但無法弄清楚這一點。

+0

爲什麼'元組,byparentUName'被 「詢問」 用'UName'? – 2011-06-07 21:13:36

回答

1

xsl:for-each

<xsl:variable name="originalPosition" select="count(preceding::xa:Tuple) + 1"/> 

<xsl:variable name="originalPosition"> 
    <xsl:number count="xa:Tuple" level="any"/> 
</xsl:variable>