如何筛选到数据视图中的联接项列?

Posted

技术标签:

【中文标题】如何筛选到数据视图中的联接项列?【英文标题】:How can I filter to a Joined Item column in a Data View? 【发布时间】:2017-03-23 18:58:48 【问题描述】:

当我使用过滤器对话框生成过滤器时,SPD 会生成以下行过滤器...

<xsl:variable name="Rows" select="/dsQueryResponse/Benefits/Rows/Row[normalize-space(@Benefit_x0020_Type) = $pBenefit and normalize-space(@Level) = $pLevel]"/>

@Benefit_x0020_Type 的过滤器工作正常(这只是一个常规的、非链接的项目),但 @Level 的过滤器不起作用。 @Level 是一个 Joined Item,声明​​如下...

<xsl:value-of disable-output-escaping="yes" select="../../../Projects/Rows/Row[@ID=current()/@Project_x003a_ID]/@Level" />

我怎样才能使过滤器对加入的项目起作用?

【问题讨论】:

【参考方案1】:

我找到的解决方案是编辑 $Rows 节点集以在 SharePoint 呈现之前包含连接字段...

<xsl:variable name="Rows" select="/dsQueryResponse/Benefits/Rows/Row"/>

<xsl:variable name="myRowsFractured">
  <xsl:for-each select="$Rows">
    <xsl:variable name="projectID" select="@Project_x003a_ID"/>
    <xsl:variable name="level" select="/dsQueryResponse/Projects/Rows/Row[@ID=$projectID]/@Level"/>
    <xsl:if test="$level = $pLevel">
      <xsl:copy>
        <xsl:copy-of select="@*|node()"/>
        <xsl:attribute name="Level">
          <xsl:value-of select="$level"/>
        </xsl:attribute>
        <xsl:attribute name="Title">
          <xsl:value-of select="/dsQueryResponse/Projects/Rows/Row[@ID=$projectID]/@Title"/>
        </xsl:attribute>
      </xsl:copy>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

<xsl:variable name="myRows" select="msxsl:node-set($myRowsFractured)/*"/>

($pLevel 是从查询字符串中获取的)

然后我将 $Rows 的任何后续引用替换为 $myRows。这种技术的优点是任何计算(例如 dvt_RowCount)都是有效的。

【讨论】:

以上是关于如何筛选到数据视图中的联接项列?的主要内容,如果未能解决你的问题,请参考以下文章

什么是左外连接 SQLserver

Oracle View 与 Oracle 中的联接表

外部联接中的内部联接导致性能不足,有啥不同的方法?

SQL的四种连接-左外连接右外连接内连接全连接

查询中的七个内部联接是不是太多?

认识Tableau中的筛选器