2010-11-05 70 views
0

因此,我們導入了我們查詢過的數據,然後創建了一個關閉該查詢的數據透視表。它基本上是一個文件列表,每個文件都有唯一的ID號和各種屬性(文件擴展名,文檔類型,散列等)。無論如何,這些數據都是基於來自不同程序的關鍵字搜索的「點擊量」。這意味着可能有多個相同唯一ID的記錄,因爲有多個匹配。基於數據透視表中設置的過濾器的「Count」

數據透視表允許我們通過過濾出某些標準來說明/操作(例如,我們不希望某些文件擴展名,或者我們不希望記錄使用FIELD X或FIELD Y0。報告很好,但我們希望以形成一個表單/查詢/報告/無論這將拉一個「計數」(基於唯一的ID),忽略重複。例如,一旦所有的過濾器設置在數據透視表中,基於數據透視的過濾器/輸出表中,我們想是這樣的:

.pdf文件:200 |總現場X |總場Y |等

.DOCX文件:320 |總現場X |總現場ÿ | etc

顯然,我們希望忽略計數中相同唯一標識的重複項。

考慮到我們將動態地和經常地操縱數據透視表,最好的方法是什麼?理想的情況是將數據透視表和另一個對象(form/report/etc)打開,並且數據透視表也被操縱,無論顯示的是計數變化。

回答

0

下面是一些非常粗糙的筆記筆記。他們只是進行了最低限度的測試,使用IN會帶來很多價值的災難,但是,切換這一輪並使用排除列表會很容易。也許你可以得到一些想法。

Dim oPTable ''PivotTable 
Dim oPM ''PivotMember 
Dim oFUpd ''PivotFilterUpdate 
Dim oChildren ''ChildMembers 
Dim fset ''FieldSet 

Dim sWhere As String 
Dim sTemp As String 
Dim sSQL As String 
Dim sDelim As String 
Dim aStates As Variant 

Dim i As Integer 

Dim rs As DAO.Recordset 


sDelim = """" 
aStates = Array("Cleared", "Checked") ''Possible states 

Set oPTable = Forms(0).PivotTable.ActiveView 

sWhere = vbNullString 

For Each fset In oPTable.FieldSets 

    sTemp = vbNullString 

    Set oChildren = oPTable.FieldSets(fset).Member.ChildMembers 

    For i = 0 To oChildren.Count - 1 
     Set oPM = oChildren(i) 
     Set oFUpd = oPM.Field.FieldSet.CreateFilterUpdate 

     If aStates(oFUpd.StateOf(oPM) - 1) = "Checked" Then 
      Select Case fset.BoundField.DataType 
       Case adChar, adLongVarWChar 
        sTemp = sTemp & "," & sDelim & oPM.Caption & sDelim 
       Case adInteger 
        sTemp = sTemp & "," & oPM.Caption 
       Case adDate 
        sTemp = sTemp & ",#" & oPM.Caption & "#" 
       Case Else 
        '' The above is a very short list. 
        '' Stop 

      End Select 

     End If 
    Next 

    If sTemp > vbNullString Then 
     sWhere = sWhere _ 
       & " AND [" & fset.Name & "] IN (" & Mid(sTemp, 2) & ")" 
    End If 
Next 

sSQL = "SELECT DISTINCT ID FROM [" & oPTable.Control.DataMemberCaption & "] " 
sSQL = sSQL & "WHERE 1=1" & sWhere 
Set rs = CurrentDb.OpenRecordset(sSQL) 
MsgBox "Unique: " & rs.RecordCount 
相關問題