Ich bin schon die ganze Zeit am grübeln aber ich komme nicht weiter. Ich hoffe ihr habt ein vorschlag der bei mir, den "Internen Schalter" umlegt und es endlich "Klick" macht.
Ich habe eine Klasse geschrieben die von diversen Großlieferanten, über deren Webschnittstellen, deren Lagerbestand abfragt und mir lokal für eine Warenwirtschaft speichert.
Nun ist es so das bei einigen Großlieferanten +30K Artikelbestände vorhanden sind und ich natürlich nicht mein Skript Tag und Nacht laufen lassen möchte, bis er sich durch alle Datensätze gearbeitet hat.
Ich habe schon daran gedacht jedem Produkt eine Art "Punktestand" zu geben, anhand dieser dann entschieden wird, in welchen Intervall der Bestand neu angefragt werden soll. Jeh mehr Punkte desto kleiner die Zeitspanne zum nächsten Abfragen.
Nach dem Beispiel: Artikel A: Bestand 10 Artikel A: Bestand 9 -> Punkt -2 Artikel A: Bestand 11 -> Punkt +1
(fixtiv werte)
Nun stehe ich komplett auf den schlauch und weiß keine andere möglichkeit sowas zu realisieren, bzw ob es sinnvoll ist, mein oben genanten Ansatz realisiert zu bekommen.
Hat wer eine ergänzende Idee oder eine bessere, mir bei meinen Frage zu helfen?
Bietet die Schnittstelle keine Möglichkeit, einen Timestamp mitzugeben, so dass das ERP bereits entscheiden kann, welche Datensätze überhaupt übermittelt werden?
So .. nun ist die 10 hier aber ein fester Wert. Ich würde stattdessen schauen wie häufig ich den Artikel im letzten Monat (oder mehr) bereits bestellt hatte und dadurch ermitteln wie wahrscheinlich es ist das der artikel auch von anderen häufig bestellt wird.
var schwellwert = Math.Max(10,select count(*) from tblBestellungen where ArtikelId = ... and BestellDatum > Now()-30)
Alternativ könnte man das Programm auch die erste Woche durchlaufen lassen und schauen wie oft sich die Liefermenge innerhalb von 7 Tage geändert hat.
Wir haben also 4 Änderungen in 7 Tagen. Das bedeutet des Abrufintervall für diesen Artikel könnte sich auf 7/4 = alle 1,75 Tage belaufen. Das Abrufintertervall würd ich jeden Woche für 1000 Artikel neu berechnen so das du alle 8 Wochen eine Überprüfung des Abrufintervalls hast. Außerdem würd ich eine Neue Überprüfung starten wenn die ArtikelMenge < 5 fällt. Das hat den Vorteil das du dann auch gleich mitbekommst wenn der Artikelbestand aufgefüllt wurde.
Sind jetzt nur ein paar Gedanken ins Unreine gewesen aber das Prinzip könnte man so angehen.
Wahrscheinlichkeit nach Laplace ist definiert als die Anzahl der für ein Ereignis "günstigen" Ergebnisse dividiert durch die Zahl der insgesamt möglichen Ergebnisse. Für den fairen Würfel ist die Wahrscheinlichkeit, eine 6 zu würfeln, also 1 / 6 (ein Sechstel).
Die Wahrscheinlichkeit, ob sich ein Artikelbestand ändert, ist wahrscheinlich an und für sich recht hoch, wenn man bspw. davon ausgeht, dass ein Bestand von 1000 Artikeln um 1 reduziert wird. Die Änderungsrate wäre allerdings marginaler, als wenn ein Bestand von 10 Artikeln um 1 reduziert wird. Daher würde ich in Dein Modell die Änderungsrate (Volatilität) als Gewicht mit einbeziehen, nicht nur die Wahrscheinlichkeit, dass sich überhaupt etwas ändert.
Ich muss zugeben, dass ich Deine Frage noch nicht hundertprozentig erfasst habe: Du willst bei Deiner Abfrage nur die Werte neu holen, die sich der Wahrscheinlichkeit nach häufiger verändern, oder nur die Werte holen, die sich signifikant verändern?
@ Floyd Danke für den Ansatz mein Flipchart des Büros füllt sich. Zusatzdaten wollte ich eig. aus der Berechnung auslassen, da der aufwand dann doch zu groß wird.
Mit deinen Ansatz ist mir gleich was eingefallen
Datenbank Felder:
1. Bestellnr wird im System hinterlegt Dankenbank nach Insert
DB.Nextabfrage ist ein Fixwert zb NOW() + 1 Tag, da noch kein DB.AbfrageRatio Wert zur verfügung steht
2. Parser greift Artikel auf und sieht das NOW() >= DB.Nextabfrage ist und Ruft den Artikelbestand vom Lieferanten ab. Artikelbestand ist nun = 10. => DB.AbfrageRatio wird noch nicht berechnet da der Lieferstatus zuletzte == null ist. => DB.Nextabfrage wieder fixer Wert NOW() + 1 Tag
3. Parser greift Artikel auf weil NOW() >= Nextabfrage
=> DB.Artikelbestand zb. -5 => DB.Änderung =+ 1 => DB.Nextabfrage FIXWERT weil DB.AbfrageRatio == null => + 1 Tag
Das Script sollte dann nach zb 7 Tagen versuchen den Prozentualen Wert zu erstellen.
Ratio = ( DATEDIFFERENZ( NOW(), DB.DateTime der Letzten Änderung Rücksetzens ) / DB.Änderung )
Ist jetzt nur ein Gedankengang der mir nach deinem Post durch den Kopf ging.
______________
@ CRegenschein
Genau dieser Ansatz ist mir auch eingefallen, um das problem mit einzubeziehen könnte man doch Artikelmengen in Gruppen fassen und einen fixen Wert auf den DB.Nextabfrage draufpacken.
Artikelmenge => FixWert 0-10 => + 0Tage 0-50 => + 1Tag 50-500 => +3 Tage 500-1000 => +5 Tage >1000 => +7 Tage
Zu deiner Frage mit welchen Wert ich mir eigentlich holen möchte, würde ich erstmal sagen die Werte die sich der Wahrscheinlichkeit nach häufiger ändern , die andere Variante würde, so glaube ich, nach sich ziehen dass die Artikel häufiger abgefragt werden müssten um genaue Daten zu errechnen.