Tuesday 26 December 2017

Przenoszenie średnia ssrs


Większość ludzi zna frazę, która zabije dwa ptaki jednym kawałkiem. Jeśli nie, faza odnosi się do podejścia, które odnosi się do dwóch celów w jednym działaniu. (Niestety, samo wyrażenie jest raczej nieprzyjemne, ponieważ większość z nas nie chce rzucać kamieniami na niewinne zwierzęta) Dzisiaj omówię podstawy dwóch wspaniałych funkcji programu SQL Server: indeks Columnstore (dostępny tylko w SQL Server Enterprise) i SQL Query Store. Microsoft faktycznie zaimplementował indeks Columnstore w SQL 2017 Enterprise, chociaż ulepszył go w dwóch ostatnich wersjach SQL Server. Microsoft wprowadził Query Store w SQL Server 2018. Więc, jakie są te funkcje i dlaczego są one ważne? Mam demo, które przedstawi obie funkcje i pokaże, w jaki sposób mogą nam pomóc. Zanim przejdę dalej, omówię to (i inne funkcje SQL 2018) w moim artykule CODE Magazine o nowych funkcjach SQL 2018. Podstawowym wprowadzeniem jest indeks Columnstore, który może przyspieszyć wyszukiwanie zapytań, które skanują duże ilości danych, oraz Magazyn zapytań śledzi wykonywanie zapytań, plany wykonania i statystyki środowiska wykonawczego, które zwykle trzeba zbierać ręcznie. Zaufaj mi, gdy mówię, to są świetne funkcje. Do tego demo użyję bazy danych demo Microsoft Contoso Retail Data Warehouse. Mówiąc wprost, Contoso DW jest jak kwota naprawdę duża AdventureWorksquot, z tabelami zawierającymi miliony rzędów. (Największa tabela AdventureWorks zawiera w przybliżeniu 100 000 wierszy). Możesz pobrać bazę danych Contoso DW tutaj: microsoften-usdownloaddetails. aspxid18279. Contoso DW działa bardzo dobrze, gdy chcesz przetestować wydajność w przypadku zapytań dotyczących większych tabel. Contoso DW zawiera standardową tabelę faktów hurtowni danych o nazwie FactOnLineSales, z 12,6 milionami wierszy. Z pewnością nie jest to największy stół hurtowni danych na świecie, ale nie jest też zabawą dla dzieci. Załóżmy, że chcę podsumować kwotę sprzedaży produktu na rok 2009 i uszeregować produkty. Mogę zapytać o tabelę faktów i dołączyć do tabeli Wymiary produktu i użyć funkcji RANK, tak jak poniżej: Oto częściowy zbiór wyników z 10 pierwszych wierszy według łącznej sprzedaży. Na moim laptopie (i7, 16 GB pamięci RAM) zapytanie trwa od 3 do 4 sekund. To może nie wydawać się końcem świata, ale niektórzy użytkownicy mogą spodziewać się niemal natychmiastowych rezultatów (tak, jak w przypadku Excela, gdy korzystasz z kostki OLAP). Jedynym indeksem, jaki obecnie mam w tej tabeli, jest indeks klastrowy klucza sprzedaży. Jeśli spojrzę na plan wykonania, SQL Server sugeruje dodanie indeksu obejmującego do tabeli: Teraz, tylko dlatego, że SQL Server sugeruje indeks, nie oznacza, że ​​powinieneś ślepo tworzyć indeksy w każdym cytującym komunikacie o indeksie indeksowym. Jednak w tym przypadku program SQL Server wykrywa, że ​​filtrujemy w oparciu o rok i używa klucza produktu i kwoty sprzedaży. Tak więc SQL Server sugeruje indeks obejmujący, a DataKey jako pole klucza indeksu. Powodem, dla którego nazywamy to wskaźnikiem quotcoveringquot, jest to, że SQL Server będzie cytować wszystkie nieparzyste pola, które wykorzystaliśmy w zapytaniu, dla zapytania "ridequot". W ten sposób SQL Server nie musi używać tabeli lub indeksu klastrowego we wszystkich silnikach bazy danych może po prostu użyć indeksu pokrywającego dla zapytania. Indeksy kryjące są popularne w niektórych scenariuszach baz danych dotyczących hurtowni danych i raportowania, ale kosztem utrzymania silnika bazy danych jest utrzymanie. Uwaga: indeksy okładek istnieją już od dłuższego czasu, więc nie obejmowałem jeszcze indeksu Columnstore i Query Store. Dodam więc indeks obejmujący: Jeśli ponownie wykonam to samo zapytanie, które uruchomiłem przed chwilą (to, które zsumowało kwotę sprzedaży dla każdego produktu), kwerenda czasami wydaje się działać o około sekundę szybciej, a ja dostaję inny plan wykonania, taki, który używa wyszukiwania indeksu zamiast skanowania indeksu (przy użyciu klucza daty na indeksie pokrywającym w celu pobrania sprzedaży za 2009 r.). Tak więc, przed indeksem Columnstore, może to być jeden ze sposobów optymalizacji tego zapytania w starszych wersjach SQL Server. Działa trochę szybciej niż pierwsza, a ja otrzymuję plan wykonania z wyszukiwaniem indeksu zamiast skanowania indeksu. Istnieją jednak pewne problemy: dwa operatory wykonania quotIndex Seekquot i quotHash Match (Aggregate) quot oba zasadniczo obsługują quotrow przez rowquot. Wyobraź to sobie w tabeli z setkami milionów wierszy. Podobne, pomyśl o zawartości tabeli faktów: w tym przypadku pojedyncza wartość klucza daty i jedna wartość klucza produktu mogą być powtarzane w setkach tysięcy wierszy (pamiętaj, że tabela faktów zawiera również klucze do lokalizacji geograficznej, promocji, sprzedawcy itp.) Tak więc, gdy quotIndex Seekquot i quotHash Matchquot działają z rzędu, robią to przez wartości, które mogą się powtarzać w wielu innych wierszach. Zazwyczaj jest to miejsce, w którym przenosisz się do indeksu SQL Server Columnstore, który oferuje scenariusz w celu ulepszenia wydajności tego zapytania w zadziwiający sposób. Ale zanim to zrobię, cofniemy się w czasie. Let39s wrócił do roku 2017, kiedy Microsoft wprowadził dodatek do Excela znany jako PowerPivot. Wiele osób prawdopodobnie pamięta, że ​​widziałem demo PowerPivot dla programu Excel, w którym użytkownik mógł odczytać miliony wierszy z zewnętrznego źródła danych do programu Excel. PowerPivot skompresowałby dane i zapewnił silnik do tworzenia tabel przestawnych i wykresów przestawnych, które działały z zadziwiającymi prędkościami w porównaniu ze skompresowanymi danymi. PowerPivot użył technologii in-memory, którą Microsoft nazwał kwotąVertiPaqquot. Ta wbudowana w PowerPivot technologia in-memory w zasadzie zabrałaby duplikaty kluczowych wartości klucza biznesowego firmy i skompresowała je do pojedynczego wektora. Technologia w pamięci skanowałaby te wartości równolegle, w blokach po kilkaset na raz. Najważniejsze jest to, że Microsoft wypalił dużą liczbę ulepszeń wydajności w funkcji VertiPaq in-memory, którą możemy wykorzystać, tuż za przysłowiowym pudełkiem. Dlaczego przechodzę tę małą przechadzkę ścieżką pamięci Ponieważ w SQL Server 2017 Microsoft wprowadził jedną z najważniejszych funkcji w historii swojego silnika bazy danych: indeks Columnstore. Indeks jest naprawdę indeksem tylko w nazwie: jest to sposób na pobranie tabeli SQL Server i utworzenie skompresowanego magazynu kolumn w pamięci, który kompresuje zduplikowane wartości klucza obcego w dół do pojedynczych wartości wektorowych. Firma Microsoft utworzyła również nową pulę buforów, aby równolegle odczytać te skompresowane wartości wektorowe, co może potencjalnie zwiększyć wydajność. Tak więc, utworzę indeks tabeli kolumn w tabeli i zobaczę, o ile lepiej (i wydajniej) uruchomi się zapytanie, w porównaniu z zapytaniem, które jest uruchamiane względem indeksu pokrywającego. Tak więc utworzę zduplikowaną kopię FactOnlineSales (I39ll nazwie ją FactOnlineSalesDetailNCCS), i utworzę indeks kolumn na zduplikowanej tabeli w ten sposób, że nie będę w żaden sposób ingerował w oryginalną tabelę i indeksu pokrywającego. Następnie utworzymy indeks aukcji kolumn w nowej tabeli: Zwróć uwagę na kilka rzeczy: I39ve określiło kilka kolumn klucza obcego, a także Kwotę sprzedaży. Pamiętaj, że indeks kolumn nie przypomina tradycyjnego indeksu wierszy. Nie ma żadnego quotkeyquot. Po prostu wskazujemy, które kolumny SQL Server powinny skompresować i umieścić w magazynie kolumn w pamięci. Aby użyć analogii programu PowerPivot do programu Excel, gdy tworzymy indeks kolumn, mówimy programowi SQL Server, aby zasadniczo robił to samo, co program PowerPivot, gdy zaimportowaliśmy 20 milionów wierszy do programu Excel przy użyciu programu PowerPivot, więc ponownie uruchom zapytanie, tym razem za pomocą zduplikowana tabela FactOnlineSalesDetailNCCS, która zawiera indeks columnstore. To zapytanie jest uruchamiane natychmiast w czasie krótszym niż sekunda. Mogę też powiedzieć, że nawet gdyby stół miał setki milionów rzędów, nadal działałby na przysłowiową liczbę razy rzutu. Moglibyśmy spojrzeć na plan wykonania (a za kilka chwil będziemy), ale teraz nadszedł czas na pokrycie funkcji Query Store. Wyobraźmy sobie przez chwilę, że uruchomiliśmy oba zapytania przez noc: zapytanie, które używało zwykłej tabeli FactOnlineSales (z indeksem pokrywającym), a następnie zapytanie, które wykorzystywało zduplikowaną tabelę z indeksem Columnstore. Kiedy logujemy się następnego ranka, chcielibyśmy zobaczyć plan wykonania dla obu zapytań, tak jak miało to miejsce, jak również statystyki wykonania. Innymi słowy, chcielibyśmy zobaczyć te same statystyki, które moglibyśmy zobaczyć, gdybyśmy interaktywnie uruchomili oba zapytania w SQL Management Studio, zmienili statystyki TIME i IO i przeglądali plan wykonania zaraz po wykonaniu zapytania. Cóż, to, na co pozwala nam Query Store, możemy włączyć (włączyć) Magazyn zapytań dla bazy danych, co spowoduje, że SQL Server zapisze wykonanie kwerendy i zaplanuje statystyki, abyśmy mogli je później zobaczyć. Tak więc, zamierzam włączyć Query Store w bazie danych Contoso za pomocą następującego polecenia (a także wyczyści wszelkie buforowanie): Następnie uruchomię dwa zapytania (i przytoczę, że prowadziłem je kilka godzin temu): Teraz niech będą udawać, że biegają godzinami temu. Zgodnie z tym, co powiedziałem, Query Store przechwyci statystyki wykonania. Więc jak je wyświetlić Na szczęście, to całkiem proste. Jeśli rozbuduję bazę danych Contoso DW, zobaczę folder Query Store. Sklep Query Store ma ogromną funkcjonalność, a ja postaram się pokryć jego część w kolejnych postach na blogu. Ale na razie chcę wyświetlić statystyki wykonania dla dwóch zapytań, a konkretnie zbadać operatorów wykonawczych dla indeksu columnstore. Tak więc klikamy prawym przyciskiem na kwerendy konsumujące główne zasoby i uruchamiamy tę opcję. To daje mi wykres podobny do poniższego, gdzie widzę czas trwania wykonania (w milisekundach) dla wszystkich zapytań, które zostały wykonane. W tym przypadku zapytanie 1 było kwerendą w stosunku do oryginalnej tabeli z indeksem pokrywającym, a zapytanie 2 było w stosunku do tabeli z indeksem columnstore. Liczby nie pokrywają się, indeks indeksów kolumn przewyższył pierwotny indeks tablecovering o współczynnik prawie 7 do 1. Mogę zmienić metrykę, aby spojrzeć na zużycie pamięci zamiast. W takim przypadku zwróć uwagę, że zapytanie 2 (zapytanie o indeks kolumnowy) zużywa znacznie więcej pamięci. To jasno pokazuje, dlaczego indeks kolumnowy reprezentuje technologię quotin-memoryquot. SQL Server ładuje cały indeks kolumn w pamięci i używa zupełnie innej puli buforów z ulepszonymi operatorami wykonawczymi do przetwarzania indeksu. OK, więc mamy kilka wykresów do wyświetlenia statystyki wykonania możemy zobaczyć plan wykonania (i operatorów wykonawczych) związanych z każdym wykonaniem Tak, możemy Jeśli klikniesz na pionowy pasek dla zapytania, które wykorzystywało indeks kolumny, zobaczysz wykonanie plan poniżej. Pierwszą rzeczą, którą widzimy jest to, że SQL Server wykonał skanowanie indeksu magazynów kolumn, które stanowiło prawie 100 kosztu zapytania. Być może mówisz: "Zaczekaj chwilę", pierwsza kwerenda użyła indeksu obejmującego i wykonała wyszukiwanie indeksu, więc jak można zindeksować indeks aukcji kolumnowej, co jest uzasadnionym pytaniem, i na szczęście jest odpowiedź. Nawet gdy pierwsze zapytanie wykonało wyszukiwanie indeksu, nadal wykonywało ono kwerendę za pomocą rowquot. Jeśli ustawię kursor myszy nad operatorem skanowania indeksu kolumnowego, widzę etykietkę narzędziową (podobną do poniższej), z jednym ważnym ustawieniem: tryb wykonania to BATCH (w przeciwieństwie do ROW, czyli to, co mieliśmy z pierwszym zapytaniem przy użyciu obejmujący indeks). Ten tryb BATCH mówi nam, że SQL Server przetwarza skompresowane wektory (dla dowolnych wartości kluczy obcych, które są duplikowane, takie jak klucz produktu i klucz daty) w partiach o wartości prawie 1000, równolegle. W związku z tym SQL Server nadal może znacznie wydajniej przetwarzać indeks kolumn. Ponadto, jeśli umieścisz mysz nad zadaniem Hash Match (Aggregate), zobaczę także, że SQL Server agreguje indeks kolumnowy za pomocą trybu wsadowego (chociaż sam operator reprezentuje taki mały procent kosztu zapytania). może pytać, quotOK, więc SQL Server kompresuje wartości w danych, traktuje wartości jako wektory i czyta je w blokach o wartości prawie tysiąca równolegle, ale moje zapytanie dotyczyło tylko danych z 2009 r. Tak więc skanowanie SQL Server przez cały zestaw danych Jeszcze raz, dobre pytanie. Odpowiedź brzmi: quotNot reallyquot. Na szczęście dla nas nowa pula buforów indeksów kolumnowych wykonuje inną funkcję o nazwie quasi-eliminationquot. Zasadniczo, SQL Server zbada wartości wektorowe dla kolumny klucza daty w indeksie columnstore i wyeliminuje segmenty, które nie mieszczą się w zakresie roku 2009. Zatrzymam się tutaj. W kolejnych postach na blogu omówię bardziej szczegółowo zarówno indeks kolumnowy, jak i Magazyn kwerend. Zasadniczo, to, co widzieliśmy tutaj dzisiaj, to fakt, że indeks Columnstore znacznie przyspiesza zapytania, które skanują dane dużej ilości danych, a sklep kwerendy przechwytuje wykonywanie zapytań i pozwala nam później analizować statystyki wykonania i wydajności. W końcu chcielibyśmy stworzyć zestaw wyników, który pokazuje: Zwróć uwagę na trzy rzeczy: Kolumny zasadniczo przestawiają wszystkie możliwe przyczyny zwrotu, po wyświetleniu kwoty sprzedaży Zestaw wyników zawiera sumy częściowe według daty zakończenia tygodnia (niedziela) dla wszystkich klientów (gdzie klient ma wartość NULL) Zestaw wyników zawiera sumę całkowitą wiersz (gdzie klient i data są NULL) Najpierw, zanim dojdę do końca SQL, możemy użyć funkcji dynamicznego pivotmatrix w SSRS. Musielibyśmy po prostu połączyć dwa zbiory wyników przez jedną kolumnę, a następnie moglibyśmy przekazać wyniki do kontrolki macierzy SSRS, która rozłoży powody powrotu na oś kolumny raportu. Jednak nie wszyscy korzystają z usług SSRS (choć większość osób powinna). Ale nawet wtedy, czasami programiści muszą konsumować zestawy wyników w coś innego niż narzędzie do raportowania. Tak więc dla tego przykładu załóżmy, że chcemy wygenerować zestaw wyników dla strony siatki sieciowej i być może deweloper chce przetasować rzędy sumy częściowej (gdzie mam wartość ResultSetNum 2 i 3) i umieścić je w siatce podsumowania. Tak więc na dole, musimy wygenerować wynik powyżej bezpośrednio z procedury przechowywanej. I jako dodatkowy zwrot w przyszłym tygodniu może pojawić się Powód Powód X, Y i Z. Nie wiemy, ile może być przyczyn powrotu. Chcemy, aby zapytanie przestawiło się na możliwe odrębne wartości przyczyny powrotu. Tutaj, gdzie PIVOT T-SQL ma ograniczenie, musimy podać mu możliwe wartości. Ponieważ nie wiemy, że do czasu wykonania musimy dynamicznie generować ciąg zapytania przy użyciu dynamicznego wzorca SQL. Dynamiczny wzorzec SQL obejmuje generowanie składni, kawałek po kawałku, przechowywanie jej w łańcuchu, a następnie wykonywanie łańcucha na końcu. Dynamiczny SQL może być trudny, ponieważ musimy osadzić składnię wewnątrz łańcucha. Ale w tym przypadku jest to nasza jedyna prawdziwa opcja, jeśli chcemy obsłużyć zmienną liczbę powodów zwrotu. Zawsze odkryłem, że najlepszym sposobem na stworzenie dynamicznego rozwiązania SQL jest ustalenie, na czym polega kwerenda generowana przez kwerendę pod koniec (w tym przypadku, biorąc pod uwagę powody, o których wiemy), a następnie inżynieria odwrotna poprzez ukształtowanie to razem jedna część na raz. Tak więc potrzebujemy SQL, jeśli wiedzieliśmy, że te Powody Powrotu (od A do D) były statyczne i nie uległy zmianie. Kwerenda wykonuje następujące czynności: Łączy dane z SalesData z danymi z ReturnData, gdzie my quothard-wirequot słowo Sales jako typ akcji z tabeli sprzedaży, a następnie użyj Powrotu Powodu z Danych Zwrotnych do tej samej kolumny ActionType. To da nam czystą kolumnę ActionType, na której będzie się obracać. Łączymy dwie instrukcje SELECT do wspólnego wyrażenia tabelowego (CTE), które jest w zasadzie pochodnym podzapytaniem tabeli, które następnie wykorzystujemy w następnej instrukcji (do PIVOT) Oświadczenie PIVOT przeciwko CTE, które sumuje dolary dla typu działania będąc w jednej z możliwych wartości typu działania. Zauważ, że to nie jest końcowy zestaw wyników. Umieszczamy to w CTE, który czyta od pierwszego CTE. Powodem tego jest to, że chcemy na końcu utworzyć wiele grupowań. Ostatnia instrukcja SELECT, która czyta się z PIVOTCTE, i łączy ją z kolejnym zapytaniem z tym samym PIVOTCTE, ale gdzie implementujemy również dwie grupy w funkcji GROUPING SETS w SQL 2008: GROUPING według daty zakończenia tygodnia (dbo. WeekEndingDate) GROUPING dla wszystkich wierszy () Więc jeśli wiedzieliśmy z pewnością, że nigdy nie będziemy mieć więcej kodów powodu powrotu, to byłoby to rozwiązanie. Musimy jednak uwzględnić inne kody przyczyn. Musimy więc wygenerować całe powyższe zapytanie jako jeden duży ciąg, w którym skonstruujemy możliwe przyczyny zwrotu jako jedną oddzieloną przecinkami listę. Będę pokazywał cały kod T-SQL, aby wygenerować (i wykonać) żądane zapytanie. A potem podzielę je na części i wyjaśnię każdy krok. Najpierw więc cały kod dynamicznie generuje to, co wyżej. Zasadniczo mamy pięć kroków, które musimy pokonać. Krok 1 . wiemy, że gdzieś w miksie, musimy wygenerować ciąg znaków w zapytaniu: SalesAmount, Reason A, Reason B, Reason C, Reason D0160016001600160 Co możemy zrobić, to zbudować tymczasowe wspólne wyrażenie tabelowe, które łączy hard przewodowy quotSales Kolumna Amountquot z unikalną listą możliwych kodów przyczyn. Gdy mamy to w CTE, możemy użyć miłego, małego triku FOR PATH XML (3939), aby zwinąć te wiersze w jeden ciąg znaków, umieścić przecinek przed każdym wierszem, który czyta zapytanie, a następnie użyć narzędzia STUFF do zastąpienia pierwsze wystąpienie przecinka z pustą przestrzenią. Jest to sztuczka, którą można znaleźć na setkach blogów SQL. Tak więc ta pierwsza część buduje łańcuch o nazwie ActionString, którego możemy użyć dalej. Krok 2 . wiemy również, że będziemy chcieli SUMA kolumny generowanej ze źródłem generowanym, wraz ze standardową kolumną sprzedaży. Potrzebujemy więc osobnego napisu, który wywoła SUMSTRING. Po prostu użyję oryginalnego ActionString, a następnie zamienię nawiasy zewnętrzne na składnię SUM plus oryginalne nawiasy. Krok 3: Teraz zaczyna się prawdziwa praca. Używając tego pierwotnego zapytania jako modelu, chcemy wygenerować oryginalne zapytanie (zaczynając od UNION z dwóch tabel), ale zastępując wszelkie odwołania do kolumn wychylonych ciągami, które generowaliśmy dynamicznie powyżej. Ponadto, chociaż nie jest to bezwzględnie wymagane, utworzyłem także zmienną, aby po prostu wszystkie kombinacje kanałów powrotu linii karetki, które chcemy osadzić w generowanym zapytaniu (dla czytelności). Więc skonstruujemy całe zapytanie do zmiennej o nazwie SQLPivotQuery. Krok 4. Kontynuujemy konstruowanie zapytania ponownie, łącząc składnię, którą możemy potajemnie łączyć z ActionSelectString (który generowaliśmy dynamicznie, aby zachować wszystkie możliwe wartości powodu powrotu) Krok 5. Na koniec wygenerujemy końcową część zapytania Pivot, która będzie czytać z drugiego wspólnego wyrażenia tabelowego (PIVOTCTE, z powyższego modelu) i wygeneruje ostateczny SELECT, aby odczytać z PIVOTCTE i połączyć go z drugim czytanym przed PIVOTCTE, aby zaimplementuj zestawy grupujące. Na koniec możemy przetworzyć ciąg tekstowy przy użyciu zapisanego w systemie SQL proc spexecuteSQL. Mam nadzieję, że możesz zobaczyć, że proces do wykonania dla tego typu wysiłku jest określony. Określ, jakie będzie ostateczne zapytanie, na podstawie bieżącego zestawu danych i wartości (np. model zapytania) Napisz niezbędny kod T-SQL, aby wygenerować model zapytania jako ciąg znaków. Prawdopodobnie najważniejszą częścią jest ustalenie unikalnego zestawu wartości, na którym się PIVOT, a następnie zwijanie ich w jeden ciąg za pomocą funkcji STUFF i sztuczki FOR XML PATH (3939) Więc co dziś mam na myśli Cóż, co najmniej 13 pozycji Dwa lata temu napisałem projekt BDR, który skupił się (częściowo) na roli edukacji i wartości dobrego środowiska sztuk wyzwolonych nie tylko dla branży oprogramowania, ale także dla innych branż. Jeden z tematów tego konkretnego BDR podkreślił kluczowy i oświecony punkt widzenia od renomowanego architekta oprogramowania Allena Holuba w odniesieniu do sztuk wyzwolonych. Zły (wiernie) parafrazuje jego przesłanie: podkreślił paralele między programowaniem a studiowaniem historii, przypominając wszystkim, że historia czyta i pisze (i dodajemy, identyfikują wzorce), a tworzenie oprogramowania to także czytanie i pisanie (i znowu identyfikowanie wzorców ). Napisałem więc opinię, która dotyczyła tego i innych powiązanych tematów. Ale do dzisiaj nigdy nie udało mi się opublikować tej publikacji. Co jakiś czas zastanawiam się nad jego rewizją, a nawet usiądę na kilka minut i wprowadzę pewne poprawki. Ale wtedy życie w ogóle stanąłoby na przeszkodzie i nigdy go nie dokończyłem. Co zmieniło się Kilka tygodni temu, felietonista magazynu CoDe i lider branży Ted Neward napisali artykuł w jego regularnej kolumnie Managed Coder, która przykuła moją uwagę. Tytuł artykułu brzmi O sztuce liberalnej. i bardzo polecam wszystkim, żeby to przeczytali. Ted omawia wartość liberalnego środowiska artystycznego, fałszywą dychotomię między tłem sztuki liberalnej a sukcesem w rozwoju oprogramowania, a także potrzebę dobrze napisanej komunikacji. Opowiada o swoich wcześniejszych spotkaniach z kierownictwem HR w zakresie wykształcenia. Podkreśla także potrzebę zaakceptowania zmian w naszej branży i dostosowania się do nich, a także cech charakterystycznych odnoszących sukcesy profesjonalistów w dziedzinie oprogramowania (niezawodność, planowanie z wyprzedzeniem i uczenie się, jak uniknąć początkowych konfliktów z innymi członkami zespołu). A więc jest to świetna lektura, podobnie jak inne artykuły CoDe i wpisy na blogach Teda. To także sprawiło, że wróciłem do myślenia o moich poglądach na ten temat (i inne tematy), i ostatecznie zmotywowało mnie do ukończenia własnego artykułu redakcyjnego. Tak więc, lepiej późno niż wcale, oto mój obecny Bakers Dozen of Reflections: Mam takie powiedzenie: Woda zamarza na poziomie 32 stopni. Jeśli jesteś w roli szkolenia, możesz myśleć, że robisz wszystko na świecie, aby komuś pomóc, kiedy w rzeczywistości czujesz tylko temperaturę 34 stopni, a więc rzeczy nie są dla nich stabilne. Czasami wymaga to nieco więcej wysiłku lub innego ideologicznego katalizatora lub nowej perspektywy, co oznacza, że ​​osoby z wcześniejszą edukacją mogą czerpać z różnych źródeł. Woda zamarza w temperaturze 32 stopni. Niektórzy ludzie mogą utrzymać wysoki poziom koncentracji nawet w pomieszczeniu pełnym hałaśliwych ludzi. Nie jestem jedną z nich od czasu do czasu potrzebuję trochę prywatności, aby przemyśleć krytyczny problem. Niektórzy opisują to, ponieważ musisz nauczyć się od niego odchodzić. Innymi słowy, jest to poszukiwanie rozrzedzonego powietrza. W zeszłym tygodniu spędziłem godziny w półświecie, cichym pokoju z tablicą, dopóki nie zrozumiałem w pełni problemu. Dopiero wtedy mogłem porozmawiać z innymi programistami na temat rozwiązania. Nie chodzi tu o to, aby nauczać, w jaki sposób powinieneś zająć się rozwiązywaniem problemów, ale raczej, aby każdy znał swoje mocne strony i to, co działa, i wykorzystał je na swoją korzyść w jak największym stopniu. Niektóre wyrażenia są dla mnie jak paznokcie na tablicy. Użyj go jako momentu nauczania, to jeden. (Dlaczego jest tak jak paznokcie na tablicy szkolnej, ponieważ jeśli jesteś w roli mentora, zazwyczaj powinieneś uczyć się trybu chwilowego, jednak subtelnie). Oto inny, którego naprawdę nie potrafię wyjaśnić słowami, ale rozumiem to. To może zabrzmieć trochę zimno, ale jeśli ktoś naprawdę nie może wyjaśnić czegoś w słowach, może nie rozumieją. Jasne, człowiek może mieć niewyraźne poczucie tego, jak coś działa. Mogę blefować, opisując, jak działa cyfrowy aparat fotograficzny, ale prawda jest taka, że ​​tak naprawdę nie rozumiem tego dobrze. Istnieje dziedzina badań znana jako epistemologia (badanie wiedzy). Jedną z podstawowych zasad rozumienia, czy jest to kamera czy wzór wzorcowy - jest umiejętność ustalenia kontekstu, identyfikacji łańcucha powiązanych zdarzeń, atrybutów dowolnych komponentów po drodze itp. Tak, zrozumienie jest czasem bardzo ciężką pracą , ale zanurzenie się w temacie i rozbicie go jest warte wysiłku. Nawet ci, którzy unikają certyfikacji, uznają, że proces nauki w celu testów certyfikacyjnych pomoże wypełnić luki w wiedzy. Menedżer bazy danych jest bardziej skłonny zatrudnić programistę baz danych, który potrafi mówić na odległość (i bez wysiłku) o poziomach i wyzwalaczach transakcji, w przeciwieństwie do kogoś, kto coś o tym wie, ale stara się opisać ich użycie. Oto kolejna przyczyna. Ted Neward zaleca, aby programiści zajmowali się wystąpieniami publicznymi, blogowaniem itp. Zgadzam się. 100. Proces publicznego przemawiania i blogowania praktycznie zmusi cię do zastanowienia się nad tematami i przełamania definicji, które mogłeś uznać za oczywiste. Kilka lat temu wydawało mi się, że dobrze rozumiem instrukcję T-SQL MERGE. Ale dopiero po napisaniu o tym, mówieniu o, zadawaniu pytań innym, którzy mieli perspektywy, które nigdy nie przyszło mi do głowy, że mój poziom zrozumienia wzrósł wykładniczo. Znam historię menedżera ds. Rekrutacji, który kiedyś przeprowadził wywiad z twórcą oprogramowania na zlecenie. Menedżer ds. Rekrutacji lekceważył ogólnie publikacje i szczekał do skarżącego. Jeśli więc zamierzasz tu pracować, wolałbyś pisać książki lub pisać kodki Tak, przyznaję, że w każdej branży będzie kilku czystych pracowników akademickich. Ale to, co przeoczył menedżer ds. Zatrudnienia, było szansą na wzmocnienie i wyostrzenie umiejętności. Podczas sprzątania starego pudełka z książkami natknąłem się na skarb z lat 80. XX wieku: Programmers at Work. zawiera wywiady z bardzo młodym Billem Gatesem, Rayem Ozzie i innymi znanymi nazwiskami. Każda rozmowa i każdy wgląd są warte ceny książki. Moim zdaniem najciekawszym wywiadem był Butler Lampson. który dał mocną radę. Do diabła z umiejętnościami komputerowymi. To absolutnie niedorzeczne. Studiuj matematykę. Naucz się myśleć. Czytać. Pisać. Te rzeczy mają bardziej trwałą wartość. Dowiedz się, jak udowodnić twierdzenia: Wiele dowodów zgromadziło się na przestrzeni wieków, co sugeruje, że umiejętność ta można przenieść na wiele innych rzeczy. Butler mówi prawdę. Dodam do tego, że nauczyłem się grać w diabły przeciwko sobie. Im więcej możesz sprawdzić rzeczywistych procesów i pracy, tym lepiej. Wielki naukowiec komputerowy, autor Allen Holub, powiązał rozwój oprogramowania ze sztuką liberalną, stanowiącą przedmiot historii. Oto jego punkt: czym jest historia Czytanie i pisanie. Co to jest rozwój oprogramowania Między innymi, czytanie i pisanie. Dawałem uczniom pytania do eseju o t-SQL jako testy praktyczne. Jeden z uczniów żartował, że zachowałem się jak profesor prawa. Cóż, tak jak powiedział trener Donny Haskins w filmie Glory Road, moja droga jest ciężka. Mocno wierzę w mocne fundamenty intelektualne dla każdego zawodu. Podobnie jak aplikacje mogą czerpać korzyści z frameworków, jednostki i ich procesy myślowe mogą również korzystać z ludzkich frameworków. To podstawowa podstawa stypendium. W latach 70. ubiegłego wieku IBM rozszerzył swoje działania rekrutacyjne na głównych uniwersytetach, koncentrując się na najlepszych i najjaśniejszych absolwentach sztuk wyzwolonych. Nawet wtedy uznali, że najlepsi czytelnicy i pisarze mogą pewnego dnia zostać silnymi analitykami systemów programistycznych. (Możesz użyć tej historii dla każdego typu HR, który nalega, aby kandydat posiadał dyplom z informatyki). Mówiąc o historii: jeśli z jakiegokolwiek innego powodu ważne jest, aby pamiętać historię wydań produktu, jeśli pracuję w strony klienta, która wciąż używa SQL Server 2008 lub nawet (gasp) SQL Server 2005, muszę pamiętać, jakie funkcje zostały zaimplementowane w wersjach w czasie. Zawsze miałeś ulubionego doktora, którego lubiłeś, ponieważ on wyjaśnił rzeczy po angielsku, dał ci prostą prawdę i zdobył zaufanie, by działać na ciebie. Te szalone umiejętności. i są wynikiem doświadczenia i ciężkiej pracy, która trwa latami, a nawet dziesięcioleciami, aby ją kultywować. Nie ma gwarancji sukcesu w pracy, skupiając się na faktach, podejmuj kilka obliczonych ryzyk, gdy jesteś pewien, że widzisz drogę do mety, pozwól, aby chipy spadały tam, gdzie mogą, i nigdy nie stracić z oczu, że jesteś tak jak ten doktor, który zarobił Twoje zaufanie. Mimo że w niektóre dni nie mam racji, staram się traktować mojego klienta i jego dane, ponieważ lekarz będzie leczył pacjentów. Nawet jeśli lekarz zarabia więcej pieniędzy Jest wiele stereotypów, których nienawidzę, ale takich, których nie nienawidzę: Nie ma czegoś takiego jak złe pytanie. Jako były instruktor, jedną rzecz, która wywołała mój gniew, było słuchanie kogoś, kto krytykuje inną osobę za zadające rzekomo głupie pytanie. Pytanie wskazuje, że dana osoba przyznaje, że ma lukę w wiedzy, którą chce wypełnić. Tak, niektóre pytania są lepiej sformułowane niż inne, a niektóre pytania wymagają dodatkowych ramek, zanim można będzie na nie odpowiedzieć. Ale droga od sformułowania pytania do odpowiedzi może wywołać aktywny proces mentalny w innych. Są wszystkie DOBRE rzeczy. Wiele dobrych i owocnych dyskusji powstaje z głupiego pytania. Pracuję w systemie SSIS, SSAS, SSRS, MDX, PPS, SharePoint, Power BI, DAX, wszystkie narzędzia w stosie Microsoft BI. Nadal piszę jakiś kod od czasu do czasu. Ale zgadnij, ile czasu spędzam na pisaniu kodu T-SQL do danych profilu w ramach procesu wykrywania. Wszyscy twórcy aplikacji powinni mieć dobre T-SQL. Ted Neward pisze (poprawnie) o potrzebie dostosowania się do zmian technologicznych. Dodaję do tego potrzebę dostosowania się do zmian pracodawcy-klienta. Firmy zmieniają reguły biznesowe. Firmy przejmują inne firmy (lub stają się celem przejęcia). Firmy popełniają błędy w komunikowaniu wymagań biznesowych i specyfikacji. Tak, czasami możemy odegrać pewną rolę w pomaganiu w zarządzaniu tymi zmianami, a czasem były muchą, a nie przednią szybą. Te czasami powodują wielki ból dla wszystkich, szczególnie dla I. T. ludzie. To dlatego istnieje pojęcie "fakt istnienia", z którym mamy do czynienia. Tak jak żaden programista nie pisze za każdym razem kodu wolnego od błędów, no I. T. osoba radzi sobie dobrze ze zmianą za każdym razem. Jedną z największych zmagań, jakie miałem w ciągu moich 28 lat w tej branży, jest cierpliwość i powściągliwość, gdy zmiany lecą z wielu różnych kierunków. Tutaj może pomóc mi moja wcześniejsza sugestia dotycząca poszukiwania spreparowanego powietrza. Jeśli uda ci się przyswoić zmiany w procesie myślowym i nie poczujesz się przytłoczony, szanse na przetrwanie będą znaczącym atutem. W ciągu ostatnich 15 miesięcy musiałem zmierzyć się z ogromną ilością zmian zawodowych. Czasami było to bardzo trudne, ale postanowiłem, że ta zmiana będzie normą. Ive starał się dostosować własne nawyki najlepiej jak potrafię, aby poradzić sobie z częstymi (i niepewnymi) zmianami. Jest twardy, bardzo twardy. Ale jak powiedział trener Jimmy Duggan w filmie A League of Their Own: Oczywiście jest to trudne. Gdyby nie było ciężko, wszyscy by to zrobili. Twarde, co czyni go doskonałym. Mocna wiadomość. W branży od kilku lat mówi się o postępach na profesjonalnych konferencjach (i postępowaniu w branży jako całości). Wielu szanowanych pisarzy napisało bardzo dobre artykuły na ten temat. Oto mój wkład, jaki on jest wart. 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, 2017 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 11102017). 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, 2017 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, 2017 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. So there you have it. 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. Designing a Modern Data Warehouse Data Lake Join us for a discussion of strategies and architecture options for implementing a modern data warehousing environment. We will explore advantages of augmenting an existing data warehouse investment with a data lake, and ideas for organizing the data lake for optimal data retrieval. We will also look at situations when federated queries are appropriate for employing data virtualization, and how federated queries work with SQL Server, Azure SQL DB, Azure SQL DW, Azure Data Lake, andor Azure Blob Storage. Level: This is an intermediate session suitable for attendees who are familiar with data warehousing fundamentals. Fundamentals of Designing a Data Warehouse In this session we will review sensible techniques for developing a data warehousing environment which is relevant, agile, and extensible. We will cover practical dimensional modeling fundamentals and design patterns, along with when to use techniques such as partitioning or clustered columnstore indexes in SQL Server. Well also review tips for using a database project in SQL Server Data Tools (SSDT) effectively. The session will conclude with tips for planning the future growth of your data warehouse. Level: This is an introductory session best suited to attendees who are new to data warehousing concepts. SQL Malibu User Group. San Fernando Valley, CA - Feb 15, 2017 Pearl Hacks. Chapel Hill, NC - Feb 11, 2017 (an informal workshopwhiteboarding version of this presentation) SQL Saturday BI Edition. Atlanta, GA - Dec 10, 2018 (under previous title: Good Habits of a DW Developer) Building Blocks of Cortana Intelligence Suite in Azure Join us for a practical look at the components of Cortana Intelligence Suite for information management, data storage, analytics, and visualization. Purpose, capabilities, and use cases for each component of the suite will be discussed. If you are a technology professional who is involved with delivering business intelligence, analytics, data warehousing, or big data utilizing Azure services, this technical overview will help you gain familiarity with the components of Cortana Intelligence Suite and its potential for delivering value. Level: A fast-moving introductory session Target Audience: Technology professionals seeking to gain a high level understanding of the capabilities of the Cortana Intelligence Suite Power BI: Architecture, Integration Points, Implementation Options In this session we will review Power BI implementation approaches, architecture, delivery options, authoring tools, data access methods, data refresh options, security, as well as functionality for sharing and distributing content. Components of cloud, on-premises, and hybrid approaches will be explored. We will conclude with the concept of Bimodal BI with use cases for how Power BI might be utilized for both self-service BI and certain corporate BI initiatives. Level: A fast-moving introductory session Target Audience: Technology professionals seeking to understand the system components This session has evolved and was previously known as Power BI: Architecture, Use Cases, Strengths, and Shortcomings Administering and Managing the Power BI Environment (V1 - Power BI for Office 365) Power BI for Office 365 is Microsofts new self-service BI offering. Just because it emphasizes self-service doesnt mean a system administrator isnt an important role In this session we will discuss the overall system components and how a Power BI site in SharePoint Online differs from an on-premises SharePoint BI site. We will walk through how to best handle setting up connectivity to data sources, when a gateway is needed, and what data refresh capabilities exist. We will also consider how and when to create OData feeds from your corporate on-premises data sources and how those OData feeds affect Enterprise Data Search functionality. Level: A fast-moving introductory session Power BI Architecture amp Functionality in SharePoint Online (V1 - Power BI for Office 365) Power BI for Office 365 is Microsofts new business intelligence offering which utilizes SharePoint Online and Office functionality. In this session we will discuss and demonstrate the key components of this hybrid cloud environment and what the prerequisites are for a Power BI site. Some key differences between a Power BI site in SharePoint Online versus a SharePoint BI site will be explored. We will conclude with a review of data connectivity options to be aware of. Maximizing the Data Exploration Capabilities of Power View Description: Would business users in your organization love to get their hands on an interactive, visually-oriented, data exploration tool If so, Power View may be a useful addition to your BI environment to handle certain types of self-service reporting requirements. In this session we will demonstrate the features and functionality of Power View including highlighting, cross-filtering, play axis, small multiples, tiles, cards, maps, filtering, and exporting. We will identify which situations Power View is most suited for, as well as its strengths and limitations. Capabilities in SharePoint 20172017 vs. Excel 2017 will be reviewed, as well as restrictions on types of data sources allowed. We will also discuss how to prepare a dataset in order to maximize the usability and functionality of Power View. The Lifecycle of a Reporting Services Report Description: In this session we will discuss various tips and best practices as we follow a report through its lifecycle via an end-to-end demo. Beginning with a discussion of requirements and useful templates, we will progress to a review of good report development and standardization practices, followed by suggestions for testing and validation. Next we will consider alternatives for deployment, report delivery, and handling ongoing enhancements and bug fixes. The lifecycle will wrap up with a discussion of maintenance and administration of the reporting environment. Tools and Techniques for Implementing Corporate and Self-Service BI Description: Business Intelligence requirements frequently change and having only a Corporate BI solution can result in slower delivery cycles and information backlogs. Yet the introduction of Self-Service BI introduces challenges around governance, change management, standardization, training, support, and access to unregulated data sources. In this session we will consider the benefits, obstacles, and techniques for integrating Self-Service and Corporate BI. Demonstrations of Microsoft BI tools will include Power Pivot, Power Query, Power View, Power Map, Excel, and SharePoint 2017. So You Want To Be a Rockstar Report Developer Description: You dont want to settle for being an average report developer, right In this session well walk through an end-to-end demo as we discuss various development, standardization, deployment, and documentation practices that will make your SSRS development life easier, your output of higher quality, increase maintainability, and ultimately save you time. Audience participation and sharing of experiences is encouraged as we cover choices you have for datasets, sorting, grouping, filtering, calculations, parameters, deployment, and delivery. This session focuses primarily on SQL Server Reporting Services 2017, although some concepts may apply to other BI tools as well. Managing the Power Pivot for SharePoint Environment Description: In this session we will discuss management of data models and reports stored in the Power Pivot Gallery document library. Data Refresh and security considerations will be reviewed in depth. The relational and SSAS databases present in a Power Pivot for SharePoint environment will be introduced, as well as options for reporting on usage and other key metrics. This session, which is applicable to SharePoint 2017 and 2017, will help you become prepared to tackle the support aspects of a Power Pivot for SharePoint environment. Managed Self-Service BI Traditional Business Intelligence is changing you heard about the ambitious data analyst down the hall who created a mashup of data from the internal data warehouse Excel an Azure feed Empowering knowledge workers is Microsofts vision of delivering BI for the Masses. In this session we will dismiss the hype amp examine how this new world of Managed Self-Service BI complements Corporate BI in SQL Server 2017 and SharePoint 20172017. Provide overview of each Self-Service component and expectations for its use: PowerPivot Excel Services Power View Report Builder Discuss techniques to successfully monitor, secure, amp manage the Self-Service BI environment Dashboards. How To Choose Which MSBI Tool Description: The Microsoft Business Intelligence (MSBI) stack has a few choices for visualization. We will explore options, flexibility, limitations, and ease of use for creating dashboards amp scorecards with: PerformancePoint Services 2017 Reporting Services 2008 R2 SharePoint Server 2017 PowerPivot Power View This session will be a fun one We will compare and contrast options available in each tool, such as: charts, gauges, maps, indicators, sparklines, data bars, and decomposition trees. Examine strengths of each tool related to meeting data visualization requirements Compare and contrast common visualization options available in each tool Conclude when you might choose one tool in the Microsoft BI stack versus anotherRelays - Power A relay is the generic term for a device that allows a small voltage or current to switch the power to a much larger electrical load. The most common relay is the mechanical relay . It employs a magnetic coil and contacts which physically move. When a small voltage is applied to the relays coil, it physically closes its contacts to allow the main power to pass. One advantage to a mechanical relay is the ease with which the low power signal voltage to the coil and the power for the main load itself can be completely isolated from one another. If a relay is made to switch very large loads, such as those for a motor, another term used to describe it is contactor. Solid state relays (SSRs) have no moving parts. The signal voltage switches the main load power through a semiconductor device. Since the solid state relays dont have parts that can wear, they offer a higher reliability in the long run as compared to mechanical relays, but SSRs are more susceptible to electrical inference, and on average SSRs are often limited in their power handling capabilities, as compared to mechanical relays . Power Relays, Solid State Relay, Mechanical Relay We offer a full line of high quality, name brand mechanical relays as well as solid state relays Power Relays, Solid State Relay, Mechanical Relay Copyright 1997-2017 Marlin P. Jones Assoc. Inc. - All Rights Reserved Send mail to MPJA, Inc. with questions or comments about this web site. Site Designed by NiteOwl Computing

No comments:

Post a Comment