Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Großes Datenset, Datumsvergleich per ID mit Toleranz
#1
Hallo zusammen,

ich bin neu in diesem Forum und möchte mich vorab entschuldigen, falls meine Problemdarstellung nicht den Standards entsprechen sollte.

Für ein Uniprojekt habe ich ein sehr unstrukturiertes und großes Datenset, welches ich nun bearbeite. Was ist rausbekommen möchte ist zwar nicht schwer zu verstehen, dennoch komme ich nicht darauf wie ich das verformeln kann.
Da ich es nicht geschafft habe ein Bild hochzuladen (es ist erstaunlich kompliziert gemacht), habe ich die Datei angehängt (bitte aufmachen, damit ihr versteht was ich im folgenden erkläre.

Ich möchte, dass für jede Contribution_id (1 bis 10) der gleichen donor_id (36) jeweils jedes contrib_recent_date MINUS solicit_recent_date berechnet wird und mir angezeigt wird ob ein Wert <= 14 rauskommt. Falls dies der Fall ist soll rechts wie in Spalte L gezeigt eine 1 (Bedingung erfüllt) oder 0 (Bedingung nicht erfüllt) rauskommen.

Die idee ist, dass ich überprüfen möchte ob solicitation (also sowas wie Werbegeschenke) funktioniert haben indem ich das Funktionieren so festlege, dass binnen 14 Tage nach der Solicitation eine Contribution der gleichen ID (also der gleichen Person) stattfand. 

In der Mitte (rot markiert) zeige ich eine Idee wie man das mit einer Matrix lösen könnte. Man hätte insgesamt eine 10x10 matrix weil jede Contribution ID mit jeder Solicitation ID verglichen wird und nur Werte unter 14 als grün (wahr) markiert. Sie sind wahr weil Solicitation 1 und 2 für ID 36 am 01.01.15 stattfanden und eine Contribution am gleichen Datum von ID 36 stattfand. Also gehe ich hier davon aus, dass beide Solicitations erfolgreich waren.

Da sich mein Datenset über 470.000 Zeilen erstreckt, bräuchte ich eine Formel, die ich runterziehen kann und sie soll mir mit "1" oder "0" für jede Zeile anzeigen ob die Solicitation erfolg hatte.

Ich hoffe ich habe das Problem ausführlich genug erklärt. Ich bin für jegliche Hilfe unendlich dankbar! Angehängt habe ich einen Ausschnitt aus der Datenbank (entspricht exakt dem angehängten Bild, falls dieses nicht funktioniert)

Vielen Dank und Beste Grüße
Bo
Antworten Top
#2

.xlsx   ID-check.xlsx (Größe: 10,64 KB / Downloads: 11)
Antworten Top
#3
Moin

Lösung mit PQ.


Angehängte Dateien
.xlsx   clever-excel-forum_29443.xlsx (Größe: 25,42 KB / Downloads: 10)
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#4
Moin shift-del,

vielen Dank, dass für die hilfsbereitschaft. 
Ich sehe in der von dir geschickten Excel keine Formeln und die Ergebnisse sind falsch, (nur das erste FALSE und alles andere TRUE).
Dabei sollten in diesem Beispiel bei ID 36 nur Solicitation 2,3,7 und 8 true sein.
ich habe es nun mit einer gigantischen If-Verkettungsformel gelöst, jedoch ist das nicht das gelbe vom Ei.
So kann ich die Formel runterziehen und sie scheint zu funktionieren. Ich frage immer ab ob was die Contribution ID ist und passe danach die ganzen Berechnungen an, sodass man immer nur gleiche IDs vergleicht.

Es müsste doch eine elegantere Lösung hierfür geben  Confused

Meine Formel für Zelle O13 lautet:
=IF(B13=10,IF(OR(AND(C4-K13<=14,C4-K13>=0),AND(C5-K13<=14,C5-K13>=0),AND(C6-K13<=14,C6-K13>=0),AND(C7-K13<=14,C7-K13>=0),AND(C8-K13<=14,C8-K13>=0),AND(C9-K13<=14,C9-K13>=0),AND(C10-K13<=14,C10-K13>=0),AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0)),1,0),IF(B13=9,IF(OR(AND(C5-K13<=14,C5-K13>=0),AND(C6-K13<=14,C6-K13>=0),AND(C7-K13<=14,C7-K13>=0),AND(C8-K13<=14,C8-K13>=0),AND(C9-K13<=14,C9-K13>=0),AND(C10-K13<=14,C10-K13>=0),AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0)),1,0),IF(B13=8,IF(OR(AND(C6-K13<=14,C6-K13>=0),AND(C7-K13<=14,C7-K13>=0),AND(C8-K13<=14,C8-K13>=0),AND(C9-K13<=14,C9-K13>=0),AND(C10-K13<=14,C10-K13>=0),AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0)),1,0),IF(B13=7,IF(OR(AND(C7-K13<=14,C7-K13>=0),AND(C8-K13<=14,C8-K13>=0),AND(C9-K13<=14,C9-K13>=0),AND(C10-K13<=14,C10-K13>=0),AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0),AND(C16-K13<=14,C16-K13>=0)),1,0),IF(B13=6,IF(OR(AND(C8-K13<=14,C8-K13>=0),AND(C9-K13<=14,C9-K13>=0),AND(C10-K13<=14,C10-K13>=0),AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0),AND(C16-K13<=14,C16-K13>=0),AND(C17-K13<=14,C17-K13>=0)),1,0),IF(B13=5,IF(OR(AND(C9-K13<=14,C9-K13>=0),AND(C10-K13<=14,C10-K13>=0),AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0),AND(C16-K13<=14,C16-K13>=0),AND(C17-K13<=14,C17-K13>=0),AND(C18-K13<=14,C18-K13>=0)),1,0),IF(B13=4,IF(OR(AND(C10-K13<=14,C10-K13>=0),AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0),AND(C16-K13<=14,C16-K13>=0),AND(C17-K13<=14,C17-K13>=0),AND(C18-K13<=14,C18-K13>=0),AND(C19-K13<=14,C19-K13>=0)),1,0),IF(B13=3,IF(OR(AND(C11-K13<=14,C11-K13>=0),AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0),AND(C16-K13<=14,C16-K13>=0),AND(C17-K13<=14,C17-K13>=0),AND(C18-K13<=14,C18-K13>=0),AND(C19-K13<=14,C19-K13>=0),AND(C20-K13<=14,C20-K13>=0)),1,0),IF(B13=2,IF(OR(AND(C12-K13<=14,C12-K13>=0),AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0),AND(C16-K13<=14,C16-K13>=0),AND(C17-K13<=14,C17-K13>=0),AND(C18-K13<=14,C18-K13>=0),AND(C19-K13<=14,C19-K13>=0),AND(C20-K13<=14,C20-K13>=0),AND(C21-K13<=14,C21-K13>=0)),1,0),IF(B13=1,IF(OR(AND(C13-K13<=14,C13-K13>=0),AND(C14-K13<=14,C14-K13>=0),AND(C15-K13<=14,C15-K13>=0),AND(C16-K13<=14,C16-K13>=0),AND(C17-K13<=14,C17-K13>=0),AND(C18-K13<=14,C18-K13>=0),AND(C19-K13<=14,C19-K13>=0),AND(C20-K13<=14,C20-K13>=0),AND(C21-K13<=14,C21-K13>=0),AND(C22-K13<=14,C22-K13>=0)),1,0)))))))))))
Antworten Top
#5
(05.12.2020, 22:41)_Bo_ schrieb: Ich sehe in der von dir geschickten Excel keine Formeln und die Ergebnisse sind falsch, (nur das erste FALSE und alles andere TRUE).
Dabei sollten in diesem Beispiel bei ID 36 nur Solicitation 2,3,7 und 8 true sein.
ich habe es nun mit einer gigantischen If-Verkettungsformel gelöst, jedoch ist das nicht das gelbe vom Ei.
Ich darf dich daran erinnern dass du nur drei Wunschergebnisse angegeben hast und alle drei stimmen.
Warum der Rest nicht stimmen sollte erschließt sich mir nicht.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#6
Hallo shift-del,

