如何使用 Office 樞紐分析表元件來擷取已篩選的成員的清單

文章翻譯 文章翻譯
文章編號: 302101 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

本文將告訴您,如何判斷 Office 樞紐分析表元件的座標軸上的哪些成員已經包含在篩選器。

其他相關資訊

Office 樞紐分析表元件包含隱藏的成員 PivotFilterUpdate,具有 StateOf 屬性,您可能會檢查以判斷某一座標軸上的特定樞紐分析成員的已篩選的狀態。樞紐分析成員 [StateOf 屬性傳回下列值之一: plMemberStateClear (1) plMemberStateChecked (2) 或 plMemberStateGray (3)。樞紐分析成員會 「 清除 」 如果從篩選器 」 檢查 「 如果樞紐分析成員及其所有其子成員中包含篩選器或灰色"如果只有其子成員的部份包含在篩選條件中排除。

注意PivotFilterUpdate 物件是隱藏的成員,在 [Office Web 元件物件模型。這個成員未制訂與,因此,不支援由 Microsoft 技術支援部門。提供本文中所包含之範例程式碼 」 為-是"。

範例 # 1: 使用 OLAP 資料來源

這個第一個範例說明您如何可以使用遞迴與某一座標軸上的樞紐分析成員來擷取每個成員和其子成員的狀態,或擷取包含在篩選條件中那些成員的清單。這個範例使用 OLAP 資料來源 (隨附於 8.0 版 Microsoft SQL Server 分析服務在 FoodMart 2000 資料庫)。
  1. 下列程式碼貼在任何文字或 HTML 編輯器中。

    附註下列程式碼使用 樞紐分析表 物件的 Office XP 版本。針對 樞紐分析表 物件的 [Office 2003] 版本成值 clsid:0002E552-0000-0000-C000-000000000046 在程式碼中與 clsid:0002E55A-0000-0000-C000-000000000046。
    <HTML>
    
    <BODY>
    
    <OBJECT ID="PTable" CLASSID="CLSID:0002E552-0000-0000-C000-000000000046" 
    WIDTH="100%" HEIGHT="60%"><PARAM name="AutoFit" value="False"></PARAM>
    </OBJECT>
    
    <P/>
    
    <TABLE WIDTH="100%" HEIGHT="35%">
     <TR>
      <TD WIDTH="35%" VALIGN="Top">
       <SELECT NAME="lstFieldSets" STYLE="width:'100%'">
        <OPTION VALUE="1" SELECTED>Time</OPTION>
        <OPTION VALUE="2">Store</OPTION>
        <OPTION VALUE="3">Product</OPTION>
       </SELECT>
       <P/>
       <BUTTON ID="Button1" STYLE="width:'100%'">List State of All Members
       </BUTTON>
       <P/>
       <BUTTON ID="Button2" STYLE="width:'100%'">List Selected Members Only
       </BUTTON>
      </TD>
      <TD WIDTH="65%">
       <TEXTAREA STYLE="width:'100%';height:'100%'" ID=txtResults>&#xa0;
       </TEXTAREA>
      </TD>
     </TR>
    </TABLE>
    
    <SCRIPT Language="VBScript">
    
    Dim c   'For PivotTable constants.
    Dim oView
    Dim sResults
    Dim aStates
    
    Function Window_OnLoad()
    
       Set c = PTable.Constants
    
       'Connect to the data source.
       PTable.ConnectionString = _
          "provider=msolap;data source=YourServer;inital catalog=Foodmart 2000;"
       PTable.DataMember = "Sales"
    
       Set oView = PTable.ActiveView
       
       'Add Dimensions to the column, row, and filter axes.
       oView.ColumnAxis.InsertFieldSet oView.FieldSets("Time")
       oView.ColumnAxis.DisplayEmptyMembers = True
       oView.RowAxis.InsertFieldSet oView.FieldSets("Store")
       oView.RowAxis.DisplayEmptyMembers = True
       oView.FilterAxis.InsertFieldSet oView.FieldSets("Product")
    
       'Add a total to the data area.
       oView.DataAxis.InsertTotal oView.Totals("Store Sales")
       oView.Totals("Store Sales").NumberFormat = "_($* #,##0_)"
       
        aStates = Array("Cleared", "Checked", "Gray")
    
    End Function
    
    Function Button1_OnClick()
        Dim oChildren
        Dim sFS
        sFS = lstFieldsets.options(lstFieldsets.selectedIndex).Text
        Set oChildren = PTable.ActiveView.FieldSets(sFS).Member.ChildMembers
        sResults = "State of All Members: " & vbCrLf & vbCrLf
        For i = 0 To oChildren.Count - 1
            Recurse1 oChildren(i), 0
        Next
        txtResults.innerText = sResults
    End Function
    
    Function Recurse1(oPM, nLevel)
        Dim oFUpd 'OWC10.PivotFilterUpdate
        Set oFUpd = oPM.Field.FieldSet.CreateFilterUpdate
        sResults = sResults & aStates(oFUpd.StateOf(oPM)-1) & vbTab & _
                   Space(nLevel * 3) & "- " & oPM.Name & vbCrLf
        For i = 0 To oPM.ChildMembers.Count - 1
             Recurse1 oPM.ChildMembers(i), nLevel + 1
        Next
    End Function
    
    Function Button2_OnClick()
        Dim oChildren
        Dim sFS
        sFS = lstFieldsets.options(lstFieldsets.selectedIndex).Text
        Set oChildren = PTable.ActiveView.FieldSets(sFS).Member.ChildMembers
        sResults = "Selected Members: " & vbCrLf & vbCrLf
        For i = 0 To oChildren.Count - 1
            Recurse2 oChildren(i)
        Next
        txtResults.innerText = sResults
    End Function
    
    Function Recurse2(oPM)
        Dim oFUpd 'OWC10.PivotFilterUpdate
        Dim nState
        Set oFUpd = oPM.Field.FieldSet.CreateFilterUpdate
        nState = oFUpd.StateOf(oPM)
        'If the member is checked, then we can assume that all of 
        'its child members are also checked and not drill down any further.
        If nState = c.plMemberStateChecked Then
            sResults = sResults & oPM.UniqueName & vbCrLf
        'If the member is gray, check to see which of its child members
        'are included.
        ElseIf nState = c.plMemberStateGray Then
            For i = 0 To oPM.ChildMembers.Count - 1
                Recurse2 oPM.ChildMembers(i)
            Next
        'If the member is cleared, there's no reason to
        'drill down any further.
        ElseIf nState = c.plMemberStateClear Then
        End If
    End Function
    
    </SCRIPT>
    
    </HTML>
    					
  2. 在樞紐分析表連接字串中 YourServer 取代含有 FoodMart 2000 樣本資料庫的伺服器。
  3. 將檔案儲存為 C:\Filter1.htm。
  4. 啟動 Internet Explorer],並瀏覽至 C:\Filter1.htm。
  5. 一旦樞紐分析表已連接至資料來源,請依照下列步驟執行:
    1. 將您所選擇的篩選器套用到任何一種座標軸。
    2. 在清單中選取您所篩選的欄位集名稱。
    3. 按一下 [清單] 狀態的所有成員]。文字區域中產生的文字會列出所有成員和子系成員,並指出是否每一個清除,核取,或灰色。
    4. 按一下 [清單] 選取僅限成員。文字區域中產生的文字列出欄位集選取,或篩選條件中包含這些成員唯一的名稱。
  6. 重複先前步驟中,其餘的軸成員的。

