Ms access 基于透视表中设置的过滤器的“计数”

Ms access 基于透视表中设置的过滤器的“计数”,ms-access,ms-access-2007,vba,pivot-table,Ms Access,Ms Access 2007,Vba,Pivot Table,因此,我们导入了我们查询过的数据,然后根据该查询创建了一个透视表。它本质上是一个文件列表,每个文件都有唯一的ID号和各种属性文件扩展名、文档类型、哈希等。在任何情况下,这些数据都是基于来自不同程序的关键字搜索结果。这意味着同一唯一ID可能有多个记录,因为有多个点击 pivot表允许我们通过过滤掉某些条件来说明/操作,例如,我们不想要某些文件扩展名,或者我们不想要字段X或字段Y0的记录。报告很好,但我们希望创建一个表单/查询/报告/任何东西,它将根据忽略重复项的唯一ID提取计数。例如,一旦在数据透

因此,我们导入了我们查询过的数据,然后根据该查询创建了一个透视表。它本质上是一个文件列表,每个文件都有唯一的ID号和各种属性文件扩展名、文档类型、哈希等。在任何情况下,这些数据都是基于来自不同程序的关键字搜索结果。这意味着同一唯一ID可能有多个记录,因为有多个点击

pivot表允许我们通过过滤掉某些条件来说明/操作,例如,我们不想要某些文件扩展名,或者我们不想要字段X或字段Y0的记录。报告很好,但我们希望创建一个表单/查询/报告/任何东西,它将根据忽略重复项的唯一ID提取计数。例如,一旦在数据透视表中设置了所有过滤器,根据数据透视表的过滤器/输出,我们需要如下内容:

.PDF文件:200 |字段x总计|字段y总计|等

.DOCX文件:320 |字段x总计|字段y总计|等

显然,我们希望忽略计数中相同唯一ID的重复项


考虑到我们将经常动态地操作数据透视表,那么最好的方法是什么?理想的情况是打开透视表和另一个对象表单/报表/等,并且在透视表被操作时,显示计数变化的内容也会发生变化。

以下是一些非常粗略的注释。它们只经过最低限度的测试,使用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
如果有帮助:


它将按所需的数字为您提供ID编号的唯一计数,并且您仍然可以操作数据透视

Access数据透视表与Excel数据透视表并不完全相同。