entschuldige bitte, dass ich mich so unklar ausgedrückt habe.
Die drei Wunschergebnisse sollten lediglich die ersten drei Ergebnisse darstellen, damit die Logik des Problems klar wird. 
Das Problem ist ein bisschen schwer zu erklären und ich habe es sicherlich nicht perfekt erläutert.

Idee:
1. Es wird immer nur eine ID angeschaut (z.B. nur 36)

2. Für jede einzelne Solicitation (1 bis 10) soll die Rechnung wie folgt stattfinden (exemplarisch für Solicitation 1):
Datum Contribution 1 - Datum Solicitation 1 = ?
Datum Contribution 2 - Datum Solicitation 1 = ?
Datum Contribution 3 - Datum Solicitation 1 = ?
Datum Contribution 4 - Datum Solicitation 1 = ?
Datum Contribution 5 - Datum Solicitation 1 = ?

Datum Contribution 6 - Datum Solicitation 1 = ?

Datum Contribution 7 - Datum Solicitation 1 = ?
Datum Contribution 8 - Datum Solicitation 1 = ?


Datum Contribution 9 - Datum Solicitation 1 = ?
Datum Contribution 10 - Datum Solicitation 1 = ?



3. Sollte eine dieser 10 Kalkulationen einen wert zwischen (inklusive) 0 und 14 ergeben, dann soll für die Zeile der Solicitation 1 eine "1" erscheinen, ansonsten soll eine 0 erscheinen



