-2

我正在构建一个“仪表板”,在其中我使用 DVWP 和 XSLT 向客户端显示任务总数、打开的数量、关闭的数量等内容,类似于本文

我的问题是我有一个多值查找列,我需要获取值的计数,但我无法用我尝试过的方法生成任何结果。

任何关于如何完成的建议或建议都会很棒。

因此,要添加到上述内容作为更新:

我不确定如何达到预期结果的最佳方法。本质上,我有一个多值查找列,目前有 20 个值。客户端可以在需要时添加新值。所以我试图做的是获取他们为每条记录选择的值的总计类型计数。

例如,假设查找列有五 (5) 个值:

价值 1 价值 2 价值 3 价值 4 价值 5

在 newform.aspx 中,它们能够选择多个值(因此可以选择值 3 和值 5;或者值 2、值 4 和值 5 等)。在列表视图中,它当然会显示应有的选择。我试图做的是获得这些值的总数。

例如,输出看起来像:

Value 1 : 5
Value 2 : 1
Value 3 : 2
Value 4 : 3
Value 5 : 6
Value 3 & 5 : 4

Value 2,4, & 5: 3

我不确定 XSLT 是否可以开发这样的东西,因为我以前不必使用如此复杂的查找列来执行此操作。通常我会做类似下面的事情,但这只能让我了解基础知识,并且由于可以组合这些值,我不确定如何处理:

<xsl:template name="dvt_1.body">
    <xsl:param name="Rows"/>
    <xsl:variable name="total1" select="count(/dsQueryResponse/Rows/Row/@MyLookupCol.[contains(.,'1;#Value1')])"></xsl:variable>
                    <xsl:call-template name="cs3_totalRow">
                        <xsl:with-param name="cs3_RowName1">
                            Value 1
                        </xsl:with-param>
                        <xsl:with-param name="cs3_RowValue1">
                            <xsl:value-of select="$total1"/>
                        </xsl:with-param>
                    </xsl:call-template>
            </xsl:template>

            <xsl:template name="totalsRow">
                <xsl:param name="RowName1"></xsl:param>
                <xsl:param name="RowValue1"></xsl:param>
                    <table>
                        <tr>
                            <td>
                                <xsl:value-of select="$cs3_RowName1"/>:
                            </td>
                            <td>
                                <xsl:value-of select="$cs3_RowValue1"/>
                            </td>
                        </tr>
                    </table>
4

1 回答 1

0

好的; 弄清楚了。您将需要使用使用键的 MUENCHIAN METHOD 来生成“不同的分组依据”列表,然后在表达式中使用 count 并计算键。

使用的参考文献在这里这里

有关详细信息,请参见下面的代码:

<!--GROUPING USING THE MUENCHIAN METHOD-->
<!--Add a key as shown below. This is important! Will not "group by" without it-->
<xsl:key name="YourKeyNameHere" match="Row" use="@YourColumnName"/>

   <xsl:template match="/">
      <!--Get your column values look you normally would-->
      <xsl:variable name="cbs_Rows" select="/dsQueryResponse/Rows/Row/@YourColumnName"/>
      <table border="0" width="100%" cellpadding="2" cellspacing="0">
         <tr valign="top">
            <th class="ms-vh" nowrap="nowrap">TheValueName</th>
            <th class="ms-vh" nowrap="nowrap">ValueTotals</th>
         </tr>
         <!--This gets the distinct strings for you.-->
         <xsl:for-each select="//Row[generate-id() = generate-id(key('YourKeyName', @YourColumnName)[1])]">
            <xsl:sort select="@YourColumnName"/>
            <xsl:for-each select="key('YourKeyName', @YourColumnName)">
                <xsl:call-template name="Rows.RowView" />
            </xsl:for-each>
         </xsl:for-each>
      </table>         
   </xsl:template>
   <!--then build your row view-->
   <xsl:template name="Rows.RowView">
      <xsl:variable name="SortValue" select="ddwrt:NameChanged(string(@YourColumnName), 0)"/>
      <xsl:if test="string-length($SortValue) &gt; 0">
         <tr id="group0{generate-id()}">
            <td>
               <xsl:value-of select="@YourColumnName"/>
            </td>
            <td>
                <xsl:value-of select="count(key('YourKeyName', @YourColumnName))"></xsl:value-of>
            </td>
         </tr>
      </xsl:if>
   </xsl:template>
于 2012-07-02T19:05:52.620 回答