2016-07-26 11 views
1

Guten Tag an alle. In den letzten 8 Stunden suche ich nach einer Pivot-Alternative in Access 2007, da die Referenz dll in unserem Citrix-Konto (OWC10.dll) nicht verfügbar ist. Also habe ich alle Anstrengungen unternommen, um eine Workaround zu erforschen, aber ich habe bisher noch nichts, also denke ich, es ist Zeit für ein wenig Hilfe.Alternative Möglichkeiten zum Pivot Access-Daten mit VBA

Was ich hier habe eine Probe der Rohdaten ist ..

enter image description here

Dies ist das Endergebnis ich suche, einer Pivot-Tabelle, in der natürlich kann in einem eingesehen werden Form (beste Lösung) oder zu einer extrahierten Excel-Datei.

enter image description here

enter image description here

Also im Grunde, ich brauche anzuzeigen:

  • wie viel Zeit sie jeden Tag
  • wie viele sie jeden Tag gearbeitet gearbeitet.

Ich versuchte, die TRANSFORM Statement/Crosstab und ich bekomme den Fehler, dass es zu viel Zeilen ist es eine Spalte zu machen, da ich 20.000+ Reihen zu tun haben - 30 Tage/Monat * Menschen, die gearbeitet. - DISTINCT sie, aber ich weiß nicht wie?

Ich habe nicht die .dll Datei in unserem System, so normales Pivotieren kommt nicht in Frage. Kennt jemand irgendwelche Alternativen, die mir diese Anzeigeergebnisse geben können?

+0

Bitte fügen Sie die TRANSFORM-Abfrage, die Sie versucht haben, zu Ihrer Frage hinzu. --- Wie viele verschiedene Tage haben Sie in den Daten (machen Sie eine Abfrage 'SELECT DISTINCT ProcessDate FROM yourTable' und scrollen Sie nach unten)? – Andre

+0

Entschuldigung, ich habe nur den Code von Google und legte es in ein Modul dann verwendet es so 'Print Transforms (" Tabelle "," Spalte ") für was ich mich erinnere, es durchläuft alle Felder in dieser Spalte und fügen hinzu es als eine neue Spalte.da es zu viele ist, gibt es diesen Fehler zurück - es von Microsoft-Site, kann es nicht wieder tho finden. Ich habe Kreuzestab nicht wirklich studiert, da ich immer noch nach Alternativen suche. Aber um Ihre Frage zu beantworten, hängt der genaue Tag davon ab, wie viele Menschen an diesem Tag gearbeitet haben. ZB haben meine aktuellen Rohdaten 25.000 Zeilen für den Monat Juni. – AdorableVB

+0

Wenn SQL Server keine Option ist, gibt es nicht wirklich etwas anderes als Kreuztabellenabfragen oder Pivot-Tabellen (die nach Access 2010 ohnehin veraltet sind). Ich schlage vor, Sie erstellen eine Abfrage, die alle Zeilen für June gibt, und führen Sie dann den Kreuztabellenabfrage-Assistenten aus. Diese Daten eignen sich gut für TRANSFORM. – Andre

Antwort

0

Für andere, die die gleichen Probleme haben wie ich bin. Ich machte eine Lösung mit CrossTab. Die Verwendung des Abfrage-Assistenten ist sehr einfach und verständlich. Unten ist die bearbeitete SQL-Abfrage, um meine Bedürfnisse zu erfüllen:

TRANSFORM format(Sum(MyCopy.[Duration]), "hh:mm:ss") AS SumOfDuration 
SELECT MyCopy.[UserID].[FullName], MyCopy.[TL], Sum(MyCopy.[Duration]) AS [Total Of Duration] 
FROM MyCopy 
Group BY MyCopy.[UserID], MyCopy.[FullName], MyCopy.[TL] 
PIVOT MyCopy.[Process Date]; 

Hinweis: Für Berichtzwecke ist es sehr einfach, nur diese Abfrage zu extrahieren. Ich habe format verwendet, damit es mit den Dezimalzahlen nicht hässlich aussieht. Anscheinend gibt MS Access die Antworten nicht in reellen Zahlen, sondern in gleichem Prozentsatz. Es löst sich anders, wenn sum of total duration 24 Stunden vergeht. Also habe ich es im Dezimalformat gelassen, damit korrekte Zahlen erscheinen.

0

Was Sie tun müssen, ist eine Abfrage der Daten, die Sie benötigen, zu kompilieren, und schieben Sie dies in Excel, dann programmgesteuert eine Pivot-Tabelle in Excel, von Zugriff.

Ich benutze ADO für so ziemlich alles - so spiegelt die Syntax, die ich hier habe, dies wider; Wenn Sie DAO, müssen Sie es übersetzen.

sql = _ 
    "SELECT Name, ProcessDate, HandlingTime " & _ 
    "FROM tbl ... WHERE ..." 

GenerateSimplePivot(excel_path&file_name_to_create, sql, 2) 


Private Sub GenerateSimplePivot(xname As String, auditData As String, _ pivotColumns As Long) 
    Dim ii  As Long 
    Dim XL  As Object 
    Dim WB  As Object 
    Dim WS1  As Object 
    Dim WS2  As Object 
    Dim rst  As ADODB.Recordset 

    'create/assign xl objects 
    Set XL = CreateObject("Excel.Application") 
    XL.Visible = False 
    XL.DisplayAlerts = False 
    Set WB = XL.Workbooks.Add 
    Set WS1 = WB.Worksheets(1) 

    Set rst = New ADODB.Recordset 
    rst.Open auditData, CurrentProject.Connection, adOpenKeyset, adLockReadOnly 

    For ii = 0 To rst.Fields.Count - 1 
     WS1.Cells(1, ii + 1) = rst.Fields(ii).Name 
    Next 

    WS1.Range("A2").CopyFromRecordset rst 
    WS1.Columns.Autofit 
    WS1.Name = "AuditData" 

    For ii = 0 To rst.Fields.Count - 1 
     'add column formatting logic here, if required 
    Next 
    rst.Close 

    If WB.Worksheets.Count < 2 Then 
     Set WS2 = WB.Worksheets.Add(, WB.Worksheets(WB.Worksheets.Count)) 
    Else 
     Set WS2 = WB.Worksheets(2) 
    End If 

    WS2.Name = "PivotTable" 

    DoCmd.SetWarnings False 

    Dim PTcache  As Object 
    Dim pt   As Object 

    WS1.Activate 

    Set PTcache = WB.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=WS1.Range("A1").CurrentRegion.Address) 
    Set pt = PTcache.CreatePivotTable(TableDestination:=WS2.Range("a6"), TableName:="PivotTable ") 

    WS2.Activate 

    With pt 
     For ii = (pivotColumns - 3) To 2 Step -1 
      .PivotFields(ii).Orientation = xlPageField 
     Next 
     On Error Resume Next 
     .PivotFields(1).Orientation = xlPageField 
     Err.Clear 
     ON Error GoTo [error handler label] 
     .PivotFields(pivotColumns - 2).Orientation = xlRowField 
     .PivotFields(pivotColumns - 1).Orientation = xlColumnField 
     .PivotFields(pivotColumns).Orientation = xlDataField 
    End With 

    WB.SaveAs FileName:=xname 
    WB.Close 
    Set WS1 = Nothing 
    Set WS2 = Nothing 
    Set PTcache = Nothing 
    Set pt = Nothing 
    Set WB = Nothing 
    XL.Quit 

    DoCmd.SetWarnings True 
    Set rst = Nothing 
    Set WS1 = Nothing 
    Set WS2 = Nothing 
    Set PTcache = Nothing 
    Set pt = Nothing 
    Set WB = Nothing 
    Set XL = Nothing 
End Sub 

Haben Sie danach gesucht?

+0

Ich glaube, das ist, wie die Datenanzeige aussehen soll, aber ich habe bereits eine Lösung für mein Problem mit der Kreuztabellenabfrage - dadurch kann ich die Werte, die ich für die Berechnung benötige, nur zu Berichtszwecken exportieren . Entschuldigung, ich habe die Antwort nicht gepostet, da ich keinen Zugriff auf Websites in meinem Büro habe. Aber ich schaue mir das an, anstatt die Abfrage von xtab zu exportieren. Vielen Dank – AdorableVB

Verwandte Themen