Announcement

Collapse
No announcement yet.

Sum und Sort

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sum und Sort

    Hallo,

    Ich habe folgendes Problem:

    Ich gruppiere nach Leuten und fasse innerhalb der Gruppe Werte zusammen (sum).

    Nun würde Ich gern nach den zusammengefassten Werten sortieren!


    Ich bin für jede Hilfe dankbar...
    Zuletzt editiert von Danyo; 02.07.2010, 09:55.

  • #2
    Was benutzt du denn, XSLT oder XQuery?
    Mit beiden kannst du doch einfach das Result des Gruppierens und Summierens in einer Variablen speichern und dann in einem zweiten Verarbeitungsschritt sortieren.
    So du XSLT 2.0 und for-each-group benutzt, sollte es auch in einem Schritt möglich sein, zu gruppieren und zu sortieren:
    Code:
    <xsl:for-each-group select="foo" group-by="bar">
      <xsl:sort select="sum(current-group()/baz)"/>
      ...
    </xsl:for-each-group>

    Comment


    • #3
      hallo,

      Ich benutze Sharepoint. Also XSLT.

      Ich kann ohne Probleme User gruppieren und dann die Summe des Umsatzes der Gruppe anzeigen lassen.

      Also group by User und Umsatz Total (sum).

      Dann werden jedoch leider bei einer Sortierung nur nur die Usergruppen alphabetisch geordnet...

      Wie löse Ich das?

      Comment


      • #4
        Poste mal brauchbare Beispieldaten und den XSLT-Code, den du jetzt zum Gruppieren und Summieren hast, dann kann man sicher zeigen, wie man den XSLT-Code verändern muss, um zusätzlich zu sortieren.
        Grundsätzlich sortiert man durch xsl:sort in einem xsl: apply-templates oder xs: for-each.

        Comment


        • #5
          Wie XSLT sieht das für mich nicht aus, aber wenn alles in einer Zeile steht, lässt sich das ohnehin nicht lesen.

          Comment


          • #6
            Hier nochmal ein Versuch...

            :-)

            Sort:

            Code:
            <xsl:sort select="*[name() = $dvt_sortfield] | @*[name() = $dvt_sortfield] | text()[name(ancestor::*[1]) = $dvt_sortfield]" order="{$dvt_sortdir}" data-type="{$dvt_sorttype}" />
            Group?

            Code:
            <xsl:call-template name="dvt_1.groupheader0">
            						
            <xsl:with-param name="fieldtitle">Benutzer</xsl:with-param>
            						
            <xsl:with-param name="fieldname">Benutzer</xsl:with-param>
            						
            <xsl:with-param name="fieldvalue" select="$groupheader0" />
            						
            <xsl:with-param name="fieldtype" select="'text'" />
            						
            <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[((@Benutzer)=$groupheader0 or ((not(@Benutzer) or @Benutzer='') and $groupheader0=' '))]" />
            										
            <xsl:with-param name="groupid" select="'0'" />
            					
            <xsl:with-param name="displaystyle" select="'auto'" />
            					
            <xsl:with-param name="imagesrc" select="'/_layouts/images/plus.gif'" />
            												
            <xsl:with-param name="alttext" select="'Erweitern'" />
            												
            <xsl:with-param name="altname" select="'reduzieren'" />
            												
            <xsl:with-param name="hidedetail" select="false()" />
            											
            <xsl:with-param name="showheader" select="true()" />
            												
            <xsl:with-param name="showheadercolumn" select="false()" />
            													
            </xsl:call-template>
            Hoffe das passt besser!

            Comment


            • #7
              Ich habe folgenden Code gefunden:

              Code:
              <xsl:template name="dvt_1.body">
                <xsl:param name="Rows"/>
                <xsl:for-each select="$Rows[not(@Title = preceding-sibling::*/@Title)]">
                 <xsl:sort select="sum($Rows[current()/@Title=@Title]/@Amount)" data-type="number" order="descending" />
                 <xsl:call-template name="dvt_1.rowview">
                  <xsl:with-param name="Rows" select="$Rows"/>
                 </xsl:call-template>
                </xsl:for-each>
               </xsl:template>
               
               <xsl:template name="dvt_1.rowview">
                <xsl:param name="Rows"/>
                 
              <tr>
                  
              <td class="ms-vb">
                   <xsl:value-of select="@Title"/>
                  </td>
                  
              <td class="ms-vb">
                   <xsl:value-of select="sum($Rows[current()/@Title=@Title]/@Amount)"/>
                  </td>
                 </tr>
               </xsl:template>
              Ich weiß nun jedoch leider nicht wo ich diesen einzufügen habe...

              also an welcher Stelle des Gesamtcodes!
              Zuletzt editiert von Danyo; 05.07.2010, 13:15.

              Comment


              • #8
                Hi,


                also der Code müsste funktionieren. Ich bin nur nicht sicher wo er eingefügt gehört. Ein wenig Hilfe wäre sehr nett!


                Dankeschön

                Comment

                Working...
                X