Archiv der Kategorie: Allgemein

SSAS Data Mining – Association Rules

Im vorigen Blogeintrag SSAS Data Mining – Clustering wurde die prinzipielle Vorgangsweise mittels SQL Server Analysis Data Mining vorgestellt Auf die Data Mining Ziele und Interpretation der Ergebnisse wurde jedoch nur sporadisch eingegangen. Deshalb wird dieses Mal der Fokus auf die Charakteristiken des Datensatzes, deren Aufbereitung, sowie die Evaluierung der Resultate gelegt.

 

Datensatz

Der zu analysierende Datensatz enthält Zuordnungen von Benutzern zu Gruppen.

SSAS_DM_AR_01_DS

Hier zu erwähnen ist, dass die Gruppenzuordnungen von zwei Systemen mit derselben Benutzerbasis zusammengeführt worden sind. Dementsprechend hoch ist die Anzahl an Gruppen, welche möglicherweise redundant vorhanden sind. Daher ist das Ziel mittels Data Mining zu analysieren, welche Gruppen zusammengeführt werden können. Die Datenstruktur ist jedoch für Data Mining ungeeignet, da die Relationen über mehrere Zeilen verteilt sind. Eine Transformation der Daten in folgende Form ist notwendig.

SSAS_DM_AR_02_DS

Für jeden Benutzer gibt es nur noch einen Eintrag, und jede Gruppe wird als Spalte dargestellt.

SSAS Data Mining – Association Rules weiterlesen

Advertisements

SSAS Data Mining – Clustering

In diesem Blog-Eintrag wird mit Hilfe von SQL Server Analysis Services (SSAS) eine Clustering Aufgabe vorgestellt. Der Fokus wird hier auf das Erstellen eines Modells auf Basis von Beispieldaten sowie die Evaluierung der Tool Funktionalität und Vorgehensweise gesetzt. Auf die detaillierte Interpretation der Daten und Ergebnisse wird verzichtet, da diese den Umfang sprengen würde.

Die Aufgabe besteht darin Muster im Stromverbrauch eines Haushalts zu erkennen. Für dieses Szenario erstellen wir Cluster anhand von Messwerten. Bei SSAS Data Mining stehen dazu zwei, von Microsoft optimierte, Algorithmen zur Verfügung.

  • k-Means
  • EM-Clustering

SSAS Data Mining – Clustering weiterlesen

Power BI for mixed reality

Bei der Recherche nach neuen SQL Server Reporting Features liefert leider auch der offizielle Microsoft Blog wenig Neues. Einzig erwähnenswert ist die Eingliederung des Software-Herstellers Forerunner [1], der neue Möglichkeiten bei der Bereitstellung von Standardberichten bieten soll [2].

Interessanterweise wird in einem Spring ’18 Release Overview von Dynamics 365 – der ERP Software von Microsoft – sehr detailliert auf Power BI Erweiterungen eingegangen. Dies jedoch auch sehr gut versteckt auf S. 252 in einem PDF [3].

Power BI for mixed reality weiterlesen

Microsoft SQL Server Graph Database

Um komplexe Strukturen in einer Datenbank abzubilden, sind eine Vielzahl an Verbindungen notwendig welche mit traditionellen Datenbanksystemen mithilfe von Fremdschlüsseln und Mapping Tabellen oft nur mit großem Aufwand abgebildet werden können. Durch die steigende Komplexität werden dadurch Abfragen sehr umständlich bzw. leidet meist auch die Performance darunter.

Wenn Daten sehr viele Beziehungen untereinander besitzen ist eine Graph Datenbank sehr gut geeignet. Microsoft SQL Server 2017 bietet die Möglichkeit in der gewohnten Datenbankumgebung Daten als Graph abzubilden.

Microsoft SQL Server Graph Database weiterlesen

Automatische Klassifizierung von Servicetickets mittels Natural Language Processing

Rohdaten

Der Datensatz umfasst etwa 30000 Tickets erstellt in einem Zeitraum von 5 Jahren. Ein Ticket wird mittels einer E-Mail erstellt. Jedem Ticket wurde ein Servicetyp zugewiesen, wobei bei ca. 7000 Tickets dieser Servicetyp fehlt. Insgesamt wurden ca. 400 verschiedene Typen verwendet.

Aufbereitung

Eine Klassifizierung mit einer sehr großen Anzahl an verschiedenen Typen ist nicht zielführend. Betrachtet man den Datensatz kann man erkennen, dass einige Servicetypen nur sehr spärlich verwendet wurden. Um die Kategorien einzuschränken, betrachten wir nun nur Typen mit mindestens 200 Einträgen. Dadurch bleiben 17 verschiedene Kategorien bei verbleibenden 22000 Tickets. Ohne die Anzahl der Tickets signifikant zu verringern (ca. 1000 Datensätze) kann so mit einem abgespeckten Klassenspektrum gestartet werden. Als Input wird die E-Mail im Format „<Betreff>: <Inhalt>“ verwendet.

Klassifizierung

LUIS

Zur Analyse wird der Cloud Service von Microsoft Language Understanding Intelligent Service (LUIS) verwendet.

Model

Die Erstellung eines Modells erfolgt mittels Definition von Intents und Entities. Jeder Servicetype wird als Intent abgebildet (siehe Abbildung „Intents“). Als Entities können bei Bedarf beispielsweise Fehlercode oder Personalnummer definiert werden. Auf die genaue Beschreibung zur Erstellung des Modells wird hier nicht eingegangen, da dazu bereits viele Online-Ressourcen verfügbar sind (z.B. https://aischool.microsoft.com/learning-paths/2sBClBrUiwGeeOaAWA2IQ6).

Abbildung_Intents
Intents
Batch Testing Panel

Im Online Portal gibt es die Möglichkeit das trainierte Model zu testen. Für jede Kategorie wird ein Diagramm mit detaillierten Klassifizierungsergebnissen angezeigt (siehe Abbildung „Klassifizierungsergebnis“). Die zugrunde liegenden Testdatensätze können mit einem Klick auf einen bestimmten Datenpunkt bzw. mittels Auswahl von einem der vier Bereiche (TP, FP, FN, TN) angezeigt werden.

Abbildung_Klassifizierungsergebnis
Klassifizierungsergebnis

Weiters werden die Kennzahlen Precision, Recall & F-Measure berechnet.

Limitierungen

  • Maximal 1000 Einträge pro Testdatensatz
  • Maximal 500 Zeichen pro Textinput
  • Maximal 10 Testdatensätze

Evaluierung

Beim Testen des Modells (1000 Einträge) wurden nur 12,9 % aller Einträge richtig klassifiziert. Um die Ursache für dieses schlechte Ergebnis zu finden werden die Ergebnisse im Detail zu betrachten. Hier kann man erkennen, dass einige Servicetypen bereits sehr gut erkannt wurden, andere jedoch extrem schlecht.

Servicetyp Recall
PC 0.03
Schnittstelle Vertriebssystem / ERP System 0.06
Handy 0.06
Laserbeschriftung 0.08
E-Mail (Exchange) 0.09
Telefon (Standgerät) 0.18
DMS 0.30
Drucker (Netzwerk) 0.31
Vertriebssystem 0.34
Notebook 0.43
BI 0.47
Smartphone 0.56
Active Directory 0.59
Druckmanagement 0.62
Telefonanlage 0.62
Office 0.64
ERP System 0.86

Um zu erkennen, welche falschen Kategorien für einen bestimmten Typ am häufigsten zugewiesen wurden, empfiehlt es sich, einzelne Testdatensätze mit jeweils einem Typ zu erstellen.

Dabei lassen sich folgende Erkenntnisse für die problematischen Servicetypen gewinnen:

PC

Dieser Servicetyp ist sehr allgemein, da sowohl Hardware als auch Software (Installationen, Probleme) betroffen sein kann.

Lösungsansatz: Unterteilung in spezifischere Kategorien (z.B. Softwareinstallation, Hardware, etc.)

Schnittstelle Vertriebssystem / ERP System

Fast alle Einträge des Testdatensatzes wurden zu ERP System zugewiesen.

Lösungsansatz: Kategorie entfernen und mit ERP System zusammenführen

Handy

Hier werden die Testtickets vor allem der Kategorie Smartphone zugewiesen. Generell fällt auf, dass es im Bereich Telefonie sehr viele Servicetypen gibt.

Lösungsansatz: Handy, Telefon (Standgerät), Smartphone, Telefonanlage zur Kategorie Telefonie zusammenführen

Laserbeschriftung

Bei vielen Servicetickets handelt es sich um Dateifreigaben und dadurch werden diese der Kategorie Active Directory zugewiesen.

Lösungsansatz: Überarbeitung der Datensatzeinträge und Neuzuweisung zu Active Directory, falls es sich um File/Ordner Freigaben handelt. Dadurch kann sich der Servicetyp Laserbeschriftung um programmspezifische Tickets kümmern.

E-Mail (Exchange)

Hier kommt es unter anderem zu Konflikten mit dem Servicetyp Office, da Outlook in beiden Kategorien sehr häufig erwähnt wird.

Lösungsansatz: Dieses Verhalten ist nur schwer zu vermeiden, da selbst bei manuellem Kategorisieren oft Unklarheiten auftreten. Da ein Fehlkategorisieren jedoch hier unkritisch ist, kann dies so belassen werden.

 

Das Erstellen eines guten Modells für eine Klassifizierung erfordert viel Fingerspitzengefühl. Mithilfe von einem Testdatensatz kann das Modell im Detail untersucht und schrittweise verbessert werden um ein zufriedenstellendes Ergebnis zu erreichen.

Automatisierung

Nachdem das Modell fertiggestellt wurde, kann dieses im Onlineportal als Webservice zu Verfügung gestellt werden. Neue Servicetickets können nun mithilfe eines SSIS Packages automatisch kategorisiert werden. Hierfür wird als erstes ein Datenflusstask erstellt (siehe Abbildung „Datenflusstask“).

Abbildung_Datenflusstask
Datenflusstask

Der Datenfluss setzt sich zusammen aus der Datenquelle mit den neuen Servicetickets, einem Skripttask, welcher den Klassifizierungsservice aufruft, und dem abschließenden Abspeichern der Klassifizierungsergebnisse (siehe Abbildung „Datenfluss“).

Abbildung_Datenfluss
Datenfluss

Im Skripttask werden als Eingangsspalten „Betreff“ und „Inhalt“ des E-Mails verwendet. Als Ausgang wird die vom Webservice mit der höchsten Wahrscheinlichkeit deklarierte Klasse zurückgegeben (siehe Abbildung „Skript“).

Abbildung_Skript
Skript

Um das vom Webservice gelieferte JSON Objekt zu verarbeiten, wurden Hilfsklassen, welche eine äquivalente Struktur aufweisen, angelegt. Dadurch kann das JSON Objekt zu einem C# Objekt deserialisiert werden (siehe Abbildung „Hilfsklassen“).

Abbildung_Hilfsklassen
Hilfsklassen

Der Aufbau der URL für den Aufruf des Webservices kann der API Referenz entnommen werden: https://westus.dev.cognitive.microsoft.com/docs/services/5819c76f40a6350ce09de1ac/operations/5819c77140a63516d81aee78

Zusammenfassung

In diesem Beitrag wurde gezeigt wie mit LUIS und SSIS mit nur wenigen Zeilen Code eine vollständige Automatisierung für die Klassifizierung von Servicetickets realisiert werden kann. LUIS bietet eine Plattform um auch ohne Expertenwissen ein Machine Learning Modell erzeugen zu können, jedoch ist das Ergebnis des Services stark abhängig von einem guten Design des Modells, welches oftmals erst mithilfe eines iterativen Verbesserungsprozesses zum gewünschten Resultat führt.

 

RDLC Reports in Visual Studio 2017

Einleitung

Mit Visual Studio 2017 gibt es viele neue Features, die uns als SW-Entwickler das Leben um ein Vielfaches einfacher gestalten.

Leider wurde die Verwendung von lokalen Reports – sog. RDLC Reports – sehr kompliziert gestaltet.

Damit man trotzdem auch mit VS2017 die gewohnten, sehr guten Featuren von RDLC nutzen kann, folgende Anleitung mit Links auf die offiziellen Microsoft Seiten.

Vorgehensweise

Für die Verwendung von RDLC Reports in Visual Studio 2017 in ASP.NET-Projekten gehen Sie wie folgt vor (eine ähnliche Vorgehensweise gilt auch für die Verwendung von RDLC Reports in Windows-Forms-Projekten):

  1. Schließen Sie alle gerade geöffneten Visual Studio-Fenster
  2. Installieren Sie die Visual Studio-Extension „Microsoft Rdlc Report Designer for Visual Studio“:
    RDLC_MarketPlaceDownload-Link:
    https://marketplace.visualstudio.com/items?itemName=ProBITools.MicrosoftRdlcReportDesignerforVisualStudio-18001
  3. Installieren Sie die Visual Studio-Extension “Microsoft Reports for Visual Studio”:
    RDLC_MarketPlace2
    Download-Link:
    https://marketplace.visualstudio.com/items?itemName=ProBITools.MicrosoftReportProjectsforVisualStudio

    Anmerkung:
    Falls die Installation der heruntergeladenen vsix-Dateien (Microsoft.RdlcDesigner.vsix und Microsoft.DataTools.ReportingServices.vsix) nicht funktioniert, können die Extensions auch direkt in Visual Studio über Tools > Extensions and Updates installiert werden:
    RDLC_Visual_Studio_Extensions
  4. Starten Sie Visual Studio und erstellen Sie eine ASP.NET Web Application:
    RDLC_Projektsetup_1

    RDLC_Projektsetup_2
    Alternativ dazu können Sie an einem bestehenden Projekt vom Typ ASP.NET Web Application weiterarbeiten.

  5. Fügen Sie das NuGet-Package „Microsoft.ReportingServices.ReportViewerControl.WebForms“ hinzu (aktuellste Version zum Zeitpunkt der Erstellung des Blogeintrags: Version 140.1000.523 vom 6. November 2017):
    RDLC_NuGet_1

    RDLC_NuGet_2

    RDLC_NuGet_3

    RDLC_NuGet_4
    Im Anschluss an die Installation des NuGet-Packages öffnet sich die Microsoft-Informationsseite “Get started with RVC – Next steps”:
    http://htmlpreview.github.io/?https://github.com/Microsoft/Reporting-Services/blob/master/Docs_14_0/Get-Started-With-RVC.html

  6. Erstellen Sie einen neuen Report:
    • Im Dialog “Add New Item” (Projekt > Add > New Item…) sehen Sie nun unter Visual C# die beiden Einträge “Report” und “Report Wizard”. Wählen Sie “Report” und drücken Sie den Add-Button:
      RDLC_Add_New_Report
    • Bestätigen Sie den Dialog, der nach dem Hinzufügen erscheint:
      RDLC_Add_New_Report_Warning
      Hinweis: Jede weitere Report-Datei können Sie nun über das Projektmenü Add > Report hinzufügen:
      RDLC_Add_New_Report_Shortcut
  7. Befüllen Sie den Report:
    • Öffnen Sie die Toolbox und fügen Sie die gewünschten Report Items hinzu, z.B. ein Table-Objekt:
      RDLC_Add_Report_Items
    • Nach dem Hinzufügen müssen Sie das DataSet konfigurieren und dafür zuerst eine Datenverbindung zu einer Datenbank hinzufügen sowie die gewünschten Datenbank-Objekte auswählen:
      RDLC_Add_Connection_1

      RDLC_Add_Connection_2

      RDLC_Add_Connection_3

      Wählen Sie die gewünschten Datenbank-Objekte aus:
      RDLC_Add_Database_Objects

      Bestätigen Sie den finalen Dialog mit OK:
      RDLC_Add_Database_Objects_Final

    • Wechseln Sie von der Toolbox zum Fenster “Report Data” und fügen Sie die gewünschten Reportdaten zum Report hinzu (Beispiel: befüllen Sie die Tabelle mittels Drag&Drop mit den Daten aus dem Bereich “Report Data”):
      RDLC_Add_Report_Data
  8. Erstellen Sie eine neue WebForm und fügen Sie den erstellten Report zum Formular hinzu (Project > Add > WebForm):
    • Wechseln Sie auf die Designansicht
    • Fügen Sie aus der Toolbox den ScriptManager hinzu (Toolbox > AJAX Extensions > ScriptManager):
      RDLC_Add_Script_Manager
    • Fügen Sie aus der Toolbox den ReportViewer hinzu und ändern Sie ggf. seine Größe:
      RDLC_Add_Report_Viewer
      Falls dieser nicht vorhanden ist, gehen sie wie folgt vor:

      1. Toolbox > General > Choose Items…
      2. Browse: [Solution-Ordner]\packages\Microsoft.ReportingServices.ReportViewerControl.WebForms.140.1000.523\lib\net40\Microsoft.ReportViewer.WebForms.dll auswählen:
        RDLC_Add_Webform_Control
    • Im ReportViewer unter „Choose Report“ den angelegten Report (*.rdlc-Datei) auswählen:
      RDLC_Choose_Report
    • Testen Sie die erstellte WebForm und den hinzugefügten Report mittels IIS Express durch Auswahl des gewünschten Browsers und Drücken des Play-Buttons:
      RDLC_Select_Browser

      RDLC_Test_in_Browser

BI: Table-Switching bei High-Availability Staging/Reporting Lösungen

In manchen Szenarien ist eine klassische ETL-Lösung mit mehreren Staging/Harmonisierungs-Ebenen nicht realisierbar.

Häufig ist der Grund dafür der Wunsch nach sehr kurzen Latenzzeiten: Damit ist jene Verzögerungszeit gemeint, um Daten vom Vorsystem ins analytische Reporting zu transferieren.

Bei einem Full-Load werden aber die Daten vorher komplett aus der Zieltabelle gelöscht, um diese danach mit den neuesten Daten aus dem Vorsystem erneut zu befüllen.

Die Latenzzeit zwischen Löschen und fertiger Befüllung ist für das Reporting leider problematisch, da keine Daten verfügbar sind.

Um diese Anforderung so gut wie möglich zu bedienen, kommt die „Table-Switching“-ETL-Methode zum Einsatz.

Die Eckpunkte der Lösung:

  • Es gibt für jede Reporting-Tabelle zwei Tabellen:
    • Die originale Tabelle (data.Table), auf die das Reporting abzielt
    • Die Input-Layer-Tabelle (data.Table_in), in welche die Daten transferiert werden
  • Der Full-Load aus dem Vorsystem erfolgt immer in die Input-Layer-Tabelle
  • Wenn alle Input-Layer-Tabellen befüllt sind, dann werden diese 3-stufig auf die originale Tabelle mit dem T-SQL Statement „sp_rename“ umbenannt
    • Zuerst die Input-Layer-Tabelle (data.Table_in) in eine temporäre Tabelle (data.Table_tmp)
    • Dann die originale Tabelle (data.Table) zu (data.Table_in)
    • Dann die temporäre Tabelle wieder zur originalen Tabelle
  • Das Umbenennen geht innerhalb von Millisekunden, wodurch sichergestellt ist, dass nahezu immer Daten für das Reporting vorhanden sind
  • Um das Befüllen noch schneller zu gestalten, können auch Indices behandelt werden
    • Vor dem Laden in die Input-Tabellen werden dort die Indices deaktiviert (alter index idx on data.table disabled)
    • Wenn alle Umbenennungen fertig sind, werden die Indices auf den originalen Tabellen wieder reaktiviert (alter index idx on data.table rebuild)