Frage

Ich habe eine Tabelle mit einem Datensatz von einer Reihe von Transaktionen, von denen jeder von Unterschritten besteht, von denen jeder hat die Zeit, die sie sich ereignen. Es kann eine variable Anzahl und Reihenfolge der Schritte sein.

Ich möchte die Dauer jeder Transaktion zu finden. Wenn ich das in Excel kann dann groß, wie es bereits in diesem Format. Wenn es nicht ein straight-forward Weise ist dies in Excel zu tun, werde ich es in eine Datenbank laden und führen Sie die Analyse mit SQL. Wenn es eine Excel herum dies wird es ein paar Stunden Setup speichern aber:)

Ein vereinfachtes Beispiel meiner Daten ist wie folgt:

TransID, Substep, Zeit
1, Stufe A, 15.00.00
1, Stufe B, 15.01.00
1, Stufe C, 15.02.00
2, Stufe B, 15.03.00
2, Schritt C, 15.04.00
2, Stufe E, 15.05.00
2, Stufe F, 15.06.00
3, Schritt C, 15.07.00
3, Schritt D, 15.08.00
etc.

Ich möchte ein Ergebnis gesetzt wie folgt erzeugen:

TransID, Dauer
1, 00.02.00
2, 00.03.00
3, 00.01.00
etc.

Mein erster Versuch war mit einer zusätzlichen Spalte mit einer Formel Endzeit von Startzeit subtrahiert wird, aber ohne eine sich wiederholende Reihe von Schritten, oder den gleichen Start- und End-Schritte, die ich Schwierigkeiten haben, bin zu sehen, wie diese Formel funktionieren würde.

Ich habe auch versucht, eine Pivot-Tabelle erstellen auf der Grundlage dieser Daten mit ID wie die Zeilen und Zeit als die Daten. Ich kann die Feldeinstellungen auf den Zeitdaten ändern gruppiert Werte wie Zähl- oder max zurückzukehren, aber ich kämpfen, um zu sehen, wie diese eingerichtet werden kann max (Zeit) zu zeigen - min (Zeit) für jede ID, also warum ich bin darüber nachzudenken, zu SQL Überschrift. Wenn jemand etwas darauf hinweisen, kann offensichtlich fehlt mir aber, würde ich sehr dankbar.

Wie Hobbo vorgeschlagen, die ich benutzt habe jetzt eine Pivot-Tabelle mit TransID wie die Reihen und zweimal hinzugefügt Zeit als die Daten. die Feldeinstellungen auf der Time to Max auf dem ersten und Min auf dem zweiten nach der Einstellung kann eine Formel nur außerhalb der Pivot-Tabelle hinzugefügt werden, um die Unterschiede zu berechnen. Eine Sache, die ich hatte, wurde hier mit Blick ist, dass der gleiche Wert kann zu dem Datenabschnitt hinzugefügt werden, mehr als einmal!

Ein Follow-on-Problem war, dass die Formel I addieren ist von der Form = GETPIVOTDATA ( "Max of Time", A $ 4 $, "ID", 1) -GETPIVOTDATA ( "Min of Time", 4 $ A $, „ID“, 1), whici nicht inkrementiert dann beim Kopieren und Einfügen. Lösungen hierfür sind entweder die Pivot-Tabelle Symbolleiste GETPIVOTDATA Formeln zu deaktivieren, oder anstatt auf der Pivot-Tabelle klicken, wenn die Zellen in der Formel, geben Sie den Zellbezug statt (z = H4-G4)

Auswahl
War es hilfreich?

Lösung

Sie waren auf dem richtigen Weg mit Pivot-Tabellen. Ziehen in TransID als Zeilenfeld und ziehen in zwei Kopien der Zeit als Datenfelder in der Pivot-Tabelle; Rechtsklick auf jedem und gibt Min als die Verdichtungsfunktion für einen und Max für den anderen. Auf der rechten Seite der Pivot-Tabelle eine Formel hinzufügen, um den Unterschied zu berechnen.

alt text http://img296.imageshack.us/img296/5866/pivottableey5 .jpg

