Sunday 16 July 2017

Moving Average Power Bi


Die meisten Leute sind mit der Phrase vertraut, quotthis wird zwei Vögel mit einem Steinbruch töten. Wenn es nicht geht, bezieht sich die Phase auf einen Ansatz, der zwei Ziele in einer Handlung anspricht. (Leider ist der Ausdruck selbst ziemlich unangenehm, da die meisten von uns es nicht wollen, Steine ​​auf unschuldige Tiere zu werfen) Heute I39m, um einige Grundlagen auf zwei großartige Features in SQL Server zu decken: der Columnstore-Index (nur in SQL Server Enterprise verfügbar) und Der SQL Query Store. Microsoft hat tatsächlich den Columnstore-Index in SQL 2012 Enterprise implementiert, obwohl sie es in den letzten beiden Releases von SQL Server erweitert haben. Microsoft hat den Query Store in SQL Server 2016 eingeführt. Also, was sind diese Features und warum sind sie wichtig Nun, ich habe eine Demo, die beide Features vorstellen und zeigen, wie sie uns helfen können. Bevor ich noch weiter gehe, decke ich auch diese (und andere SQL 2016 Features) in meinem CODE Magazin Artikel über neue Features SQL 2016. Als Grundeinführung kann der Columnstore Index dazu beitragen, Abfragen zu beschleunigen, die über große Datenmengen scanaggregieren und Der Abfrage-Store verfolgt Abfragen Ausführungen, Ausführungspläne und Laufzeitstatistiken, die Sie normalerweise manuell erfassen müssen. Vertrauen Sie mir, wenn ich sage, das sind tolle Features. Für diese Demo werde ich die Microsoft Contoso Retail Data Warehouse Demo Datenbank verwenden. Lose gesprochen, Contoso DW ist wie Quota wirklich große AdventureWorksquot, mit Tischen mit Millionen von Zeilen. (Die größte AdventureWorks-Tabelle enthält höchstens 100.000 Zeilen). Sie können die Contoso DW Datenbank hier herunterladen: microsoften-usdownloaddetails. aspxid18279. Contoso DW arbeitet sehr gut, wenn man die Leistung bei Abfragen gegen größere Tische testen möchte. Contoso DW enthält eine Standard-Data Warehouse Fact-Tabelle namens FactOnLineSales mit 12,6 Millionen Zeilen. Das ist sicherlich nicht der größte Data-Warehouse-Tisch der Welt, aber es geht auch nicht um Kinder. Angenommen, ich möchte die Produktverkäufe für 2009 zusammenfassen und die Produkte bewerten. Ich könnte die Faktentabelle abfragen und sich der Produktdimensionstabelle anschließen und eine RANK-Funktion verwenden, wie folgt: Hier ist ein Teilergebnissatz der Top 10 Zeilen, bei Total Sales. Auf meinem Laptop (i7, 16 GB RAM), nimmt die Abfrage überall von 3-4 Sekunden zu laufen. Das scheint vielleicht nicht wie das Ende der Welt zu sein, aber manche Benutzer könnten nahezu sofortige Ergebnisse erwarten (wie du bei der Verwendung von Excel gegen einen OLAP-Cube nahezu sofortige Ergebnisse sehen kannst). Der einzige Index, den ich derzeit auf dieser Tabelle habe, ist ein gruppierter Index auf einem Umsatzschlüssel. Wenn ich den Ausführungsplan betrachte, macht SQL Server einen Vorschlag, einen Deckelindex der Tabelle hinzuzufügen: Nun, nur weil SQL Server einen Index vorschlägt, bedeutet das nicht, dass du blindlings Indizes für jede quotmissing Indexquot-Nachricht erstellen solltest. In diesem Fall erkennt SQL Server jedoch, dass wir basierend auf dem Jahr filtern und den Produktschlüssel und den Verkaufsbetrag verwenden. So schlägt SQL Server einen Deckungsindex vor, mit dem DateKey als Indexschlüsselfeld. Der Grund, warum wir dies einen quotcoveringquot-Index nennen, liegt daran, dass SQL Server die Nicht-Schlüsselfelder quittiert, die wir in der Abfrage verwendet haben, für den Ridequot. Auf diese Weise muss SQL Server nicht die Tabelle oder den gruppierten Index verwenden, die Datenbank-Datenbank kann einfach den Deckungsindex für die Abfrage verwenden. Covering-Indizes sind in bestimmten Data-Warehousing und Reporting-Datenbank-Szenarien beliebt, obwohl sie zu einem Preis der Datenbank-Engine beibehalten sie kommen. Anmerkung: Die Bedeckungsindizes sind schon lange her, also habe ich noch den Columnstore-Index und den Query Store abgedeckt. Also, ich werde den Deckungsindex hinzufügen: Wenn ich die gleiche Abfrage erneut ausführen würde, lief ich vor kurzem (derjenige, der die Verkaufsmenge für jedes Produkt aggregierte), die Abfrage scheint manchmal um eine Sekunde schneller zu laufen, und ich bekomme ein Ein anderer Ausführungsplan, der einen Index-Suchvorgang anstelle eines Index-Scans verwendet (mit dem Datumsschlüssel auf dem Deckungsindex, um den Umsatz für 2009 abzurufen). Also, vor dem Columnstore Index, könnte dies eine Möglichkeit sein, diese Abfrage in viel älteren Versionen von SQL Server zu optimieren. Es läuft ein wenig schneller als das erste, und ich bekomme einen Ausführungsplan mit einem Index Seek anstelle eines Index-Scans. Allerdings gibt es einige Probleme: Die beiden Ausführungsoperatoren quotIndex Seekquot und quotHash Match (Aggregate) beide betreiben im Wesentlichen Zitat durch rowquot. Stellen Sie sich das in einem Tisch mit Hunderten von Millionen von Reihen vor. Verwandte, über den Inhalt einer Faktentabelle nachdenken: In diesem Fall kann ein einziger Datumsschlüsselwert und ein einzelner Produktschlüsselwert über Hunderte von Tausenden von Zeilen wiederholt werden (erinnern Sie sich, dass die Faktentabelle auch Schlüssel für Geographie, Promotion, Verkäufer hat , Etc.) Also, wenn die quotIndex Seekquot und quotHash Matchquot Zeile für Zeile arbeiten, tun sie dies über Werte, die möglicherweise über viele andere Zeilen wiederholt werden. Dies ist normalerweise, wo I39d zu dem SQL Server Columnstore Index, der ein Szenario bietet, um die Leistung dieser Abfrage auf erstaunliche Weise zu verbessern. Aber bevor ich das mache, gehen wir zurück in die Zeit. Let39s gehen zurück auf das Jahr 2010, als Microsoft ein Add-In für Excel als PowerPivot bekannt. Viele Leute erinnern sich wahrscheinlich daran, Demos von PowerPivot für Excel zu sehen, wo ein Benutzer Millionen von Zeilen aus einer externen Datenquelle in Excel lesen konnte. PowerPivot würde die Daten komprimieren und eine Engine zur Verfügung stellen, um Pivot-Tabellen und Pivot-Charts zu erstellen, die mit erstaunlichen Geschwindigkeiten gegen die komprimierten Daten durchgeführt wurden. PowerPivot verwendete eine In-Memory-Technologie, die Microsoft als quotVertiPaqquot bezeichnete. Diese In-Memory-Technologie in PowerPivot würde grundsätzlich doppelte Business Keyforeign Schlüsselwerte und komprimieren sie auf einen einzigen Vektor. Die In-Memory-Technologie würde diese Werte auch parallel in Blöcken von mehreren hundert zu einer Zeit scanaggregieren. Die Quintessenz ist, dass Microsoft eine große Menge an Leistungsverbesserungen in die VertiPaq In-Memory-Funktion für uns zu verwenden, direkt aus der sprichwörtlichen Box gebacken. Warum gehe ich diesen kleinen Spaziergang in die Erinnerungsspur Weil in SQL Server 2012 Microsoft eine der wichtigsten Features in der Geschichte ihrer Datenbank-Engine implementiert hat: den Columnstore-Index. Der Index ist wirklich ein Index im Namen nur: Es ist ein Weg, um eine SQL Server-Tabelle und erstellen Sie eine komprimierte, in-Memory-Spalte Store, die doppelte Fremdschlüssel Werte bis hin zu einzelnen Vektor-Werte komprimiert. Microsoft hat auch einen neuen Pufferpool erstellt, um diese komprimierten Vektorwerte parallel zu lesen und so das Potenzial für große Leistungssteigerungen zu schaffen. Also, ich werde einen Spaltenladen-Index auf dem Tisch erstellen und ich sehe, wie viel besser (und effizienter) die Abfrage läuft, im Vergleich zu der Abfrage, die gegen den Deckungsindex läuft. Also schaffe ich eine doppelte Kopie von FactOnlineSales (I39ll nennen es FactOnlineSalesDetailNCCS), und ich erstelle einen columnstore Index auf der duplizierten Tabelle, wie ich mich mit der ursprünglichen Tabelle und dem Cover-Index in irgendeiner Weise interferiere. Als nächstes erstelle ich einen columnstore-Index auf der neuen Tabelle: Notiere mehrere Dinge: I39ve spezifiziert mehrere Fremdschlüsselspalten sowie den Verkaufsbetrag. Denken Sie daran, dass ein columnstore-Index nicht wie ein traditioneller row-store-Index ist. Es gibt kein quotkeyquot. Wir geben einfach an, welche Spalten SQL Server komprimieren und in eine Spalte im Speicher speichern soll. Um die Analogie von PowerPivot für Excel zu verwenden, wenn wir einen columnstore-Index erstellen, erzählen wir SQL Server im Wesentlichen, dasselbe, was PowerPivot tat, als wir 20 Millionen Zeilen in Excel importierten, mit PowerPivot So, I39ll die Abfrage erneut ausführen, diesmal mit Die duplizierte FactOnlineSalesDetailNCCS-Tabelle, die den columnstore-Index enthält. Diese Abfrage läuft sofort in weniger als einer Sekunde. Und ich kann auch sagen, dass selbst wenn der Tisch Hunderte von Millionen von Reihen hatte, würde es immer noch auf dem sprichwörtlichen Quatschen eines Wimperns laufen. Wir könnten uns den Ausführungsplan anschauen (und in wenigen Augenblicken werden wir), aber jetzt ist es Zeit, die Query Store zu decken. Stellen Sie sich für einen Moment vor, dass wir beide Fragen über Nacht geführt haben: die Abfrage, die die reguläre FactOnlineSales-Tabelle (mit dem Cover-Index) und dann die Abfrage verwendet hat, die die doppelte Tabelle mit dem Columnstore-Index verwendet hat. Wenn wir uns am nächsten Morgen anmelden, sehen wir gern den Ausführungsplan für beide Abfragen, wie sie stattgefunden haben, sowie die Ausführungsstatistik. Mit anderen Worten, wir sehen gern die gleichen Statistiken, die wir sehen können, ob wir beide Abfragen interaktiv in SQL Management Studio geleitet haben, in TIME und IO Statistics gedreht und den Ausführungsplan direkt nach dem Ausführen der Abfrage angesehen haben. Nun, das, was der Abfrage-Shop ermöglicht es uns, können wir einschalten (aktivieren) Query Store für eine Datenbank, die SQL Server auslösen wird, um Abfrageausführung zu speichern und Planstatistiken zu speichern, damit wir sie später sehen können. Also, um den Query Store auf der Contoso-Datenbank mit dem folgenden Befehl zu aktivieren (und I39ll auch aus irgendeinem Caching herauszuholen): Dann kommst du die beiden Abfragen aus (und quotpretendquot, dass ich sie vor Stunden lief): Jetzt lassen wir sie vor, dass sie Stunden laufen ließen vor. Nach dem, was ich sagte, wird der Query Store die Ausführungsstatistiken erfassen. Also, wie sehe ich sie Glücklicherweise ist das ganz einfach. Wenn ich die Contoso DW Datenbank erweitere, sehe ich einen Query Store Ordner. Der Query Store hat enorme Funktionalität und ich versuche, viel davon in den nachfolgenden Blogeinträgen zu decken. Aber für jetzt möchte ich die Ausführungsstatistiken auf die beiden Abfragen anzeigen und die Ausführungsoperatoren für den Spaltenstartindex genau untersuchen. So klicken Sie mit der rechten Maustaste auf die Top Resource Consuming Queries und führen diese Option aus. Das gibt mir ein Diagramm wie das unten, wo ich die Ausführungsdauer (in Millisekunden) für alle abgefragten Abfragen sehen kann. In diesem Fall war Abfrage 1 die Abfrage gegen die ursprüngliche Tabelle mit dem Deckungsindex, und Query 2 war gegen die Tabelle mit dem Spaltenstartindex. Die Zahlen, die der Säulenständerindex liegen, übertrafen den ursprünglichen Tischdeckungsindex um einen Faktor von fast 7 zu 1. Ich kann die Metrik ändern, um den Speicherverbrauch zu betrachten. In diesem Fall ist zu beachten, dass die Abfrage 2 (die Spaltenstart-Indexabfrage) weit mehr Speicher verwendet hat. Dies zeigt deutlich, warum der columnstore-Index die quotin-memoryquot-Technologie darstellt. SQL Server lädt den gesamten columnstore-Index im Speicher und verwendet einen völlig anderen Pufferpool mit erweiterten Ausführungsoperatoren, um den Index zu verarbeiten. OK, also haben wir einige Graphen, um die Ausführungsstatistiken zu sehen, können wir den Ausführungsplan (und Ausführungsoperatoren), die mit jeder Ausführung verknüpft sind, sehen. Ja, wir können Wenn Sie auf die vertikale Leiste für die Abfrage klicken, die den Spaltenladenindex verwendet hat, sehen Sie die Ausführung Plan unten Das erste, was wir sehen, ist, dass SQL Server eine Spalte Stores Index-Scan durchgeführt, und das stellte fast 100 der Kosten der Abfrage. Sie könnten sagen, quotWait eine Minute, die erste Abfrage verwendet einen Deckungsindex und führte einen Index suchen, so wie kann ein Spaltenstart-Index-Scan schneller sein. Das ist eine legitime Frage, und zum Glück gibt es eine Antwort. Sogar wenn die erste Abfrage eine Indexsuche durchgeführt hat, hat sie immer noch einen Satz durch rowquot ausgeführt. Wenn ich die Maus über den Spaltenstart-Index-Scan-Operator stecke, sehe ich eine Tooltip (wie die unten unten) mit einer wichtigen Einstellung: Der Execution Mode ist BATCH (im Gegensatz zu ROW, was wir mit der ersten Abfrage mit dem Deckungsindex). Dieser BATCH-Modus sagt uns, dass SQL Server die komprimierten Vektoren (für alle Fremdschlüsselwerte, die dupliziert werden, wie zB Produktschlüssel und Datumsschlüssel) in Chargen von fast 1.000 parallel verarbeiten. So ist SQL Server immer noch in der Lage, den columnstore Index viel effizienter zu verarbeiten. Darüber hinaus, wenn ich die Maus über die Hash Match (Aggregate) Aufgabe platziere, sehe ich auch, dass SQL Server aggregiert den columnstore Index mit Batch-Modus (obwohl der Betreiber selbst stellt so ein winziges Prozent der Kosten der Abfrage) Endlich, Sie Könnte gefragt werden, quotOK, so dass SQL Server die Werte in den Daten komprimiert, behandelt die Werte als Vektoren und liest sie in Blöcken von fast tausend Werten parallel, aber meine Abfrage wollte nur Daten für 2009. So ist SQL Server Scannen über die Ganzer Satz von Datenquot Wieder eine gute Frage. Die Antwort ist, quotNot wirklich quot. Glücklicherweise für uns, der neue columnstore Index Puffer Pool führt eine andere Funktion namens quotsegment eliminationquot. Grundsätzlich wird SQL Server die Vektorwerte für die Datumsschlüsselspalte im Spaltenstartindex untersuchen und Segmente eliminieren, die außerhalb des Geltungsbereichs des Jahres 2009 liegen. In den darauffolgenden Blogposten decken Sie den Spaltenstartindex und den Query Store detaillierter ab. Im Wesentlichen, was wir heute hier gesehen haben, ist, dass der Columnstore-Index erheblich beschleunigen kann Abfragen, die über große Datenmengen scanaggregieren, und der Query Store wird Abfrage-Ausführungen erfassen und erlauben uns, Ausführungs - und Leistungsstatistiken später zu untersuchen. Am Ende werden wir gerne eine Ergebnismenge produzieren, die folgendes zeigt. Beachten Sie drei Sachen: Die Spalten verschwinden im Wesentlichen alle möglichen Rückgabegründe, nachdem Sie den Verkaufsbetrag angelegt haben. Die Ergebnismenge enthält Zwischensummen nach Wochenende (Sonntag) Datum über alle Clients (wo der Client NULL ist) Die Ergebnismenge enthält eine Gesamtsumme Zeile (wo der Client und das Datum sind beide NULL) Erstens, bevor ich in das SQL-Ende gelangen, könnten wir die dynamische Pivotmatrix-Fähigkeit in SSRS nutzen. Wir müssten einfach die beiden Ergebnismengen um eine Spalte kombinieren und dann könnten wir die Ergebnisse der SSRS-Matrixsteuerung zuführen, die die Rückgabegründe über die Spaltenachse des Berichts verbreiten wird. Allerdings nutzt nicht jeder SSRS (obwohl die meisten Leute sollten). Aber auch damals müssen die Entwickler die Ergebnismengen in etwas anderes als ein Reporting-Tool verbrauchen. Also für dieses Beispiel gehen wir davon aus, dass wir die Ergebnismenge für eine Web-Raster-Seite generieren wollen und evtl. der Entwickler die Zwischensummen-Zeilen (wo ich einen ResultSetNum-Wert von 2 und 3 habe) ausgeben und sie in ein zusammenfassendes Raster stellen möchte. Also Grundlinie, wir müssen die Ausgabe direkt aus einer gespeicherten Prozedur generieren. Und als eine weitere Wendung nächste Woche könnte es geben Rückkehr X und Y und Z. Also wir don39t wissen, wie viele Rückkehr Gründe dort sein könnte. Wir wollen einfach die Abfrage auf die möglichen unterschiedlichen Werte für Return Reason platzieren. Hier ist, wo die T-SQL PIVOT hat eine Beschränkung müssen wir ihm die möglichen Werte. Da wir wissen, dass bis zur Laufzeit, müssen wir die Abfrage Zeichenfolge dynamisch mit dem dynamischen SQL-Muster zu generieren. Das dynamische SQL-Muster beinhaltet das Erzeugen der Syntax, Stück für Stück, das Speichern in einem String und das Ausführen des Strings am Ende. Dynamic SQL kann schwierig sein, da wir die Syntax in einen String einbetten müssen. Aber in diesem Fall ist es unsere einzige wahre Option, wenn wir eine variable Anzahl von Rückgabegründen behandeln wollen. Ich habe immer herausgefunden, dass der beste Weg, um eine dynamische SQL-Lösung zu schaffen, ist, herauszufinden, was die quittale Quotie-Abfrage am Ende sein würde (in diesem Fall angesichts der Rückkehr Gründe, die wir kennen) und dann Reverse-Engineering es durch Piecing Es zusammen ein Teil zu einer Zeit. Und so ist hier das SQL, das wir brauchen, wenn wir wüssten, dass die Rückkehrgründe (A bis D) statisch waren und sich nicht ändern würden. Die Abfrage führt die folgenden aus: Kombiniert die Daten aus SalesData mit den Daten von ReturnData, wo wir das Wort Sales als Aktionstyp aus der Verkaufstabelle quonarddraht und dann den Rückgabegrund aus den Rückgabedaten in dieselbe ActionType-Spalte verwenden. Das gibt uns eine saubere ActionType Spalte, auf der man sich drehen kann. Wir kombinieren die beiden SELECT-Anweisungen in einen gemeinsamen Tabellenausdruck (CTE), der grundsätzlich eine abgeleitete Tabellenunterabfrage ist, die wir später in der nächsten Anweisung (zu PIVOT) verwenden. Eine PIVOT-Anweisung gegen den CTE, die die Dollars für den Aktionstyp summiert In einem der möglichen Aktionstyp-Werte liegen. Beachten Sie, dass dies die endgültige Ergebnismenge ist. Wir stellen diese in einen CTE, der aus dem ersten CTE liest. Der Grund dafür ist, dass wir am Ende mehrere Gruppierungen machen wollen. Die endgültige SELECT-Anweisung, die von der PIVOTCTE liest und sie mit einer nachfolgenden Abfrage gegen dieselbe PIVOTCTE kombiniert, aber wo wir auch zwei Gruppierungen in der GROUPING SETS-Funktion in SQL 2008 implementieren: GROUPING nach dem Wochenenddatum (dbo. WeekEndingDate) GRUPPE für alle Zeilen () Also, wenn wir mit Sicherheit wüssten, dass wir niemals mehr Rückgaberecht-Codes haben, dann wäre das die Lösung. Allerdings müssen wir andere Ursachencodes berücksichtigen. Also müssen wir diese ganze Abfrage als eine große Zeichenkette generieren, wo wir die möglichen Rückkehrgründe als eine durch Kommas getrennte Liste konstruieren. I39m zeigt den gesamten T-SQL-Code zu generieren (und ausführen) die gewünschte Abfrage. Und dann brechen sie in Teile und erklären jeden Schritt. Also zuerst, hier ist der ganze Code, um dynamisch zu generieren, was ich oben bekommen habe. Es gibt grundsätzlich fünf Schritte, die wir abdecken müssen. Schritt 1 . Wir wissen, dass irgendwo in der Mischung, müssen wir einen String für diese in der Abfrage zu generieren: SalesAmount, Grund A, Grund B, Grund C, Grund D0160016001600160 Was wir tun können, ist ein temporärer gemeinsamer Tabellenausdruck gebaut, der die hart verdrahteten Quoten kombiniert Anzahl der Spalten mit der eindeutigen Liste der möglichen Ursachencodes. Sobald wir das in einem CTE haben, können wir den netten kleinen Trick von FOR XML PATH (3939) benutzen, um diese Zeilen in eine einzelne Saite zu kollabieren, ein Komma vor jeder Zeile zu setzen, die die Abfrage liest und dann STUFF verwenden, um zu ersetzen Die erste Instanz eines Kommas mit einem leeren Raum. Dies ist ein Trick, den Sie in Hunderten von SQL-Blogs finden können. Also dieser erste Teil baut einen String namens ActionString, den wir weiter unten verwenden können. Schritt 2 . Wir wissen auch, dass wir die generierten pivotierten Grundspalten, zusammen mit der Standard-Verkaufsspalte, sortieren möchten. Also brauchen wir dafür einen separaten String, den ich SUMSTRING nenne. Ich benutze einfach den originalen ActionString und schalte dann die äußeren Klammern mit SUM-Syntax und den originalen Klammern wieder auf. Schritt 3: Jetzt beginnt die eigentliche Arbeit. Wenn wir diese Originalabfrage als Modell verwenden, wollen wir die ursprüngliche Abfrage generieren (beginnend mit der UNION der beiden Tabellen), aber das Ersetzen von Referenzen auf verschwenkte Spalten mit den Strings, die wir dynamisch oben erstellt haben. Auch, während nicht unbedingt erforderlich, habe ich auch eine Variable zu einfach jedem Wagen Rücklauf Feed Kombinationen, die wir in die generierte Abfrage (für Lesbarkeit) eingebettet wollen. So konstruieren wir die gesamte Abfrage in eine Variable namens SQLPivotQuery. Schritt 4 . Wir fortsetzen, die Abfrage erneut zu konstruieren und die Syntax zu verknüpfen, die wir mit dem ActionSelectString quothard-wirequot verknüpfen können (die wir dynamisch generiert haben, um alle möglichen Rückgabewerte zu halten) Schritt 5. Schließlich werden wir den letzten Teil der Pivot-Abfrage generieren, der aus dem 2. gemeinsamen Tabellenausdruck (PIVOTCTE, aus dem obigen Modell) liest und das endgültige SELECT aus dem PIVOTCTE liest und es mit einem 2. gelesenen PIVOTCTE kombiniert Implementiere die gruppierungssätze. Schließlich können wir quotexecutequot die Zeichenfolge mit dem SQL-System gespeichert proc spexecuteSQL So hoffentlich können Sie sehen, dass der Prozess, um für diese Art von Aufwand zu bestimmen ist festzustellen, was die endgültige Abfrage wäre, basierend auf Ihrem aktuellen Satz von Daten und Werte (dh gebaut Ein Abfrage-Modell) Schreiben Sie den notwendigen T-SQL-Code, um dieses Abfrage-Modell als String zu generieren. Der wichtigste Teil ist die Bestimmung des einzigartigen Satzes von Werten, auf denen du PIVOT siehst und dann in eine Zeichenkette mit der STUFF-Funktion und dem FOR XML PATH (3939) Trick kollabst. Also, was ist mir heute gut, mindestens 13 Artikel Zwei Vor kurzem habe ich einen BDR geschrieben, der sich zum Teil auf die Rolle der Bildung und den Wert eines guten liberalen Kunsthintergrundes konzentrierte, nicht nur für die Softwareindustrie, sondern auch für andere Branchen. Einer der Themen dieses BDR betonte einen entscheidenden und erleuchteten Standpunkt des renommierten Softwarearchitekten Allen Holub in Bezug auf freie Kunst. Ill (treu) paraphrasieren seine Botschaft: er hob die Parallelen zwischen Programmierung und Studium der Geschichte, indem sie alle daran erinnern, dass die Geschichte liest und schreibt (und krank hinzufügen, identifizieren Muster), und Software-Entwicklung ist auch Lesen und Schreiben (und wieder, Identifizierung von Mustern ). Und so schrieb ich eine Meinung Stück, das auf diese und andere verwandte Themen konzentriert. Aber bis heute habe ich mich nie dazu veranlasst, es zu veröffentlichen. Jeder so oft Id denke daran, es zu überarbeiten, und Id sogar sitzen für ein paar Minuten und machen einige Anpassungen an sie. Aber dann würde das Leben im Allgemeinen in den Weg gehen und Id nie beenden. Also, was hat sich vor ein paar Wochen, Kollegen CoDe Magazine Kolumnist und Branchenführer Ted Neward schrieb ein Stück in seiner regulären Spalte, Managed Coder, die meine Aufmerksamkeit gefangen. Der Titel des Artikels ist On Liberal Arts. Und ich empfehle, dass jeder es liest. Ted diskutiert den Wert eines liberalen Kunsthintergrundes, die falsche Dichotomie zwischen einem liberalen Kunsthintergrund und Erfolg in der Softwareentwicklung und die Notwendigkeit, gut zu schreiben. Er spricht über einige seiner eigenen vergangenen Begegnungen mit HR Personalmanagement in Bezug auf seinen pädagogischen Hintergrund. Er unterstreicht auch die Notwendigkeit, sich an Veränderungen in unserer Branche anzupassen und anzupassen, sowie die Kennzeichen eines erfolgreichen Software-Profis (zuverlässig, vorausschauend und lernen, anfänglichen Konflikt mit anderen Teammitgliedern zu kommen). So ist es ein tolles Lesen, wie sind Teds andere CoDe Artikel und Blog-Einträge. Es hat mich auch dazu gebracht, über meine Ansichten zu diesem (und anderen Themen) nachzudenken und mich schließlich zu motivieren, meine eigene Redaktion zu beenden. Also, besser spät als nie, hier sind meine aktuellen Bäcker Dutzend von Reflexionen: Ich habe ein Sprichwort: Wasser friert bei 32 Grad ein. Wenn du in einer Trainingsrolle bist, kannst du dich vielleicht in der Welt alles tun, um jemanden zu helfen, der in der Tat nur eine Temperatur von 34 Grad fühlt und deshalb die Dinge für sie verfestigen. Manchmal dauert es nur ein bisschen mehr Aufwand oder einen anderen ideachemischen Katalysator oder eine neue Perspektive, die bedeutet, dass die mit vorheriger Ausbildung auf unterschiedliche Quellen zurückgreifen können. Wasser friert bei 32 Grad ein. Manche Menschen können ein hohes Maß an Konzentration auch mit einem Raum voller lärmender Menschen beibehalten. Im nicht einer von ihnen gelegentlich brauche ich etwas Privatsphäre, um durch eine kritische Frage zu denken. Manche Leute beschreiben dies, wie Sie lernen müssen, weg von ihm zu gehen. Ein anderer Weg, es ist eine Suche nach der verdünnten Luft. In der vergangenen Woche verbrachte ich stundenlang in halb beleuchtetem, ruhigem Zimmer mit einem Whiteboard, bis ich ein Problem völlig verstanden habe. Erst dann konnte ich mit anderen Entwicklern über eine Lösung sprechen. Die Botschaft hier ist nicht zu predigen, wie Sie über Ihr Geschäft der Lösung von Problemen gehen sollten, sondern für alle, ihre Stärken zu kennen und was funktioniert, und nutzen sie zu Ihrem Vorteil so viel wie möglich. Einige Phrasen sind wie Fingernägel an einer Tafel für mich. Verwenden Sie es als Unterricht Moment ist eins. (Warum ist es wie Fingernägel an einer Tafel Denn wenn du in einer Mentoring-Rolle bist, dann solltest du in der Regel den Moment-Modus unterrichten, aber subtil). Heres ein anderes kann ich nicht wirklich erklären, es in Worte, aber ich verstehe es. Das klingt ein bisschen kalt, aber wenn eine Person wirklich nicht etwas in Worte erklären kann, vielleicht versteht sie es nicht. Sicher, eine Person kann einen unscharfen Sinn haben, wie etwas funktioniert, kann ich bluffen meinen Weg durch die Beschreibung, wie eine Digitalkamera funktioniert, aber die Wahrheit ist, dass ich nicht wirklich verstehen, dass alles so gut. Es gibt ein Feld der Studie bekannt als Erkenntnistheorie (das Studium des Wissens). Eine der grundlegenden Grundlagen des Verständnisses, ob es sich um eine Kamera oder ein Designmuster handelt - ist die Fähigkeit, den Kontext zu etablieren, die Kette der verwandten Ereignisse zu identifizieren, die Attribute aller Komponenten auf dem Weg usw. Ja, das Verständnis ist manchmal sehr harte Arbeit , Aber tauchen in ein Thema und brechen es auseinander ist die Mühe wert. Sogar diejenigen, die die Zertifizierung verzichten, werden anerkennen, dass der Prozess des Studiums für Zertifizierungsprüfungen dazu beitragen wird, Lücken in Wissen zu füllen. Ein Datenbank-Manager ist eher zu einem Datenbank-Entwickler, der extemporane (und mühelos) über Transaktions-Isolation Ebenen und Auslöser sprechen können, im Gegensatz zu jemandem, der Art davon weiß, aber kämpft, um ihre Verwendung zu beschreiben. Theres ein anderes Korollar hier Ted Neward empfiehlt, dass Entwickler öffentlich sprechen, Bloggen, etc. Ich stimme zu 100. Der Prozess der öffentlichen Rede und Blogging wird Sie praktisch zwingen, darüber nachzudenken, Themen und Abbau Definitionen, die Sie sonst für selbstverständlich genommen haben könnte. Vor ein paar Jahren habe ich gedacht, dass ich die T-SQL MERGE-Anweisung ziemlich gut verstanden habe. Aber erst nach dem Schreiben darüber, sprachen, Fragen von anderen, die Perspektiven hatten, die mir nie einfallen, dass mein Verständnisgrad exponentiell zunahm. Ich kenne eine Geschichte von einem Anmelde-Manager, der einmal einen Autorenentwickler für eine Vertragsposition interviewte. Der Einstellungsleiter war verächtlich von Publikationen im Allgemeinen und bellte bei der Bewerberin an. Also, wenn du hier arbeiten wirst, würdest du lieber Bücher schreiben oder schreiben, schreibe ich ja, ich gebe es in jeder Branche ein paar reine Akademiker. Aber was der Anmelde-Manager verpasst hat, war die Chance für die Stärkung und Schärfung von Skill-Sets. Während ich ein altes Kasten Bücher brauchte, stieß ich auf einen Schatz aus den 1980er Jahren: Programmierer bei der Arbeit. Die Interviews mit einem sehr jungen Bill Gates, Ray Ozzie und anderen bekannten Namen enthält. Jedes Interview und jede Einsicht ist den Preis des Buches wert. Aus meiner Sicht war das interessanteste Interview mit Butler Lampson. Wer gab einen mächtigen Ratschlag. Zur Hölle mit Computerkenntnis. Sein absolut lächerliches. Mathematik studieren Lerne zu denken Lesen. Schreiben. Diese Dinge sind von dauerhafterem Wert. Erfahren Sie, wie die Theoreme zu beweisen: Eine Menge Beweise hat sich im Laufe der Jahrhunderte angesammelt, die darauf hindeutet, dass diese Fähigkeit auf viele andere Dinge übertragbar ist. Butler spricht die Wahrheit. Krank fügen Sie zu diesem Punkt lernen, wie man Teufel befürworten gegen sich selbst zu spielen. Je mehr Sie Realität - überprüfen Sie Ihre eigenen Prozesse und arbeiten, desto besser daneben. Der große Informatiker Allen Holub machte den Zusammenhang zwischen Software-Entwicklung und den freien Künsten speziell, dem Thema Geschichte. Hier war sein Punkt: Was ist Geschichte Lesen und Schreiben. Was ist Software-Entwicklung Unter anderem, Lesen und Schreiben. Ich habe meinen Schülern T-SQL Essay Fragen als Praxis-Tests gegeben. Ein Student scherzte, dass ich mehr wie ein Juraprofessor gehandelt habe. Nun, genau wie Coach Donny Haskins sagte in der Film Glory Road, mein Weg ist schwer. Ich glaube fest an eine starke intellektuelle Grundlage für jeden Beruf. So wie Anwendungen von Rahmenbedingungen profitieren können, können Einzelpersonen und ihre Denkprozesse auch von menschlichen Rahmenbedingungen profitieren. Das ist die Grundlagen der Stipendien. Es gibt eine Geschichte, die in den 1970er Jahren, IBM erweitert ihre Rekrutierung Bemühungen in den großen Universitäten durch die Konzentration auf die besten und hellsten liberalen Kunst Absolventen. Sogar dann erkannten sie, dass die besten Leser und Schriftsteller irgendwann zu starken Programmiersystemanalysten werden könnten. (Fühlen Sie sich frei, diese Geschichte zu jedem HR-Typ zu verwenden, der darauf besteht, dass ein Kandidat einen Informatik-Abschluss haben muss) Und von der Geschichte zu sprechen: Wenn aus keinem anderen Grund, ist es wichtig, sich an die Geschichte der Produktfreigaben zu erinnern, wenn ich bei der Arbeit arbeite Client-Site, die immer noch mit SQL Server 2008 oder sogar (Gasp) SQL Server 2005, muss ich mich erinnern, welche Features wurden in den Versionen im Laufe der Zeit implementiert. Hast du jemals einen Lieblingsarzt, den du gemocht hast, weil er die Dinge in einfachem Englisch erklärt hat, gab dir die gerade Wahrheit und verdiente dein Vertrauen, auf dich zu operieren. Das sind wahnsinnige Fähigkeiten. Und sind das Ergebnis von Erfahrung und HARTE ARBEIT, die Jahre und sogar Jahrzehnte zu kultivieren. Es gibt keine Garantien für den Job Erfolg Fokus auf die Fakten, nehmen Sie ein paar kalkulierte Risiken, wenn youre sicher, dass Sie Ihren Weg in die Ziellinie sehen können, lassen Sie die Chips fallen, wo sie können, und nie aus den Augen verlieren, nur wie der Arzt, der verdient hat Dein Vertrauen. Obwohl einige Tage ich kurz bin, versuche ich, meinen Klienten zu behandeln und ihre Daten als Arzt würden Patienten behandeln. Obwohl ein Arzt mehr Geld macht Es gibt viele Klischees, die ich verabscheue, aber Herde, die ich nicht hasse: Es gibt keine solche Sache wie eine schlechte Frage. Als ehemaliger Lehrer hörte eine Sache, die meinen Zorn zog, jemand, der eine andere Person kritisierte, um eine angeblich, dumme Frage zu stellen. Eine Frage bedeutet, dass eine Person anerkennt, dass sie eine gewisse Lücke haben, um sie zu füllen. Ja, einige Fragen sind besser formuliert als andere, und einige Fragen erfordern zusätzliche Framing, bevor sie beantwortet werden können. Aber die Reise von einer Frage zu einer Antwort ist wahrscheinlich, einen aktiven geistigen Prozess in anderen zu erzeugen. Es gibt alles gute Dinge. Viele gute und fruchtbare Diskussionen entspringen einer dummen Frage. Ich arbeite auf der ganzen Linie in SSIS, SSAS, SSRS, MDX, PPS, SharePoint, Power BI, DAX alle Werkzeuge im Microsoft BI Stack. Ich schreibe immer noch einen Code von Zeit zu Zeit. Aber erraten, was ich noch so viel Zeit damit verbringen, T-SQL-Code zu Profildaten als Teil des Entdeckungsprozesses zu schreiben. Alle Anwendungsentwickler sollten gute T-SQL-Koteletts haben. Ted Neward schreibt (richtig) über die Notwendigkeit, sich an die technologischen Veränderungen anzupassen. Krank dazu beitragen, die Notwendigkeit, sich an clientemployer Änderungen anzupassen. Unternehmen ändern Geschäftsregeln. Unternehmen erwerben andere Unternehmen (oder werden das Ziel einer Akquisition). Unternehmen machen Fehler bei der Vermittlung von Geschäftsanforderungen und Spezifikationen. Ja, wir können manchmal eine Rolle bei der Hilfe bei der Bewältigung dieser Änderungen spielen und manchmal waren die Fliege, nicht die Windschutzscheibe. Diese verursachen manchmal große Schmerzen für alle, besonders die I. T. Menschen. Darum besteht der Begriff der Tatsache des Lebens, wir müssen damit umgehen. Genau wie kein Entwickler schreibt Bug-Free-Code jedes Mal, kein I. T. Person befasst sich gut mit dem Wechsel jedes Mal. Einer der größten Kämpfe, die ich in meinen 28 Jahren in dieser Branche hatte, zeigt Geduld und Zurückhaltung, wenn Veränderungen aus vielen verschiedenen Richtungen fliegen. Hier ist, wo meine vorherige Vorschlag über die Suche nach der gereinigten Luft kann helfen. Wenn Sie es schaffen, Änderungen in Ihren Gedankenprozess zu integrieren, und ohne das Gefühl überwältigt, sind die Chancen youll ein wichtiges Kapital. In den letzten 15 Monaten musste ich mit einer riesigen Menge an professionellem Wechsel umgehen. Es war schon sehr schwierig, aber Ive beschloss, dass diese Änderung die Norm sein wird, und ich habe versucht, meine eigenen Gewohnheiten so gut wie möglich zu machen, um mit häufigen (und unsicheren) Veränderungen fertig zu werden. Es ist schwer, sehr hart Aber als Trainer Jimmy Duggan sagte in der Film Eine Liga ihrer eigenen: Natürlich ist es schwer. Wenn es nicht schwer war, würde jeder es tun. Das ist hart, was macht es toll Eine kraftvolle Botschaft. Theres wurde in den letzten Jahren über die Durchführung von Fachkonferenzen (und in der Branche als Ganzes) geführt. Viele angesehene Schriftsteller haben sehr gute Editorials zum Thema geschrieben. Heres meine Eingabe, für was seinen Wert. Its a message to those individuals who have chosen to behave badly: Dude, it shouldnt be that hard to behave like an adult. A few years ago, CoDe Magazine Chief Editor Rod Paddock made some great points in an editorial about Codes of Conduct at conferences. Its definitely unfortunate to have to remind people of what they should expect out of themselves. But the problems go deeper. A few years ago I sat on a five-person panel (3 women, 2 men) at a community event on Women in Technology. The other male stated that men succeed in this industry because the Y chromosome gives men an advantage in areas of performance. The individual who made these remarks is a highly respected technology expert, and not some bozo making dongle remarks at a conference or sponsoring a programming contest where first prize is a date with a bikini model. Our world is becoming increasingly polarized (just watch the news for five minutes), sadly with emotion often winning over reason. Even in our industry, recently I heard someone in a position of responsibility bash software tool XYZ based on a ridiculous premise and then give false praise to a competing tool. So many opinions, so many arguments, but heres the key: before taking a stand, do your homework and get the facts . Sometimes both sides are partly rightor wrong. Theres only one way to determine: get the facts. As Robert Heinlein wrote, Facts are your single clue get the facts Of course, once you get the facts, the next step is to express them in a meaningful and even compelling way. Theres nothing wrong with using some emotion in an intellectual debate but it IS wrong to replace an intellectual debate with emotion and false agenda. A while back I faced resistance to SQL Server Analysis Services from someone who claimed the tool couldnt do feature XYZ. The specifics of XYZ dont matter here. I spent about two hours that evening working up a demo to cogently demonstrate the original claim was false. In that example, it worked. I cant swear it will always work, but to me thats the only way. Im old enough to remember life at a teen in the 1970s. Back then, when a person lost hisher job, (often) it was because the person just wasnt cutting the mustard. Fast-forward to today: a sad fact of life is that even talented people are now losing their jobs because of the changing economic conditions. Theres never a full-proof method for immunity, but now more than ever its critical to provide a high level of what I call the Three Vs (value, versatility, and velocity) for your employerclients. I might not always like working weekends or very late at night to do the proverbial work of two people but then I remember there are folks out there who would give anything to be working at 1 AM at night to feed their families and pay their bills. Always be yourselfyour BEST self. Some people need inspiration from time to time. Heres mine: the great sports movie, Glory Road. If youve never watched it, and even if youre not a sports fan I can almost guarantee youll be moved like never before. And Ill close with this. If you need some major motivation, Ill refer to a story from 2006. Jason McElwain, a high school student with autism, came off the bench to score twenty points in a high school basketball game in Rochester New York. Heres a great YouTube video. His mother said it all . This is the first moment Jason has ever succeeded and is proud of himself. I look at autism as the Berlin Wall. He cracked it. To anyone who wanted to attend my session at todays SQL Saturday event in DC I apologize that the session had to be cancelled. I hate to make excuses, but a combination of getting back late from Detroit (client trip), a car thats dead (blown head gasket), and some sudden health issues with my wife have made it impossible for me to attend. Back in August, I did the same session (ColumnStore Index) for PASS as a webinar. You can go to this link to access the video (itll be streamed, as all PASS videos are streamed) The link does require that you fill out your name and email address, but thats it. And then you can watch the video. Feel free to contact me if you have questions, at kgoffkevinsgoff November 15, 2013 Getting started with Windows Azure and creating SQL Databases in the cloud can be a bit daunting, especially if youve never tried out any of Microsofts cloud offerings. Fortunately, Ive created a webcast to help people get started. This is an absolute beginners guide to creating SQL Databases under Windows Azure. It assumes zero prior knowledge of Azure. You can go to the BDBI Webcasts of this website and check out my webcast (dated 11102013). Or you can just download the webcast videos right here: here is part 1 and here is part 2. You can also download the slide deck here. November 03, 2013 Topic this week: SQL Server Snapshot Isolation Levels, added in SQL Server 2005. To this day, there are still many SQL developers, many good SQL developers who either arent aware of this feature, or havent had time to look at it. Hopefully this information will help. Companion webcast will be uploaded in the next day look for it in the BDBI Webcasts section of this blog. October 26, 2013 Im going to start a weekly post of T-SQL tips, covering many different versions of SQL Server over the years Heres a challenge many developers face. Ill whittle it down to a very simple example, but one where the pattern applies to many situations. Suppose you have a stored procedure that receives a single vendor ID and updates the freight for all orders with that vendor id. create procedure dbo. UpdateVendorOrders update Purchasing. PurchaseOrderHeader set Freight Freight 1 where VendorID VendorID Now, suppose we need to run this for a set of vendor IDs. Today we might run it for three vendors, tomorrow for five vendors, the next day for 100 vendors. We want to pass in the vendor IDs. If youve worked with SQL Server, you can probably guess where Im going with this. The big question is how do we pass a variable number of Vendor IDs Or, stated more generally, how do we pass an array, or a table of keys, to a procedure Something along the lines of exec dbo. UpdateVendorOrders SomeListOfVendors Over the years, developers have come up with different methods: Going all the way back to SQL Server 2000, developers might create a comma-separated list of vendor keys, and pass the CSV list as a varchar to the procedure. The procedure would shred the CSV varchar variable into a table variable and then join the PurchaseOrderHeader table to that table variable (to update the Freight for just those vendors in the table). I wrote about this in CoDe Magazine back in early 2005 (code-magazinearticleprint. aspxquickid0503071ampprintmodetrue. Tip 3) In SQL Server 2005, you could actually create an XML string of the vendor IDs, pass the XML string to the procedure, and then use XQUERY to shred the XML as a table variable. I also wrote about this in CoDe Magazine back in 2007 (code-magazinearticleprint. aspxquickid0703041ampprintmodetrue. Tip 12)Also, some developers will populate a temp table ahead of time, and then reference the temp table inside the procedure. All of these certainly work, and developers have had to use these techniques before because for years there was NO WAY to directly pass a table to a SQL Server stored procedure. Until SQL Server 2008 when Microsoft implemented the table type. This FINALLY allowed developers to pass an actual table of rows to a stored procedure. Now, it does require a few steps. We cant just pass any old table to a procedure. It has to be a pre-defined type (a template). So lets suppose we always want to pass a set of integer keys to different procedures. One day it might be a list of vendor keys. Next day it might be a list of customer keys. So we can create a generic table type of keys, one that can be instantiated for customer keys, vendor keys, etc. CREATE TYPE IntKeysTT AS TABLE ( IntKey int NOT NULL ) So Ive created a Table Typecalled IntKeysTT . Its defined to have one column an IntKey. Nowsuppose I want to load it with Vendors who have a Credit Rating of 1..and then take that list of Vendor keys and pass it to a procedure: DECLARE VendorList IntKeysTT INSERT INTO VendorList SELECT BusinessEntityID from Purchasing. Vendor WHERE CreditRating 1 So, I now have a table type variable not just any table variable, but a table type variable (that I populated the same way I would populate a normal table variable). Its in server memory (unless it needs to spill to tempDB) and is therefore private to the connectionprocess. OK, can I pass it to the stored procedure now Well, not yet we need to modify the procedure to receive a table type. Heres the code: create procedure dbo. UpdateVendorOrdersFromTT IntKeysTT IntKeysTT READONLY update Purchasing. PurchaseOrderHeader set Freight Freight 1 FROM Purchasing. PurchaseOrderHeader JOIN IntKeysTT TempVendorList ON PurchaseOrderHeader. VendorID Te mpVendorList. IntKey Notice how the procedure receives the IntKeysTT table type as a Table Type (again, not just a regular table, but a table type). It also receives it as a READONLY parameter. You CANNOT modify the contents of this table type inside the procedure. Usually you wont want to you simply want to read from it. Well, now you can reference the table type as a parameter and then utilize it in the JOIN statement, as you would any other table variable. Also dort hast du es A bit of work to set up the table type, but in my view, definitely worth it. Additionally, if you pass values from , youre in luck. You can pass an ADO data table (with the same tablename property as the name of the Table Type) to the procedure. For developers who have had to pass CSV lists, XML strings, etc. to a procedure in the past, this is a huge benefit. Finally I want to talk about another approach people have used over the years. SQL Server Cursors. At the risk of sounding dogmatic, I strongly advise against Cursors, unless there is just no other way. Cursors are expensive operations in the server, For instance, someone might use a cursor approach and implement the solution this way: DECLARE VendorID int DECLARE dbcursor CURSOR FASTFORWARD FOR SELECT BusinessEntityID from Purchasing. Vendor where CreditRating 1 FETCH NEXT FROM dbcursor INTO VendorID WHILE FETCHSTATUS 0 EXEC dbo. UpdateVendorOrders VendorID FETCH NEXT FROM dbcursor INTO VendorID The best thing Ill say about this is that it works. And yes, getting something to work is a milestone. But getting something to work and getting something to work acceptably are two different things. Even if this process only takes 5-10 seconds to run, in those 5-10 seconds the cursor utilizes SQL Server resources quite heavily. Thats not a good idea in a large production environment. Additionally, the more the of rows in the cursor to fetch and the more the number of executions of the procedure, the slower it will be. When I ran both processes (the cursor approach and then the table type approach) against a small sampling of vendors (5 vendors), the processing times where 260 ms and 60 ms, respectively. So the table type approach was roughly 4 times faster. But then when I ran the 2 scenarios against a much larger of vendors (84 vendors), the different was staggering 6701 ms versus 207 ms, respectively. So the table type approach was roughly 32 times faster. Again, the CURSOR approach is definitely the least attractive approach. Even in SQL Server 2005, it would have been better to create a CSV list or an XML string (providing the number of keys could be stored in a scalar variable). But now that there is a Table Type feature in SQL Server 2008, you can achieve the objective with a feature thats more closely modeled to the way developers are thinking specifically, how do we pass a table to a procedure Now we have an answer Hope you find this feature help. Feel free to post a comment. SQL Server, Power BI, and R by Sheri Gilley, Microsoft Senior Software Engineer SQL Server 2016 has reached general availability recently and one of the top new capabilities it features is SQL Server R Services 8212 advanced analytics in-database with the R language. R has also been integrated into Power BI. allowing you to create fully integrated visualizations with the power of the R language. In this blog post I will show an example using R in SQL Server to create a model and batch score testing data, then use Power BI Desktop to create visualizations of the scored data. Rather than moving your data from the database to an external machine running R, you can now run R scripts directly inside the SQL Server database 8211 train your model inside the database with the full power of CRAN R packages plus the additional features of speed and scalability from the RevoScaleR package. And once you have a model, you can perform batch scoring inside the database as well. But what do you do when it comes to visualizing this newly scored data How would you create an interactive experience that supports sharing and embedding in applications One great option is using PowerBi which gives you a quick and easy way to create visualizations that interact to help you explore your data. It also easily allows you to share your dashboards and reports, and you can embed the PowerBI visuals in your applications. And PowerBI can access your SQL data. Here is an example of model building and scoring for Fraud Detection performed in SQL Server. The data contains 200,000 online transactions, with a second spreadsheet containing information for 9000 known fraud transactions. This template details the steps to prepare data, create a model and perform batch scoring. The template includes R code inside stored procedures that allows you to train and save the model and score test data using the model. While this example covers a fairly small dataset, R Services can scale to billions of rows 8211 learn more about performance tuning for these operations here . Once the scoring is complete, you can access this data in either PowerBI or PowerBI Desktop to examine the scores. In PowerBI Desktop, use Get DatagtSQL Server Database, and you can connect directly to a database table or can add a query to access the data you wish to visualize. In this example the scored data is saved in the table sqlpredictscore with just the account Id and the predicted scores, so we will add a query to join this with the rest of the input data. This particular scoring was performed on test data so we also have the known values available to help us see how well the model has performed. We039ll use these values in a few different displays to learn more about the scoring of the test data. Note the first two bar charts 8211 the first shows the known values, the second shows the predicted values. Since we are predicting a rare event (in our sample, only 372 of the 58,924 transaction) it would be difficult to view counts on the bar heights. So instead, the bar heights here represent the average transaction amount, an important attribute to track when dealing with fraud. Right away we see that the average transactions are slightly higher in the fraud transactions than the non-fraud. While we can see some interesting information in this display, the real power (and fun) of Power BI is in the interactions. When you click on a bar in the graph, the rest of the display is filtered by that selection. For example, click on the first bar to display only the transactions predicted as fraud in all the other displays: Likewise, click on the first bar of the second graph to view the displays for the 372 known fraud transactions. In the first barchart the light bars show all transactions, while the darker bars in the middle now show just the fraud transactions. Note from the table that the miss-classified non-fraud transactions represent just 17 cases, while 355 cases were correctly classified In both instances, the average amount for fraud transactions are higher than the average transaction amounts for all data. In Power BI Desktop, you can also create visualizations with R directly in the report 8211 in this example I039ve used R to create both the Box amp Whisker plot and the Density Plot using trellis. For example: The integration of R into SQL Server 2016 and Power BI makes it easy for you to create and share rich visualizations with advanced insights and predictions for your business use-case. Never miss an update Subscribe to R-bloggers to receive e-mails with the latest R posts. (You will not see this message again.)Customers Rate BI Vendors by Cost Gartner, one of the worlds most influential Information Technology analysts, has published new reports about the costs of business intelligence platforms for 25 leading suppliers. Gartner verglichen Verkäufer auf Kostenarten wie durchschnittliche Implementierung, Lizenz und Hardware. Wichtige Ergebnisse Die Implementierungskosten reichen von bis zu 100 der anfänglichen Lizenzkosten in den kleinsten Einführungen bis zu rund 60 der Lizenzkosten in den größten. Der Durchschnitt aller Bereitstellungsgrößen entspricht etwa 80. Die Implementierung der Business Intelligence (BI) Plattform (insbesondere für BI-Entwickler), das Niveau der Integration zwischen Plattformkomponenten, die Qualität der Produktqualität und die Komplexität der Migrationen sind alle Faktoren, die die Implementierungskosten beeinflussen Und Aufwand sowie die Erfüllung von Geschäftsvorteilen. Betrachten Sie diese Faktoren zusätzlich zu Kosten in Ihrem Lieferanten Auswahl Entscheidung. Die Benutzerfreundlichkeit (sowohl für Entwickler als auch für Geschäftsbenutzer) einer bestimmten Plattform erweitert die Komplexität der Analyse, die die Benutzer selbst ausführen können, und die Breite der verwendeten Produktmerkmale, während die Implementierungskosten gesenkt werden. 1. Überblick Die Umfrage von 1.364 BI-Profis weltweit fand, dass Kosten, während nicht ein Top-Kriterien, weiterhin ein wichtiger Faktor für ihre Kaufentscheidungen ist. Von Diskussionen mit Kunden, die meisten BI Führer in erster Linie gleich die Kosten für eine BI-Plattform mit dem, was sie für Lizenzgebühren ausgeben. Während Lizenzkosten oft die sichtbarsten Arten von Kosten sind, sind in Wirklichkeit Lizenz-, Wartungs-, Hardware - und Implementierungskosten zusammen weniger als 30 der gesamten dreijährigen Kosten einer BI-Plattform. Insbesondere die Implementierungskosten reichen von bis zu 100 der anfänglichen Lizenzkosten in den kleinsten Einführungen bis zu rund 60 der Lizenzkosten in den größten. Innerhalb eines breiteren Kostenkontextes stellen die anfänglichen Implementierungskosten je nach Bereitstellungsgröße 5 bis 10 der gesamten dreijährigen BI-Plattform-Eigentümerkosten (BIPOC) dar, und ob Geschäftsbenutzer-Entwickler in der BIPOC-Berechnung enthalten sind oder nicht. Tabelle 1. Lieferantyp: Kategorien von BI-Plattformprodukten Beachten Sie, dass sowohl die Software-as-a-Service-Anbieter, die Nischenanbieter AltoSoft und InetSoft als auch IBM Cognos 10 nicht über genügend Datenpunkte über Lizenz, Lizenzwartung, Hardware - oder Hardware-Wartung verfügten Kategorien in einer der einzelnen Benutzerzählkategorien, die in diese Forschung aufgenommen werden sollen. BI-Führer können diese Ergebnisse nutzen, um die Kosten von BI-Plattformen zu bewerten, die sie in Erwägung ziehen, aber sollten sich nicht nur auf Kosten konzentrieren. Eine Kosten-Nutzen-Analyse, die eine Bewertung der funktionalen Anpassung an die Anforderungen, die Usability zur Annahme und die Bewertung von Geschäftsvorteilen beinhaltet, sollte auch kritische Stücke der Kaufentscheidungsgleichung sein. Es ist fehlgeleitet, in kostengünstige Software zu investieren, nur weil es kostengünstig ist. Wenn es nicht geschäftlichen und Usability-Anforderungen entspricht, wird es eine begrenzte Annahme zu erreichen und wird nicht zu erwarten erwarteten Geschäftsvorteile zu liefern. 2. 2. Umsetzungskosten nach Benutzerzählung Im Durchschnitt können die anfänglichen Umsetzungskosten (siehe Abbildungen 1 und 2), wie z. B. für externe Berater und Systemintegratoren, bis zu 60 der Lizenzkosten in den größten Einführungen (oder Durchschnittlich 143 pro Benutzer), bis zu 100 der Lizenzkosten in den kleinsten (oder durchschnittlich 3.038 pro Benutzer). Als solche ist die Erstimplementierung ein wesentlicher Faktor für die Gesamtkosten und sollte so streng wie die Lizenzkosten beschafft und verwaltet werden. Abbildung 1 . Durchschnittliche Implementierungskosten pro Benutzer (Dollars) N ​​504 Implementierungskosten Chart stellt Kundenwahrnehmungen und nicht Gartners-Meinung dar. Abbildung 2. Durchschnittliche Gesamtumsetzungskosten nach Deployment-Größe (Dollars) 2.1 Faktoren, die Implementierungskosten beeinflussen Die Umfrageergebnisse bedeuten eine Verknüpfung zwischen folgenden: Integration Und Produktqualität Einfache Bedienung für Entwickler, Plattformintegration und Implementierungskosten pro Benutzer Einfache Bedienung scheint in niedrigere Implementierungskosten zu übersetzen, zum Teil durch einfach zu bedienende Tools, die es IT-Entwicklern und anderen BI-Autoren ermöglichen, BI-Inhalte schneller zu entwickeln. Es ermöglicht auch mehr Business-Anwender mit weniger technischen Fähigkeiten, um ihre eigenen Berichte und Analysen zu erstellen, wodurch Kosten, die durch die Vergabe von IT-Spezialisten, um sie zu entwerfen. Abbildung 3 zeigt, dass jeder Hersteller die Produktqualitätsbewertung auf der X-Achse hat, ihre Benutzerfreundlichkeit für Entwickler auf der Y-Achse, während die Größe des Punktes die durchschnittlichen Implementierungskosten pro Benutzer darstellt. Die Farbe der Punktorange ist überdurchschnittlich blau ist unter dem Durchschnitt zeigt die durchschnittliche Plattformintegrationsbewertung (siehe Anmerkung 1). Die Daten zeigen, dass Anbieter mit starker Benutzerfreundlichkeit für Entwickler, hohe Produktqualität und ein hohes Maß an Plattformintegration dazu neigen, niedrigere durchschnittliche Implementierungskosten pro Benutzer zu haben. Im Allgemeinen ist die Benutzerfreundlichkeit (für Entwickler) zum Teil eine Funktion der BI-Plattformintegration und der BI-Plattformentwickler-Produktivitätsmerkmale (insbesondere für die gesamte Palette einfacher komplexer Analysetypen). Gut integrierte Plattformen haben weniger plattformbewegliche Teile und haben integrierte Benutzerwerkzeuge anstatt mehrere Benutzeroberflächen, die dazu neigen, weniger Training auch für diverse Benutzergruppen zu erfordern. Als Netto-Schlussfolgerung haben Plattformen, die eine leichtere Content-Entwicklung ermöglichen, in der Regel niedrigere Implementierungskosten pro Benutzer. Abbildung 3. Produktqualität vs. Leichtigkeit der Entwicklung vs. durchschnittliche Implementierungskosten pro Benutzer vs. durchschnittliche Integrationsbewertung N 504 Implementierungskosten Die Benutzerfreundlichkeit für Entwickler wird auf einer Skala von 1 bis 7 bewertet, wobei eine Punktzahl von 1 bis 2 Armen, 3 bis 5 durchschnittlich und 6 bis 7 hervorragend. Die Produktqualität wird auf einer Skala von 1 bis 7 erzielt, wobei eine Punktzahl von 1 bis 2 schlecht, 3 bis 5 durchschnittlich und 6 bis 7 herausragend ist. Durchschnittliche Integrationsbewertung: siehe Anmerkung 1 zur Berechnung. Die orangefarbenen Punkte sind überdurchschnittliche Integrationswerte, die blauen Punkte repräsentieren unterhalb der durchschnittlichen Integrationswerte. Die durchschnittliche Implementierungskosten pro Benutzer sind der Durchschnitt der Bereitstellungsgrößen. Chart repräsentiert die Kundenwahrnehmungen und nicht die Meinung von Gartners. Die Umfrageergebnisse deuten auch darauf hin, dass die Benutzerfreundlichkeit (sowohl für Entwickler als auch für Konsumenten) einer bestimmten Plattform die Komplexität der Analysen beeinflusst, die die Benutzer selbst durchführen können, sowie die Implementierungskosten und die Breite der verwendeten Produktfunktionalität. Unternehmen neigen dazu, BI-Plattformen mit höheren Scores auf Benutzerfreundlichkeit für eine breitere Palette von Aktivitäten (z. B. Berichterstattung, Ad-hoc-Analyse und Dashboards) anstatt für eine einzige Funktion zu verwenden. Abbildung 4 zeigt, dass jede Produkt-Komposit-Leichtigkeit des Spiels im Vergleich zu der Komplexität der Analyse durch die Benutzer durchgeführt wird. Die Größe der Blase stellt die durchschnittlichen Implementierungskosten pro Benutzer dar. Orange Blasen stellen diese Plattformen mit überdurchschnittlicher Breite der Funktionsnutzung dar, während blaue Blasen unterhalb des Umfragedurchschnitts liegen. Benutzer über traditionelle Power-Analysten nehmen intuitive Werkzeuge einfacher und für mehr Funktionen. Darüber hinaus reduziert die Benutzerfreundlichkeit die Kosten für Training und Change Management. Dies zeigt sich in den Ergebnissen von Datenerfassungs-Tools wie Tableau, die überdurchschnittliche Benutzerfreundlichkeits-Scores aufweisen, während es den Benutzern dieser Plattformen ermöglicht wird, die anspruchsvollsten Analysetypen durchzuführen. Diese paradoxe Benutzerfreundlichkeit kombiniert mit der Unterstützung für komplexe Analyse hat ihnen Impulse auf dem Markt gegeben und hat dazu geführt, dass traditionelle Anbieter versuchen, ihren Erfolg mit ähnlichen Angeboten zu imitieren. Eine Reihe von Faktoren, die die Benutzerfreundlichkeit nutzen: Viele Datenentdeckungs-Tool-Angebote (wie QlikView, Tableau und Tibco Spotfire) erfordern keine traditionelle, modellierte semantische Schicht, obwohl sie optionale wiederverwendbare Datenkomponenten und Metadaten anbieten. Diese Tools bieten einfach zu bedienende Fähigkeiten für Business-Analysten zugreifen, mischen, mischen und manipulieren Daten mit minimaler IT-Unterstützung oder für die IT, um Inhalte schneller zu entwickeln als mit herkömmlichen Ansätzen. Dieser Ansatz reduziert die Bereitstellungs - und Wartungskosten, die mit einer semantischen Schicht verbunden sind, aber können das Potenzial für die Schaffung von Personal-, Arbeitsgruppen - oder Abteilungssilos erhöhen, was in Bezug auf den Aufwand für die IT-Kosten aus einer Governance-Perspektive mehr kosten kann. Intuitive BI-Content-Authoring-Tools beinhalten eine grafische Benutzeroberfläche und eine Designumgebung sowie Out-of-the-Box-Objekte und - Wizards, die die für alle Ebenen der analytischen Komplexität erforderliche Codierung reduzieren. Weit verfügbare Fähigkeiten machen es einfacher und oft weniger kostspielig, analytische Inhalte zu entwickeln (sicherlich als für schwer zu findende Fähigkeiten). Abbildung 4 Einfachheit der Anwendung vs. Komplexität der Analyse vs. durchschnittliche Implementierung Kosten pro Benutzer vs. Breite der Nutzung N 504 Implementierungskosten Die Breite der Produktnutzungsbewertung ist die Summe der Benutzeraktivitätsprozentsätze über die Berichterstattung, die Ad-hoc-Analyse (alle Ebenen der Komplexität), Dashboards , Scorecards und prädiktive Analytik für jeden Anbieter. Orange Punkte stellen eine überdurchschnittliche Punktzahl dar, während blaue Punkte eine unterdurchschnittliche Punktzahl auf der Breite des Gebrauchs darstellen. Composite-Benutzerfreundlichkeit Ergebnis ist ein kombiniertes Maß für die Benutzerfreundlichkeit für Business-Anwender und Benutzerfreundlichkeit für Entwickler, die jeweils auf einer Skala von 1 bis 7, wo eine Punktzahl von 1 bis 2 schlecht, 3 bis 5 durchschnittlich und 6 zu 7 herausragend Die zusammengesetzte Komplexität der Analyse ist eine gewichtete durchschnittliche Punktzahl, basierend auf dem Prozentsatz der Befragten, die die Nutzung der Plattform melden. Die Aktivitäten werden wie folgt gewichtet: die statischen Berichte 1, die Leistungsüberwachung über eine Scorecard 1, die Anzeige der parametrisierten Berichte 2, die einfache Ad-hoc-Analyse 3, die interaktive Erkundung und die Analyse von Daten 4, die mäßig komplexe komplexe Ad-hoc-Analyse 5 unter Verwendung von Vorhersage machen Analytics andor Data Mining Modelle 5. Durchschnittliche Implementierungskosten pro Benutzer ist der Durchschnitt über die Bereitstellungsgrößen. Chart repräsentiert die Kundenwahrnehmungen und nicht die Meinung von Gartners. Produkte mit geringerer Migrationskomplexität tendieren dazu, überdurchschnittliche Geschäftsvorteile zu realisieren und die Implementierungskosten pro Benutzer zu senken. Abbildung 5 zeigt Migrationskomplexitätswerte gegenüber den Implementierungskosten pro Benutzer, während die Farbe des Punktes (orange überdurchschnittlich blau ist unten) durchschnittliche Geschäftsvorteile, die durch das Produkt erreicht werden. Mit Ausnahme von Alteryx, Quiterian, Tibco Spotfire, Quiterian und Prognoz haben diese Anbieter auch unterdurchschnittliche Implementierungskosten pro Benutzer. Gartner berichtete auch, dass ihre Befragten die Tableau als die niedrigste in der Migrationskomplexität beurteilten, während sie eine der niedrigsten Werte bei durchschnittlichen Implementierungskosten pro Benutzer beibehielten. Dies ist in der folgenden Abbildung 5 dargestellt. Abbildung 5. Migrationskomplexität, Implementierungskosten pro Benutzer und Geschäftsvorteile N 504 Umsetzungskosten Geschäftsvorteile: siehe Anmerkung 2 für die Berechnung Die Migrationskomplexität wird auf einer Skala von 1 bis 4 berechnet, wobei 1 sehr einfach 2 einfache 3 etwas komplexe und 4 extrem ist Komplex. Durchschnittliche Implementierungskosten pro Benutzer ist der Durchschnitt über die Bereitstellungsgrößen Diagramm stellt die Kundenwahrnehmungen und nicht die Gartners-Meinung dar. 3. Lizenz - und Hardwarekosten-Highlights Organisationen sehen oft alternative Plattformlösungen, wie z. B. von Microsoft - und Open-Source-Anbietern, und glauben, dass sie niedrigere Lizenzkosten anbieten. Allerdings ist der Lizenzpreis nur einen geringen Bruchteil der Gesamtbetriebskosten und der niedrige Lizenzpreis nicht immer in gleichermaßen niedrige Business Intelligence-Plattform Eigentums-Kosten (BIPOC) im Laufe der Zeit, noch die Erreichung der gewünschten Geschäftsvorteile zu übersetzen. Vier Faktoren haben den größten Einfluss auf die Kosten von Softwarelizenzen und Hardwarekosten: Lieferantenpreismodelle, Produktverpackungen, Produktskalierbarkeit und Umfang der Bereitstellung. Pro-User-Lizenzkosten gehen erheblich zurück, da die Bereitstellungsgrößen steigen. Dies ist auf Deployments zurückzuführen, die typischerweise durch einen höheren Anteil an weniger teuren Zuschauern an Content-Autoren, kostengünstigere Pro-User-Preismodelle und höhere Preisabschläge als Nutzervolumen gekennzeichnet sind. Bei der Bewertung der Kosten von BI-Plattformen erweitern Sie Ihre Analyse über die ursprüngliche Lizenz - und Hardwaregebühren hinaus, um die Implementierung und die laufenden Entwicklungskosten zu berücksichtigen, da diese die überwiegende Mehrheit der gesamten BI-Plattform-Eigentümerkosten ausmachen. Die Evaluatoren von BI-Plattformen sollten sich nicht nur auf die Kosten als primäres Entscheidungskriterium konzentrieren. Saldo jede Kostenbetrachtung mit funktionalen Anforderungen, erwartete Adoption und Geschäftsvorteile. Low-Cost-Tools, die nicht erfüllen Anforderungen nicht liefern die erwarteten Geschäftsvorteile. Seien Sie genauso rigoros im Auswahlprozess für Dienstleister, da die Implementierungskosten eine beträchtliche (zwischen 60 und 100 der Lizenzkosten je nach Einsatzgröße) der Gesamtkosten ausmachen. Für jede Bereitstellung versuchen Sie, die Anzahl der Personen, die die BI-Plattform nutzen, zu maximieren, z. B. durch die Kombination von Projekten, um das Volumen und die Rabatte zu erhöhen, und sich von den Pro-User-Preismodellen zu entfernen, um die Kosten pro Benutzer zu senken. Auch Faktor für die zukünftige Erweiterung bei der Bewertung der Hardware-Dimensionierung. 3.3 Lizenz - und Hardwarekosten Highlights Positive Produktqualität, einfache Entwicklung, Implementierungskosten und Integrationskosten sind nicht das komplette Bild. Es ist wichtig, die anfänglichen Lizenz - und Hardwarekosten zu beurteilen. Gartner bewertete Tableau als überdurchschnittliche Leistungswerte und unter den niedrigsten Lizenzkosten pro Benutzer. Die folgende Abbildung Durchschnittliche Lizenzkosten pro User (Dollars) Versus Performance Score zeigt das. (Anmerkung, dass die Leistungsbewertung durch die Geschwindigkeit der Abfragereaktionszeit definiert ist.) 4. Implementierungskosten nach Vendor Type und Product Eine hochrangige Sicht auf die durchschnittlichen Implementierungskosten gegenüber der Bereitstellungsgröße nach Herstellertyp und Produkt zeigt, welche Anbieter die größten und teuersten haben Bereitstellungen (siehe Abbildung 6). Diese Ansicht zeigt, dass nur eine Handvoll von Anbietern LogiXML, Actuate BIRT, Tableau und Jaspersoft Kunden mit überdurchschnittlichen Einsatzgrößen und unterdurchschnittlichen Implementierungskosten haben. Microsoft ist der einzige Anbieter mit einer unterdurchschnittlichen Anzahl von gemeldeten Nutzern, die auf die Kostenfrage antworten, aber überdurchschnittliche Gesamtkosten. Im Allgemeinen haben Nischenanbieter tendenziell unter den kleinsten durchschnittlichen Einsatzgrößen (Ausreißer in dieser Hinsicht sind arcplan, LogiXML und Prognoz) und entsprechend kleine Implementierungskosten, während Megavendors (mit Ausnahme von Microsoft, deren Kunden auf die Kostenfrage auf der Umfrage tendiert dazu, kleiner zu sein) und große Unabhängige neigen dazu, überdurchschnittliche Einsatzgrößen und überdurchschnittliche Umsetzungskosten zu haben, obwohl die Verhältnisse und der Rang dieser Maßnahmen bei bestimmten Anbietern sehr unterschiedlich sind. Abbildung 6 Durchschnittliche Implementierungskosten gegenüber der Bereitstellungsgröße nach Kreditorentyp und Produkt N 504 Implementierungskosten Die durchschnittliche Implementierungskosten sind der Durchschnitt der Bereitstellungsgrößen. Die durchschnittliche Bereitstellungsgröße wird für die Befragten berechnet, die auch die Implementierungskosteninformationen zur Verfügung stellten. Durchschnittliche Bereitstellungsgrößen für jeden Lieferanten für die Umfrage als Ganzes können von dieser Zahl abweichen, da diese Befragten eine Teilmenge der Gesamtumfrage sind. 5. Schlussfolgerung Die Implementierungskosten pro Benutzer gehen erheblich zurück, wenn die Bereitstellungsgröße zunimmt. Die Anbieter mit sehr großen Einsätzen neigen dazu, niedrigere durchschnittliche Kosten pro Benutzer zu verkürzen, während Anbieter mit kleineren durchschnittlichen Einsätzen dazu neigen, höhere durchschnittliche Kosten pro Benutzer zu haben. Bei der Bewertung von Anbietern auf BIPOC, Balance jeder Kostenbetrachtung mit funktionalen Anforderungen, erwartete Annahme und Geschäftsvorteile. Low-Cost-Tools, die nicht erfüllen Anforderungen nicht liefern die erwarteten Geschäftsvorteile. zusammenhängende Posts

No comments:

Post a Comment