範例 # 2: 使用傳統資料來源

為樞紐分析表是繫結至傳統資料來源,您可以使用第一個範例所述的方法來擷取篩選器狀態的上座標軸的成員。不過,當您使用 [傳統資料來源,例如 Access 資料庫或 Microsoft Excel 活頁簿遞迴就不需要擷取這項資訊,因為樞紐分析成員沒有多重子成員。這個第二個範例會示範如何擷取沒有遞迴成員狀態。
  1. 請將下列程式碼貼至任何文字或 HTML 編輯器。

    附註下列程式碼使用 樞紐分析表 物件的 Office XP 版本。針對 樞紐分析表 物件的 [Office 2003] 版本成值 clsid:0002E552-0000-0000-C000-000000000046 在程式碼中與 clsid:0002E55A-0000-0000-C000-000000000046。
    <HTML>
    
    <BODY>
    
    <OBJECT ID="PTable" CLASSID="CLSID:0002E552-0000-0000-C000-000000000046" 
    WIDTH="100%" HEIGHT="60%"><PARAM name="AutoFit" value="False"></PARAM>
    </OBJECT>
    
    <P/>
    
    <TABLE WIDTH="100%" HEIGHT="35%">
     <TR>
      <TD WIDTH="35%" VALIGN="Top">
       <SELECT NAME="lstFieldSets" STYLE="width:'100%'">
        <OPTION VALUE="1" SELECTED>Country</OPTION>
        <OPTION VALUE="2">Year</OPTION>
        <OPTION VALUE="3">ProductName</OPTION>
       </SELECT>
       <P/>
       <BUTTON ID="Button1" STYLE="width:'100%'">List State of All Members
       </BUTTON>
      </TD>
      <TD WIDTH="65%">
       <TEXTAREA STYLE="width:'100%';height:'100%'" ID=txtResults>&#xa0;
       </TEXTAREA>
      </TD>
     </TR>
    </TABLE>
    
    <SCRIPT Language="VBScript">
    
    Dim c   'For PivotTable constants.
    Dim oView
    
    Function Window_OnLoad()
    
       Set c = PTable.Constants
    
        'Connect to the database and provide the commandtext for the rowset.
        PTable.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
         "Data Source = C:\Program Files\" & _
         "Microsoft Office\Office10\Samples\Northwind.mdb"
            
        PTable.CommandText = _
         "SELECT Orders.ShipCountry AS Country, (1-[Discount])*[Quantity]*" & _
         "[Order Details].[UnitPrice] AS OrderAmt, Year([OrderDate]) AS " & _
         "[Year], [Products].ProductName FROM (Orders INNER JOIN " & _
         "[Order Details] ON Orders.OrderID = [Order Details].OrderID) " & _
         "INNER JOIN Products ON [Order Details].ProductID = " & _
         "Products.ProductID"
    
        Set oView = PTable.ActiveView
    
        'Add fields to the row axis and column axis for grouping.
        oView.FilterAxis.InsertFieldSet oView.FieldSets("Country")
        oView.RowAxis.InsertFieldSet oView.FieldSets("ProductName")
        oView.ColumnAxis.InsertFieldSet oView.FieldSets("Year")
    
        'Add a total for the OrderAmt fieldset.
        oView.DataAxis.InsertTotal oView.AddTotal("SalesTotal", _
               oView.FieldSets("OrderAmt").Fields(0), c.plFunctionSum)
        oView.Totals("SalesTotal").NumberFormat = "$#,##0"
    
    End Function
    
    Function Button1_OnClick()
    
        Dim oChildren
        Dim sFS
        Dim oPM   'OWC10.PivotMember
        Dim oFUpd 'OWC10.PivotFilterUpdate
        Dim aStates
    
        aStates = Array("Cleared", "Checked")  'Possible states
    
        sFS = lstFieldsets.options(lstFieldsets.selectedIndex).Text
        Set oChildren = PTable.ActiveView.FieldSets(sFS).Member.ChildMembers
        sResults = "State of All Members: " & vbCrLf & vbCrLf
        
        For i = 0 To oChildren.Count - 1
            Set oPM = oChildren(i)
            Set oFUpd = oPM.Field.FieldSet.CreateFilterUpdate
            sResults = sResults & aStates(oFUpd.StateOf(oPM) - 1) & vbTab & _
                   "- " & oPM.Caption & vbCrLf
        Next
    
        txtResults.innerText = sResults
    End Function
    
    
    </SCRIPT>
    
    </HTML>
    					
  2. 在樞紐分析表連接字串中修改以 Northwind.mdb 以符合您的 Office 的安裝路徑。
  3. 將檔案儲存為 C:\Filter2.htm。
  4. 啟動 Internet Explorer],並瀏覽至 C:\Filter2.htm。
  5. 樞紐分析表已連接至資料來源之後,請依照下列步驟執行:
    1. 將您所選擇的篩選器套用到任何一種座標軸。
    2. 在清單中選取您所篩選的欄位集名稱。
    3. 按一下 [清單] 狀態的所有成員]。文字區域中產生的文字會列出所有成員,並指出每一個是清除或核取。
  6. 重複先前步驟中,其餘的軸成員的。

?考

如需有關 Office XP Web 的詳細資訊的元件,請參閱下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
與 Visual Studio 的 Microsoft Office 程式開發
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx

Microsoft Office 程式開發 」
http://msdn.microsoft.com/office

屬性

文章編號: 302101 - 上次校閱: 2007年6月29日 - 版次: 4.2
這篇文章中的資訊適用於:
  • Microsoft Office XP Web Components
  • Microsoft Office 2003 Web Components
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.01
  • Microsoft Internet Explorer 5.5
關鍵字:?
kbmt kbhowto kbofficewebpivot KB302101 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:302101
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com