Somit hat man pro Solicitation 10 Subtraktionen (insgesammt also 100, da es 10 Solicitations gibt).



Sobald eine neue ID anfängt soll die Funktion das erkennen sich so umstellen, dass sie die gleichen Schritte NUR innerhalb der neuen ID durchführt.



Beste Grüße

Bo
Antworten Top
#7
L3[:L470002]: =MAX(--(ABS(K3-INDEX(C:C;KÜRZEN((ZEILE(K3)-3)/10)*10+ZEILE($3:$12))-7)<8)) ... falls richtig verstanden.
Antworten Top
#8
Hi LCohen,

vielen Dank, die Formel finde ich echt interessant.
Für die Zeilen 3 bis 12 liefert sie auch die richtigen Ergebnisse, auch wenn ich ehrlich gestehen muss, dass ich die Formel nicht ganz verstehe.
Allerdings springt ab Zeile 13 dann das horizontale Array nicht auf die nächsten 10 Zeilen (13 bis 22) um, da "Zeile($3:$12)" fixiert ist.

Dadurch bezieht sich die Formel dann ab Zeile 13 weiterhin auf die erste ID (36) -> Zeile 3-12 obwohl sie sich auf ID (40) -> Zeile 13-22 beziehen müsste.
Es ist wichtig, dass sie so um 10er schritte umspringt, da das Datenset 470.000+ Zeilen hat. Wäre es eine kleine Datenmenge könnte ich es manuell anpassen, hier geht es aber nicht.

Könnte man diese Formel so ändern, dass sie z.B. erkennt wenn die ID umspringt (alternativ ginge es auch wenn sie erkennt, dass in der letzten Zeile (z.B. 12) eine 10 bei Contribution stand und in der aktuellen Zeile (Zeile 13) eine 1 bei Contribution steht? Daraufhin dann diese Zeile ($3:$12) auf Zeile (13:22), nach 10 weiteren Zeilen dann auf Zeile(33:32) usw. Dass sich dieses Array immer um 10 Zeilen verschiebt sobald eine neue ID beginnt.

Ich danke euch vielmals für die Hilfe!

Beste Grüße
Bo
Antworten Top
#9
(06.12.2020, 01:59)_Bo_ schrieb: Allerdings springt ab Zeile 13 dann das horizontale Array nicht auf die nächsten 10 Zeilen (13 bis 22) um, da "Zeile($3:$12)" fixiert ist.

Tja ... dann hast Du KÜRZEN() nicht verstanden. Behaupte doch nicht einfach, dass das nicht auf die nächsten 10 Zeilen springt. Sondern teste korrekt!
Antworten Top
#10
Hi LCohen,

dass ich die Formel nicht ganz verstehe stimmt, dennoch habe ich mein bestes versucht um sie richtig zu testen.
Sobald ich die Formel nach unten ziehe, weiter als Zeile 12, und dann z.B. in Zeile 13 auf F2 drücke, sehe ich, dass sich die Formel auf die falschen Zeilen bezieht und nicht umspringt.
Ich habe auch einige Datumsangaben in den Zeilen >=13 geändert, um zu sehen ob die Formel dann weiterhin richtig rechnet und das war nicht der Fall. Darauf beruht meine Aussage, dass sie meiner Meinung nach nicht auf die nächste umspringt.

Ich danke dir für deine Hilfe!

Beste Grüße
Bo
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste