Mittwoch, 28. Mai 2008

Excel Services im echten Leben

Hier mal ein kurzer Bericht von einer Nutzung der Excel Services im echten Leben, diesem schönen Dienst aus Microsoft Office SharePoint Server (MOSS) Enterprise.

Wir (PSG) nutzen relativ viel SSIS usw. für die Datenbewirtschaftungsprozesse von Data Warehouse Lösungen. Bisher gab es für uns zwei Möglichkeiten Excel Quellen anzubinden: SSIS Connector oder Excel Makros (wenn es mal komplexer wird).

Da wir nun aber in letzter Zeit häufiger mit den Excel Services gearbeitet haben, kamen diese nun auch in einem ETL Prozess zum Einsatz. Wir lesen dort eine große Anzahl von Excel Files ein, welche wiederum recht komplex aufgebaut sind. Bisher hätten wir sowas über einen Crawler in VBA gelöst.

Nun hat mir mein geschätzter Kollege Jan gerade berichtet, dass er mit der Nutzung der Excel Services über die entsprechenden Webservices mit einem kleinen eignen .net Tool einen Geschwindigkeitsgewinn vom Faktor 50 hatte. Also ich bin echt baff! Das ist doch mal ein echter Nutzen für den Kunden!

Freitag, 23. Mai 2008

Ein kleines Beispiel für Sparklines

Hier noch ein Sample für eine Sparkline Grafik (Win/Loss) in einer Tabelle. Dabei werden die Herren hinsichtlich Ihres jeweiligen Erfolges gemessen. Das Chart zeigt die letzten 24 Monate. Bei diesem Beispiel wird deutlich wie leicht sich damit auch Ergebnisse vergleichen lassen. Für den Herrn Müller waren die letzten Monate eher mau, während Herr Meyer einen Run hatte.

image 

In diesem Demo sind die Bitmasks noch von Hand hinterlegt worden. In der nächsten Version kommt dann was mit einer Datenbindung. Entweder ado .net oder gar ado md.net für Analysis Services Cubes, mal schauen wie ich voran komme.

Hier könnt Ihr dieses kleine Demo runterladen. Sind nur zwei Dateien. Die Html Datei muss noch entsprechend angepasst werden für Euren Server, da ist noch mein asterix:81 drin. :o)

Mittwoch, 21. Mai 2008

Sparklines (Win/Loss Grafik)

Hiermit möchte ich mal meine Begeisterung für Sparklines öffentlich machen! Ein großes Danke an Herrn Tufte für diese super Idee!

Wie komme ich nun gerade drauf? Ich bin ja am Vorbereiten für meine SQLDays Vorträge und in diesen wird es auch um Sparklines gehen.

Hier ein erstes Beispiel aus meinem Tool:

image

Cool, was? Das ist mal echte Raketenwissenschaft, oder? :o)

Ok, was ist das..?

Dieser putzige Haufen Pixels ist eine Sparkline Win/Loss Grafik. Grün/Oben für gewonnen und Rot/Unten für verloren. Was lässt sich damit nun ausdrücken? Diese Darstellungsform ist äussert flexibel einsetzbar. Hinter diesen 24 Balken könnten sich zum Beispiel:

  • die letzten 24 Monate im durchwachsenen Leben eines Vertriebsmitarbeiters verstecken. Bei Grün hat er seine Ziele erreicht, bei Rot halt nicht.
  • die letzten 24 Anrufe eines Callcenter Agents. Zeitschriften Abo verkauft oder nicht.
  • die letzten 24 verkauften Reisen im Reisebüro um die Ecke mit bzw. ohne verkaufter Rücktrittsversicherung.

Es kommt halt auf den Kontext an, aber bevor der Analyst im OLAP Client oder auch ein "einfacher" Konsument eines Berichts 17 oder mehr Zahlen vergleichen muss mit Zielen usw., ist so ein "auf-einen-Blick" Ding eine feine Sache.

Wie habe ich das erstellt? Mit ein paar Zeilen asp.net Code, weil das Ziel für die Vorträge sind ja Webclients.

Ich übergebe zwei Parameter:

  • v ist eine Bitmask, jede 1 = Grün, jede 0 = Rot
  • l ist die Anzahl der Blöcke (getestet ist das bis 64 Blöcke)

Die eigentliche Anwendung im Hintergrund muss dann "natürlich" für die jeweilige Berechnung der Bitmask sorgen!

void Page_Load(Object sender, EventArgs e)
{
    int i;
    int l = Convert.ToInt32(Request["l"]);
    Int64 value = Convert.ToInt64(Request["v"]);
    int x;

    Bitmap objBitmap = new Bitmap(5*l+20,30);

    Graphics objGraphic = Graphics.FromImage(objBitmap);
    SolidBrush redBrush   = new SolidBrush(Color.Red);
    SolidBrush greenBrush = new SolidBrush(Color.Green);
    SolidBrush whiteBrush = new SolidBrush(Color.White);

    objGraphic.FillRectangle(whiteBrush, 0, 0, 5*l+20, 30);

    for (i = 0; i < l; ++i)
    {
        x = (int)(value >> i)  & 1;
        if( x == 1)
        objGraphic.FillRectangle(greenBrush, 10 + (i * 5), 10, 4, 7);
        else
        objGraphic.FillRectangle(redBrush, 10 + (i * 5), 18, 4, 7);
    }

    Response.ContentType = "image/jpeg";
    objBitmap.Save (Response.OutputStream, ImageFormat.Jpeg);

}

Dienstag, 20. Mai 2008

Sascha ist Sprecher auf den SQLDays 2008

Ich werde dieses Jahr zwei Sessions auf den SQLDays in München halten! Die SQLDays sind am 28. & 29.10.2008.

Es werden eher Entwickler Sessions sein, aber der eigentliche Kern ist, wie sollte es auch anders sein, sehr Business Intelligence lastig. Es wird darum gehen, wie Unternehmen mit der Microsoft .net Plattform effiziente und dabei schlanke BI Analyse Werkzeuge entwickeln können. Dazu werde ich eine Reihe von Werkzeugen zeigen, welche ich für die Praxis und teilweise auch einfach als Fingerübung, entwickelt habe.

Die Basis für alle Beispiele ist ein installierter SQL Server 2005 Standard Edition. Des Weiteren werden die meisten Beispiele eine Weboberfläche haben. Verwendete Technologien sind dabei asp.net 2.0/3.0/3.5 inklusive der neuen Ajax Möglichkeiten. Für einige Spielereien teste ich gerade Silverlight.

Beispiele werden u.a. sein:

  • ein OLAP Webclient für Analysis Services (MS Ajax macht es möglich)
  • eine flexible Planungslösung
  • ein Webdashboard (noch eines... :o) )
  • (natürlich) Integration in MS Search Server Umgebungen

Des Weiteren "arbeite" ich zur Zeit an einem hauptspeicherbasierten Analysetool, aber mal schauen, ob das bis Oktober auch schon eine vorzeigbare GUI hat.

Würde mich freuen, wenn ich den einen oder anderen in München wiedersehen würde.