MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 16.09.2017, 12:50   #1
Ekimflow
MOF User
MOF User
Standard SQL - Abfrage: Folgender Datensatz im Star Schema

Hallo liebe MOF-User,

Ich habe da mal ein recht spezielles Problem.
Vorweg möchte ich anmerken, daß mir durchaus bewusst ist, dass Access für mein Vorhaben nicht die beste Lösung darstellt, jedoch ist die nur mehr oder weniger ein Machbarkeitstest.

Ein Analyse Tool soll möglichst in realtime Daten erfassen und auswerten.
Die Daten sind in einem Star Schema in zeitlich korrekter Reihenfolge abgelegt.

Nun geht es dabei der Analyse der Daten nicht nur um die üblichen quantitiven Auswertungen wie sie auch Pivot Tabellen anbieten.

Bei den Daten handelt es sich um Verhaltensmuster und diese Muster sollen analysiert werden.
Für die Analyse ist es somit weniger wichtig, wie oft und wann Enscheidung 1 eingetreten ist. Vielmehr ist gefragt, welche weiteren Entscheidungen auf Entscheidungen folgten und im welchen Verhältnis.

Ich hoffe ihr konntet mir soweit folgen.

Über SQL die Daten zu Entscheidung 1 zu finden ist kein Ding, wie komme ich nur an die folgenden Datensätze heran?

Mir fällt zu Zeit als Lösung nur ein, den Datensätzen Flags(Feld) zu ihren jeweiligen Vorgänger mitzugeben, was die Länge der Muster auf die Anzahl der Flags begrenzen würde.

Hoffe ihr könnte mir bei diesem Porblem weiterhelfen.

__________________

Gruss
Mike
Ekimflow ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.09.2017, 16:48   #2
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

wie komme ich nur an die folgenden Datensätze heran?

In einer Abfrage so etwas verwenden wie ...
- ID = betrachtete ID + 1
- kleinster Timestamp, der größer als der betrachtete Timestamp ist

Damit erfasst man aber nur einen Nachfolger, was zur nebulösen Aussage von "Länge der Muster" nur eine Teillösung bedeuten dürfte.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (16.09.2017 um 17:07 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.09.2017, 13:07   #3
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Vielmehr ist gefragt, welche weiteren Entscheidungen auf Entscheidungen folgten und im welchen Verhältnis.

Das könntest Du ausführlicher darstellen.

Ich habe zwar einen möglichen Ansatz auf eine Musterfolge im Kopf, aber wenn man nicht weiß, wioe und wonach anschließend konkret ausgewertet wird, ist das möglicherweise auch ein Fehlweg.

Also: Aufgabe ist in Umrissen verständlich. Konkrete Vorschläge können sich aber nur an konkreten Vorgaben (Ausgangstabelle, Zielsituation) ergeben.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.09.2017, 14:38   #4
Ekimflow
Threadstarter Threadstarter
MOF User
MOF User
Standard

Entschuldige Bitte, wenn ich mich recht allgemein ausgedrückt habe und auch im folgenden keine "Details" nennen kann.

Ich rede im weiteren mal von "Userverhalten" welches analysiert werden soll.
Es gibt eine bestimmte kategorisierte Anzahl an "Aktionen".
Diese Aktionen können in beliebiger Reihenfolge ausgeführt und auch wiederholt werden.

Bsp:

Code:

Schritt -  Aktion
01 - Aktion A
02 - Aktion C
03 - Aktion D
04 - Aktion A
05 - Aktion D
06 - Aktion A
07 - Aktion C
08 - Aktion B
09 - Aktion A
Auswertend soll in Realtime ermittelt werden, was als nächstes auf Schritt 09 folgen würde.

Nach dem Beispiel würde mir
Aktion C zu 66%
Aktion D zu 33%
vorhergesagt werden, wenn es sich nur um den unmittelbar nächsten Schritt handelt.

Weiter könnte man aber auch vorhersagen:
Aktion C - Aktion B zu 33 %
Aktion C - Aktion D zu 33 %
Aktion D - Aktion A zu 33 %

Ich hoffe dies reicht aus, um zu verdeutlichen, wo die Reise hingehen soll.

Geplant ist eigentlich eine dynamisch "Tiefe" der Vorhersage.
Zu diesem dynamischen Ansatz finden wir derzeit keine Lösung.

Als "Workaround" haben wir uns nun darauf verständigt, die Tiefe zu begrenzen, und jeder neuen Aktion (Datensatz) einen String mit seinen Vorgängern mitzugeben.

Code:

Schritt -  Aktion - String
01 - Aktion A - Null
02 - Aktion C - A
03 - Aktion D - AC
04 - Aktion A - ACD
05 - Aktion D - CDA
06 - Aktion A - DAD
07 - Aktion C - ADA
08 - Aktion B - DAC
09 - Aktion A - ACB
Das scheint inzwischen eine recht annehmbare Lösung zu sein.
Bin gespannt, was Dir als Lösung zu diesem Problem noch einfallen würde und ob es uns mit den dynamischen Ansatz weiterhelfen würde.

__________________

Gruss
Mike
Ekimflow ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.09.2017, 19:07   #5
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Liesse sich das nicht mit einem FK auf den Vorgänger lösen?

__________________

--
S.M.I.²L.E.
Beaker s.a. ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.09.2017, 22:15   #6
ebs17
MOF Guru
MOF Guru
Standard

An eine Zusammensetzung von Schlüsseln (Aktion wäre im folgenden in meinem Verständnis eine ID auf Aktion) hatte ich auch gedacht:
Code:

SELECT 
   D.Aktion, 
   ADOConcatColumn("SELECT Y.Aktion FROM (SELECT TOP 4 X.Aktion, X.Schritt FROM Datentabelle AS X WHERE X.Schritt < " & D.Schritt & " ORDER BY X.Schritt DESC) AS Y ORDER BY Y.Schritt", ";") AS Vorgänger 
FROM 
   Datentabelle AS D
Code:

Public Function ADOConcatColumn(ByVal strSQL As String, _
                                Optional ByVal strSeparator As String = ", ") _
                                As Variant

   Const adOpenForwardOnly = 0
   Const adCmdText = 1
   Const adLockReadOnly = 1
   Const adUseClient = 3


   Static rs As Object   'ADODB.Recordset nur 1x erstellen

   On Error GoTo x

   If rs Is Nothing Then
      Set rs = CreateObject("ADODB.Recordset")
      rs.ActiveConnection = CurrentProject.Connection
      rs.CursorLocation = adUseClient
   End If

   rs.Open strSQL, , adOpenForwardOnly, adLockReadOnly, adCmdText

   If Not (rs.EOF And rs.BOF) Then
      ADOConcatColumn = rs.GetString(, , , strSeparator)
      ADOConcatColumn = Left$(ADOConcatColumn, Len(ADOConcatColumn) - Len(strSeparator))
   End If

   rs.Close
   Exit Function

x:
   ADOConcatColumn = CVErr(6001)
End Function
Über den TOP-X-Wert kann man die Vorgängeranzahl variabel einstellen.

Für die prozentuale Auswertung erhält man den Grundwert, wenn man über Vorgänger aus dem Ergebnis gruppiert und die Anzahl bestimmt, für den Prozentwert wäre zusätzlich die Aktion in die Gruppierung einzubeziehen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.09.2017, 22:21   #7
Ekimflow
Threadstarter Threadstarter
MOF User
MOF User
Standard

Danke Eberhard,

Wir werden Deinen Vorschlag mal einbauen und ausgiebig testen.
Meine Kollegen glauben aber inzwischen, dass der Übergabestring eine bessere Performance liefern wird, als mehrere verschachtelte Abfragen.

Ich bin mir aber noch nicht ganz so sicher, ob nicht die string operations wiederum zu einem Performance Verlust führen wird.

Ich melde mich die Tage nochmal zurück.

__________________

Gruss
Mike
Ekimflow ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.09.2017, 22:52   #8
ebs17
MOF Guru
MOF Guru
Standard

Die Ergebnisse der Abfragen (von TOP 1 bis bspw. TOP 20) würde ich in eine Tabelle eines temporären Backends schreiben und dann nachindizieren. Damit hätte mn die Basis für performante Gruppierungen.

Selbstredend würde ich mir erst Gedanken über Wege machen, wenn man die Aufgaben konkret kennt. Bei einer groben Modelliereung von Daten so wie hier kann man sinnvollerweise nur über Ansätze nachdenken.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.