"Sieht gut aus, das einzige Problem, das ich habe ist, dass die Formel I füge die Form ist = GETPIVOTDATA (" Max der Zeit, A $ 4 $, "ID", 1) - GETPIVOTDATA ( "Max der Zeit, $ A $ 4, "ID", 1) Wenn ich Kopie, die unter den Zellen, wird das 1 nicht aktualisieren, um 2, 3 usw., so dass sie alle die gleiche Zeit zeigen -.. Kris Coverdale „

Mit dieser Taste auf der Pivot-Tabelle Symbolleiste GETPIVOTDATA Formeln auszuschalten.

alt text http://img117.imageshack.us/img117/9937/pivottabletoolbarjn3 .jpg

Andere Tipps

In Ihrer Formel "GETPIVOTDATA (" Max der Zeit, $ A $ 4, "ID", 1) - GETPIVOTDATA ( "Max der Zeit, $ A $ 4, "ID", 1)‘ werden die Zellverweise zwischen den adressierten Symbol „$‘. Zum Beispiel $ A $ 4. Wenn die Zelle references $ Symbol und Sie die Formel auf andere Zelle kopieren dann Zellen verweisen, werden nicht automatisch aktualisiert. Daher erhalten Sie die gleiche Art.

Vielleicht ändern Sie die Formel wie folgt, und kopieren Sie dann die Formel auf andere Zellen. Die Formel sollte wie:

"GETPIVOTDATA (" Max der Zeit, A4, "ID", 1) -. GETPIVOTDATA ( "Max der Zeit, A4, "ID", 1)"

Danke.

Vielleicht etwas so einfach wie eine Abfrage wie folgt.

SELECT TransID, DateDiff(mi, Min(Time),Max(Time)) AS Duration
FROM MyTable
GROUP BY TrandID

In Excel:

  A     B        C
1 1, step A, 15:00:00
2 1, step B, 15:01:00
3 1, step C, 15:02:00
4 2, step B, 15:03:00
5 2, step C, 15:04:00
6 2, step E, 15:05:00
7 2, step F, 15:06:00
8 3, step C, 15:07:00
9 3, step D, 15:08:00

11 1, =max(if($A$1:$A$9=$A11,$C$1:$C$9,"")-min(if($A$1:$A$9=$A11,$C$1:$C$9,"")
12 2, =max(if($A$1:$A$9=$A12,$C$1:$C$9,"")-min(if($A$1:$A$9=$A12,$C$1:$C$9,"")

Hinweis: Formeln sind Array-Funktionen, so drücken Sie Strg-Shift-Eingabe Nach der Bearbeitung der

.

Um zu Kibbee des Beitrag hinzufügen, in Bezug auf den Kommentar, können Sie ADO mit Excel verwenden:

'From: http://support.microsoft.com/kb/246335 '

strFile = Workbooks(1).FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT TransID, DateDiff('n', Min([MyTime]),Max([MyTime])) AS Duration " _
         & "FROM [Sheet1$] GROUP BY TransID"

rs.Open strSQL, cn

'Write out to another sheet '
Worksheets(2).Cells(2, 1).CopyFromRecordset rs

EDIT: Ich habe einige Fehler in der ursprünglichen Nachricht korrigiert und den Namen der Zeitspalte zu MyTime geändert. Die Zeit ist ein reserviertes Wort in SQL und führt zu Schwierigkeiten bei Abfragen. Das funktioniert jetzt auf einen sehr einfachen Test.

Manchmal ist es möglich, etwas einmal in Excel viel leichter zu tun, als es wiederholbar, etwas zu tun ist.

Sie sind nur Angenommen, versuchen, die Antwort ein- oder zweimal zu bekommen, und dann die Tabelle wegzuwerfen (im Gegensatz es jede Nacht zu laufen, oder geben es an jemand anderen zu laufen), hier ist, wie ich es tun würde.

Ich gehe davon aus Rohdaten in Spalten A, B und C, mit Überschriften in Zeile 1, und Daten, beginnend in Zeile 2.

Sortieren Sie die Tabelle nach TransId als Primärschlüssel, und Zeit als sekundäres, beide aufsteigend. (Im Folgenden wird nicht funktionieren, wenn dies nicht der Fall.)

Fügen Sie eine neue Spalte, D, mit dem Titel Dauer mit einer Formel, die diese mögen (Excel-Formeln haben nicht die Formatierung oder Kommentare, ich habe diejenigen hinzugefügt, um zu erklären, aber sie brauchen werden gezupft):

=IF(B2=B3,           // if this row's TransId is the same as the next one
    "",              // leave this field blank
    C3-              // else find the difference between the last timestamp and...
     VLOOKUP(        // look for the first value
        A2,          // matching this TransId
        A:C,         // within the entire table,
        3)           // Return the value in the third column - i.e. timestamp
    )

Nun ist die Daten, die Sie wollen, sind in Spalte D, aber nicht in dem gewünschten Format.

Spalten auswählen A-D und sie kopieren. Verwenden Sie spezielle Fügen Sie die Werte zu kopieren nur in ein neues Arbeitsblatt.

Spalte B und Spalte C in dem neuen Arbeitsblatt löschen, so dass alle links ist TransID und Dauer ist.

Sortieren nach Dauer, alle Zeilen mit Werten zu bringen nebeneinander.

Sortieren nur die Zeilen mit Werten von TransId.

Voila, und es ist Ihre Lösung! Hoffe, dass Sie nicht diese müssen wiederholen!

P. S. Dies ist nicht getestet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top