Flytting Gjennomsnitt Uten Lagringsverdier
Introduksjon til ARIMA: nonseasonal modeller ARIMA (p, d, q) prognoser likning: ARIMA modeller er i teorien den mest generelle klassen av modeller for å prognose en tidsserie som kan gjøres til å være 8220stationary8221 ved differensiering (om nødvendig), kanskje i forbindelse med ikke-lineære transformasjoner som logging eller deflatering (om nødvendig). En tilfeldig variabel som er en tidsserie er stasjonær hvis dens statistiske egenskaper er konstante over tid. En stasjonær serie har ingen trend, dens variasjoner rundt sin gjennomsnitt har en konstant amplitude, og den svinger på en konsistent måte. det vil si at kortsiktige tilfeldige tidsmønstre alltid ser like ut i statistisk forstand. Den sistnevnte tilstanden betyr at dets autokorrelasjoner (korrelasjoner med sine egne tidligere avvik fra gjennomsnittet) forblir konstante over tid, eller tilsvarende, at dets effektspektrum forblir konstant over tid. En tilfeldig variabel i dette skjemaet kan ses som en kombinasjon av signal og støy, og signalet (hvis det er tydelig) kan være et mønster av rask eller langsom, gjennomsnittlig reversering eller sinusformet svingning eller rask veksling i tegn , og det kan også ha en sesongbestemt komponent. En ARIMA-modell kan ses som en 8220filter8221 som forsøker å skille signalet fra støyen, og signalet blir deretter ekstrapolert inn i fremtiden for å oppnå prognoser. ARIMA-prognose-ligningen for en stasjonær tidsserie er en lineær (dvs. regresjonstype) ekvation hvor prediktorene består av lag av de avhengige variable ogor lagene av prognosefeilene. Det er: Forutsigbar verdi for Y en konstant og en vektet sum av en eller flere nylige verdier av Y og eller en vektet sum av en eller flere nylige verdier av feilene. Hvis prediktorene kun består av forsinkede verdier av Y. Det er en ren autoregressiv (8220self-regressed8221) modell, som bare er et spesielt tilfelle av en regresjonsmodell, og som kunne være utstyrt med standard regresjonsprogramvare. For eksempel er en førsteordens autoregressiv (8220AR (1) 8221) modell for Y en enkel regresjonsmodell der den uavhengige variabelen bare er Y forsinket med en periode (LAG (Y, 1) i Statgraphics eller YLAG1 i RegressIt). Hvis noen av prediktorene er lags av feilene, er en ARIMA-modell det IKKE en lineær regresjonsmodell, fordi det ikke er mulig å spesifisere 8220last period8217s error8221 som en uavhengig variabel: feilene må beregnes fra tid til annen når modellen er montert på dataene. Fra et teknisk synspunkt er problemet med å bruke forsinkede feil som prediktorer at modellen8217s spådommer ikke er lineære funksjoner av koeffisientene. selv om de er lineære funksjoner av tidligere data. Så koeffisienter i ARIMA-modeller som inkluderer forsinkede feil må estimeres ved ikke-lineære optimaliseringsmetoder (8220hill-klatring8221) i stedet for bare å løse et system av ligninger. Akronymet ARIMA står for Auto-Regressive Integrated Moving Average. Lags av den stasjonære serien i prognosekvotasjonen kalles kvotoregressivequot vilkår, lags av prognosefeilene kalles quotmoving averagequot vilkår, og en tidsserie som må differensieres for å bli stillestående, sies å være en quotintegratedquot-versjon av en stasjonær serie. Tilfeldige gange og tilfeldige trendmodeller, autoregressive modeller og eksponentielle utjevningsmodeller er alle spesielle tilfeller av ARIMA-modeller. En nonseasonal ARIMA-modell er klassifisert som en quotARIMA (p, d, q) kvotemodell hvor: p er antall autoregressive termer, d er antall ikke-sekundære forskjeller som trengs for stasjonar, og q er antall forsinkede prognosefeil i prediksjonsligningen. Forutsigelsesligningen er konstruert som følger. Først, la y angi den forskjellen på Y. Det betyr: Merk at den andre forskjellen på Y (d2-saken) ikke er forskjellen fra 2 perioder siden. Snarere er det den første forskjellen-av-første forskjellen. som er den diskrete analogen til et andre derivat, det vil si den lokale akselerasjonen av serien i stedet for sin lokale trend. Når det gjelder y. Den generelle prognosekvasjonen er: Her er de bevegelige gjennomsnittsparametrene (9528217s) definert slik at deres tegn er negative i ligningen, etter konvensjonen innført av Box og Jenkins. Noen forfattere og programvare (inkludert R programmeringsspråket) definerer dem slik at de har pluss tegn i stedet. Når faktiske tall er koblet til ligningen, er det ingen tvetydighet, men det er viktig å vite hvilken konvensjon programvaren bruker når du leser utgangen. Ofte er parametrene benevnt der av AR (1), AR (2), 8230 og MA (1), MA (2), 8230 etc. For å identifisere den aktuelle ARIMA modellen for Y. begynner du ved å bestemme differensordren (d) trenger å stasjonærisere serien og fjerne bruttoegenskapene til sesongmessighet, kanskje i forbindelse med en variansstabiliserende transformasjon som logging eller deflating. Hvis du stopper på dette punktet og forutser at den forskjellige serien er konstant, har du bare montert en tilfeldig tur eller tilfeldig trendmodell. Den stasjonære serien kan imidlertid fortsatt ha autokorrelerte feil, noe som tyder på at noen antall AR-termer (p 8805 1) og eller noen nummer MA-termer (q 8805 1) også er nødvendig i prognosekvasjonen. Prosessen med å bestemme verdiene p, d og q som er best for en gitt tidsserie, vil bli diskutert i senere avsnitt av notatene (hvis koblinger er øverst på denne siden), men en forhåndsvisning av noen av typene av nonseasonal ARIMA-modeller som ofte oppstår, er gitt nedenfor. ARIMA (1,0,0) førstegangs autoregressiv modell: Hvis serien er stasjonær og autokorrelert, kan den kanskje forutsies som et flertall av sin egen tidligere verdi, pluss en konstant. Forutsigelsesligningen i dette tilfellet er 8230 som er Y regressert i seg selv forsinket med en periode. Dette er en 8220ARIMA (1,0,0) constant8221 modell. Hvis gjennomsnittet av Y er null, vil ikke det konstante begrepet bli inkludert. Hvis hellingskoeffisienten 981 1 er positiv og mindre enn 1 i størrelsesorden (den må være mindre enn 1 i størrelsesorden dersom Y er stasjonær), beskriver modellen gjennomsnittsreferanseadferd hvor neste periode8217s verdi skal anslås å være 981 1 ganger som langt unna gjennomsnittet som denne perioden8217s verdi. Hvis 981 1 er negativ, forutser det middelreferanseadferd med skifting av tegn, dvs. det forutsier også at Y vil være under gjennomsnittlig neste periode hvis den er over gjennomsnittet denne perioden. I en andre-ordregivende autoregressiv modell (ARIMA (2,0,0)), ville det være et Y t-2 begrep til høyre også, og så videre. Avhengig av tegnene og størrelsene på koeffisientene, kunne en ARIMA (2,0,0) modell beskrive et system hvis gjennomsnitts reversering foregår i sinusformet oscillerende mote, som bevegelse av en masse på en fjær som er utsatt for tilfeldige støt . ARIMA (0,1,0) tilfeldig tur: Hvis serien Y ikke er stasjonær, er den enkleste modellen for den en tilfeldig turmodell, som kan betraktes som et begrensende tilfelle av en AR (1) modell der autoregressive koeffisienten er lik 1, det vil si en serie med uendelig sakte gjennomsnittlig reversering. Forutsigelsesligningen for denne modellen kan skrives som: hvor den konstante sikt er den gjennomsnittlige period-til-periode-endringen (dvs. den langsiktige driften) i Y. Denne modellen kan monteres som en ikke-avskjæringsregresjonsmodell der Første forskjell på Y er den avhengige variabelen. Siden den inneholder (bare) en ikke-sesongforskjell og en konstant periode, er den klassifisert som en quotARIMA (0,1,0) modell med constant. quot. Den tilfeldige tur-uten-drift modellen ville være en ARIMA (0,1, 0) modell uten konstant ARIMA (1,1,0) forskjellig førsteordens autoregressiv modell: Hvis feilene i en tilfeldig turmodell er autokorrelert, kan problemet løses ved å legge til et lag av den avhengige variabelen til prediksjonsligningen - - dvs ved å regresse den første forskjellen på Y i seg selv forsinket med en periode. Dette vil gi følgende prediksjonsligning: som kan omarrangeres til Dette er en førsteordens autoregressiv modell med en rekkefølge av ikke-soneforskjeller og en konstant term, dvs. en ARIMA (1,1,0) modell. ARIMA (0,1,1) uten konstant enkel eksponensiell utjevning: En annen strategi for korrigering av autokorrelerte feil i en tilfeldig gangmodell er foreslått av den enkle eksponensielle utjevningsmodellen. Husk at for noen ikke-stationære tidsserier (for eksempel de som viser støyende svingninger rundt et sakte varierende gjennomsnitt), utfører ikke den tilfeldige turmodellen så vel som et glidende gjennomsnittsverdier av tidligere verdier. Med andre ord, i stedet for å ta den nyeste observasjonen som prognosen for neste observasjon, er det bedre å bruke et gjennomsnitt av de siste observasjonene for å filtrere ut støy og mer nøyaktig anslå det lokale gjennomsnittet. Den enkle eksponensielle utjevningsmodellen bruker et eksponentielt vektet glidende gjennomsnitt av tidligere verdier for å oppnå denne effekten. Forutsigelsesligningen for den enkle eksponensielle utjevningsmodellen kan skrives i en rekke matematisk ekvivalente former. hvorav den ene er den såkalte 8220error correction8221 skjemaet, der den forrige prognosen er justert i retning av feilen den gjorde: Fordi e t-1 Y t-1 - 374 t-1 per definisjon kan dette omskrives som : som er en ARIMA (0,1,1) - out-konstant prognosekvasjon med 952 1 1 - 945. Dette betyr at du kan passe en enkel eksponensiell utjevning ved å angi den som en ARIMA (0,1,1) modell uten konstant, og den estimerte MA (1) - koeffisienten tilsvarer 1-minus-alfa i SES-formelen. Husk at i SES-modellen er gjennomsnittsalderen for dataene i 1-periode fremover prognosene 1 945. Det betyr at de vil ha en tendens til å ligge bak trender eller vendepunkter med ca 1 945 perioder. Det følger at gjennomsnittlig alder av dataene i 1-periode fremover prognosene for en ARIMA (0,1,1) uten konstant modell er 1 (1 - 952 1). For eksempel, hvis 952 1 0,8 er gjennomsnittsalderen 5. Når 952 1 nærmer seg 1, blir ARIMA (0,1,1) uten konstant modell et veldig langsiktig glidende gjennomsnitt og som 952 1 nærmer seg 0 blir det en tilfeldig tur uten drivmodell. What8217s den beste måten å korrigere for autokorrelasjon: legge til AR-vilkår eller legge til MA-vilkår I de to foregående modellene ble problemet med autokorrelerte feil i en tilfeldig turmodell løst på to forskjellige måter: ved å legge til en forsinket verdi av differensierte serier til ligningen eller legge til en forsinket verdi av prognosen feil. Hvilken tilnærming er best En tommelfingerregel for denne situasjonen, som vil bli nærmere omtalt senere, er at positiv autokorrelasjon vanligvis behandles best ved å legge til et AR-uttrykk for modellen og negativ autokorrelasjon vanligvis behandles best ved å legge til en MA term. I forretnings - og økonomiske tidsserier oppstår negativ autokorrelasjon ofte som en artefakt av differensiering. (Generelt reduserer differensiering positiv autokorrelasjon og kan til og med føre til en bryter fra positiv til negativ autokorrelasjon.) Så, ARIMA (0,1,1) modellen, der differensiering er ledsaget av en MA-term, brukes hyppigere enn en ARIMA (1,1,0) modell. ARIMA (0,1,1) med konstant enkel eksponensiell utjevning med vekst: Ved å implementere SES-modellen som en ARIMA-modell, får du faktisk en viss fleksibilitet. Først og fremst er estimert MA (1) - koeffisient tillatt å være negativ. Dette tilsvarer en utjevningsfaktor som er større enn 1 i en SES-modell, som vanligvis ikke er tillatt i SES-modellprosedyren. For det andre har du muligheten til å inkludere en konstant periode i ARIMA-modellen hvis du ønsker det, for å estimere en gjennomsnittlig ikke-null trend. ARIMA-modellen (0,1,1) med konstant har prediksjonsligningen: Forventningene for en periode fremover fra denne modellen er kvalitativt lik SES-modellen, bortsett fra at bane av de langsiktige prognosene vanligvis er en skrånende linje (hvis skråning er lik mu) i stedet for en horisontal linje. ARIMA (0,2,1) eller (0,2,2) uten konstant lineær eksponensiell utjevning: Linjære eksponentielle utjevningsmodeller er ARIMA-modeller som bruker to ikke-soneforskjeller i sammenheng med MA-termer. Den andre forskjellen i en serie Y er ikke bare forskjellen mellom Y og seg selv forsinket av to perioder, men det er den første forskjellen i den første forskjellen - dvs. Y-endringen i Y i periode t. Således er den andre forskjellen på Y ved periode t lik (Y t - Y t-1) - (Y t-1 - Y t-2) Y t - 2Y t-1 Y t-2. En annen forskjell på en diskret funksjon er analog med et andre derivat av en kontinuerlig funksjon: det måler kvoteringsberegningsquot eller quotcurvaturequot i funksjonen på et gitt tidspunkt. ARIMA-modellen (0,2,2) uten konstant forutser at den andre forskjellen i serien er lik en lineær funksjon av de to siste prognosefeilene: som kan omarrangeres som: hvor 952 1 og 952 2 er MA (1) og MA (2) koeffisienter. Dette er en generell lineær eksponensiell utjevningsmodell. i hovedsak det samme som Holt8217s modell, og Brown8217s modell er et spesielt tilfelle. Den bruker eksponensielt vektede glidende gjennomsnitt for å anslå både et lokalt nivå og en lokal trend i serien. De langsiktige prognosene fra denne modellen konvergerer til en rett linje hvis skråning avhenger av den gjennomsnittlige trenden observert mot slutten av serien. ARIMA (1,1,2) uten konstant fuktet trend lineær eksponensiell utjevning. Denne modellen er illustrert i de tilhørende lysbildene på ARIMA-modellene. Den ekstrapolerer den lokale trenden i slutten av serien, men flater ut på lengre prognoshorisonter for å introdusere et konservatismedokument, en praksis som har empirisk støtte. Se artikkelen om hvorfor Damped Trend worksquot av Gardner og McKenzie og quotgolden Rulequot-artikkelen av Armstrong et al. for detaljer. Det er generelt tilrådelig å holde fast i modeller der minst en av p og q ikke er større enn 1, dvs. ikke prøv å passe på en modell som ARIMA (2,1,2), da dette sannsynligvis vil føre til overfitting og kvadrat-faktorquot problemer som er omtalt nærmere i notatene om den matematiske strukturen til ARIMA-modellene. Implementering av regneark: ARIMA-modeller som de som er beskrevet ovenfor, er enkle å implementere på et regneark. Forutsigelsesligningen er bare en lineær ligning som refererer til tidligere verdier av originale tidsserier og tidligere verdier av feilene. Dermed kan du sette opp et ARIMA prognose regneark ved å lagre dataene i kolonne A, prognoseformelen i kolonne B, og feilene (data minus prognoser) i kolonne C. Forutsigelsesformelen i en typisk celle i kolonne B ville ganske enkelt være et lineært uttrykk som refererer til verdier i de foregående radene av kolonne A og C, multiplisert med de relevante AR - eller MA-koeffisientene lagret i celler andre steder på regnearket. Fra klokken 8:00 CST Fredag, 24. februar til 18:00 CST Lørdag, Feb 25, ni vil gjennomgå systemoppgraderinger som kan føre til midlertidig tjenesteavbrudd. Vi setter pris på tålmodigheten din når vi forbedrer vår online opplevelse. Bevegelse utover Microsoft Excel for måledataanalyse og rapportering Publiseringsdato: 18, 2014 44 4,39 5 Print På grunn av sin utbredte tilgjengelighet, er Microsoft Excel ofte de facto-valget av ingeniører og forskere som trenger programvare for måledataanalyse og manipulasjon. Microsoft Excel gir seg godt til ekstremt enkle test - og måleapplikasjoner og de økonomiske bruksområdene som den ble designet for, men i en tid da selskapene blir tvunget til å gjøre mer med mindre, velger de riktige verktøyene for å maksimere effektiviteten (derved redusere kostnadene) viktig . Bare fordi Microsoft Excel allerede er installert på datamaskinen, gjør det ikke til det riktige verktøyet for hver jobb. National Instruments DIAdem-programvare som ble spesielt opprettet for administrasjon, inspeksjon, analyse og rapportering av tilegnede eller simulerte tekniske og vitenskapelige data, gir effektivitetsgevinster og skalerbarhet med funksjoner som overvinne begrensningene i Excel i de fleste data etterbehandling. Innholdsfortegnelse 1. Forskjeller i grunnleggende byggeblokker: Celler versus kanaler Microsoft Excel bruker cellen som sin grunnleggende byggekloss.160 Celler danner rader og kolonner for å lage et regneark, en arkitektur som er ideell for budsjetter og balanser.160 Enkel Enkeltpunkts datainnsamlingsprogrammer for eksempel de som samler ett enkelt datapunkt i en time i løpet av en dag, blir ofte enkelt kartlagt til denne arkitekturen fordi hvert enkelt datapunkt har større betydning når færre datapunkter samles.160 Hver data punkt eksisterer som en celle i et regneark og må manipuleres ved hjelp av Excels cellebaserte paradigme. De fleste datainnsamlingsprogrammene er imidlertid ikke dette trivielle.160 Applikasjoner som samler dusinvis av datakanaler med mega-sample-per-sekunders (MSs) - renter, er vanlige.160 I disse applikasjonene blir data manipulasjon og interaksjon gjort på et signal eller kanal som en helhet.160 Når man manipulerer kanaler i Excel som kolonner av individuelle celler, går enhetens ethet tabt.160 Selv om hele Excel-kolonnene kan manipuleres av gangen, er dette mer besværlig med lengre kolonner.160 Også kolonner inneholder ofte beskrivende informasjon som et navn eller en enhet i tillegg til de rå numeriske data.160 I dette tilfellet må en delmengde av kolonnen velges (for eksempel område A2: A99), innføring av overhead og potensial for feil eller feil. I figur 1. Excel brukes til å utføre en enkel, men vanlig teknisk oppgave: Gjennomsnittlig fem temperaturkanaler lagret i kolonner for å opprette en resulterende gjennomsnittlig kanal.160 Gjennomsnittlig beregning må først gjøres med byggeblokken til en celle, og kopieres deretter (eller fylt) til alle celler i den resulterende kolonnen.160 Ved bruk av DIAdem, som bruker kanalen som sin grunnleggende byggestein, er gjennomsnittskanaler like enkle som å dra og slippe inngangskanaler til gjennomsnittskanalfunksjonen, som vist i figur 2 .160 Individuelle datapunkter kan fortsatt manipuleres i DIAdem når det er nødvendig. Figur 1 . Microsoft Excel bruker cellen som sin grunnleggende byggekloss.160 Selv enkel dataanalyse må brukes på en celle og deretter gjentas for alle celler i en kolonne (kanal). Figur 2. NI DIAdem opererer med byggeblokken til a160channel.160 Averaging er like enkelt som å dra og slippe hele datakanaler i stedet for unødvendig å manipulere individuelle datapunkter. 2. Hundrevis av beregninger av ingeniørvitenskap og vitenskapelig analyse Mens antall tilgjengelige formler for finansorienterte beregninger i Excel er omfattende, må du konfigurere en valgfri tilleggsfil som heter Analysis Toolpak for tilgang til noen tekniske og statistiske beregninger.160 Analysen Toolpak-funksjonene er ekstremt begrensede, som vist i figur 3 med den felles tekniske beregningen Fast Fourier Transform (FFT) .160 Generelt tilfredsstiller Excels analysemuligheter ofte ikke kravene til vitenskapelige eller tekniske applikasjoner.160 For ytterligere utvidbarhet gir Excel en robust Visual Basic for Applications (VBA) - motor og et utmerket VBA-redigeringsmiljø som gjør at du kan skrive dine egne ingeniørberegninger fra grunnen når Excels innebygde funksjoner er utilstrekkelige for søknaden din. Figur 3. Microsoft Excel gir et uttømmende sett med finansbaserte beregninger og lar ingeniører skrive sin egen kode for å møte deres applikasjonsbehov. I DIAdem er hundrevis av tekniske og vitenskapelige analysekalkulasjoner fra enkle tillegg til komplekse matriseprofilering og ordreanalyse tatt med i miljøet.160 Analysefunksjonene i DIAdem er konfigurasjonsbaserte, ingen programmering er nødvendig for å kjøre jevn kompleks analyse som Digital Filtrering , som vist i figur 4. 160 I tillegg inkluderer DIAdem analysefunksjoner full forhåndsvisning av analyseresultater, slik at du kan unngå feilaktige beregninger ved å sørge for at du bruker de riktige parametrene før du kjører hver beregning. Figur 4. DIAdem inneholder hundrevis av analysefunksjoner som er spesifikke for forskere og ingeniører.160 Hver beregning er konfigurasjonsbasert og gir forhåndsvisning av resulterende kanaler, slik at du kan samhandle med parametere for å sikre nøyaktighet og redusere feil. DIAdem inneholder også et rammeverk for å lage dine egne domenespesifikke beregninger kalt Beregningsbehandling, og det inkluderer et integrert Visual Basic-skriptgrensesnitt for sekvensering av innebygde DIAdem-beregninger eller definering av egne tilpassede beregninger. 3. Lasting og manipulering av store datamengder Data-datastrømhastigheter for vanlige applikasjoner når eller overstiger MS-satser.160 I et program som samler en enkelt kanal med data ved 1 MS, vil totalt 1 000 000 datapunkter bli samlet inn i en ett sekunders oppkjøp . På få minutter kan tusenvis av datapunkter lagres på gigabyte plass på harddisken. Når Microsoft Excel forsøker å laste en datafil som inneholder et stort volum data, forsøker det å laste hvert enkelt datapunkt i minnet.160 Med utgivelsen av 64-bitersversjonen av Microsoft Excel 2010 er dette mindre begrenset, som programmet har et større adresserbart minne, men lasting av hele et stort datasett i Excel kan ofte ta mange minutter på grunn av det store volumet av data som må lastes.160 Videre lagrer Excel ikke bare numeriske verdier i hver celle men også numerisk formatering, celleformatering, formler, regnearkslinker, Internett-hyperkoblinger og kommentarer.160 Denne celle-sentriske fleksibiliteten er ideell for virksomhetsspreadsheets der synlighet av synlighet er nøkkelen, men den legger til160 unødvendig minneoverhead for datasett med millioner av verdier . 160 For å unngå potensielle minneproblemer, legger Excel en grense på maksimalt antall 160rows og kolonner.160 Innføringen av Excel 2007 økte totalt antall rader per regneark fra 65.536 til litt over 1.000.000 (2 20. for å være nøyaktig) og total Antall kolonner fra 256 til 16 384 (2 14). 160 Ved hjelp av figurene 5 og 6. Kontrast Utmerker begrensning av rad og kolonne med DIAdems evne til å manipulere 500.000.000 rader (poeng) som bare en brøkdel av begrensningen.160 Figur 5. Excel kan bare laste inn over 1 million rader med data for en gitt kolonne.160 Dette er en begrensning for forskere og ingeniører. Figur 6. DIAdem kan enkelt håndtere ekstremt store datasett.160 Dette bildet viser 160 eksemplarer på 500 000 000 (en halv milliard) datapunkter i en kanal - 500 ganger det maksimale antall rader som tillates av Excel. Som vist i figur 5. En oppkjøpsgrad på 1 MS med en enkelt kanal ville overstige antall datapunkter som Excel kunne laste på i løpet av litt over ett sekund av oppkjøpet.160 Mange ingeniører og forskere føler seg tvunget til å tillate begrensningene i deres data etterbehandlingsprogramvare for å diktere vilkår for oppkjøp og enten redusere oppkjøpsrente eller segmentoppkjøp på tvers av mange datafiler, introdusere et mareritt for datahåndtering og organisering. DIAdem ble designet for å manipulere måledata i både små og store volumer, og kan behandle opptil 2.000.000.000 datapunkter (2 31) per kanal over 65.536 (2 16) totale datakanaler.160 I tillegg inkluderer DIAdem160 selektiv belastning, datareduksjon og register lastefunksjoner som er spesielt utviklet for å jobbe med ekstremt store datasett.160 DIAdem kan selektivt laste inn en delmengde av datakanaler som finnes i en datafil, mens Excel alltid importerer alle kolonnene fra en datafil.160 Hvis du bare trenger å laste 1 kanal fra en veldig stor datafil med 10 kanaler i den. Bare lasting av de 10 av dataverdiene du faktisk trenger er mye raskere og mer effektiv enn Excels-metoden for å laste 100 av dataene når 90 er overhead.160 Når filer lastes med data reduksjon, laster DIAdem data fra et valgt radområde ogor kondenserer hver N-rad i en representativ verdi, mens Excel alltid laster alle datarollene.160 Når filer er registrert lastet, DI Adem bruker den eksisterende datafilen på disken, da virtuelt minne på stedet ikke laster inn alle verdiene fra datafilen samtidig, men registrerer i stedet hvordan du får tilgang til blokker av dataværdier på forespørsel.160 Dette gjør registrerte lastede kanaler 160leses bare, men det muliggjør veldig rask grafikk og inspeksjon av ekstremt store datasett, som vist i figur 6. Se en brukerløsning på hvordan DIAdem behandler store mengder data for å bidra til å forutsi og overvåke jordskjelvaktivitet. 4. Fleksibilitet i File Storage Format Programmer som samler inn og lagrer data med høye streaminghastigheter, må skrive data til disk ved hjelp av et streaming-kompatibelt filformat.160 Binære filformater brukes oftest fordi de ikke inkluderer det ytre overhead som kreves for å lage en fil menneskelig lesbar måten ASCII-filer gjør.160 En sammenligning av vanlige filformater, inkludert den åpne binære formatstandarden til National Instruments-programvare, kalt Technical Data Management Streaming (TDMS), vises i tabell 1. 160160160160160 Tabell 1. Det finnes mange filformatalternativer, men binære filformater som TDMS er de eneste formatene som er i stand til høyhastighets streaming. Kan kreve en verktøykasse eller tilleggsmodul. DIAdem er fleksibel nok til å lese et tilpasset filformat, inkludert tilpassede binære filformater på grunn av modulære kodestykker kalt DataPlugins som vet hvordan man analyserer og tolker innholdet i en datafil.160 DataPlugins omformaterer også de analyserte dataene fra den aktuelle datafilen til en felles datastruktur inne i DIAdem, som gjør det enkelt å sammenligne data lastet fra forskjellige filformater.160 National Instruments har publisert gratis nedlastbare DataPlugins for hundrevis av de mest brukte datafilformatene, og det er publisert APIer for LabVIEW og VBScript for deg å lage DataPlugins for dine egne eldre datafiler.160 Dette gjør det mulig for DIAdem å være modulær og skalerbar nok til å håndtere alle aktuelle, eldre eller fremtidige datafilformatvalg. I kontrast, mens Excel kan lese ASCII-filer, er det vanligvis ikke helt i stand til å laste inn data fra binære filer.160 Selv når Excel har lastet inn en ASCII-fil, har den begrenset evne til å korrekt tolke egenskaps - og kanalstrukturen i datafilen. 160To ofte er tidkrevende omformatering av importerte ASCII-data nødvendig før den kan brukes i det hele tatt.160 Ett unntak fra dette problemet er 160TDMS-filformatet fra 160National Instruments, som Excel laster med riktig formatering av strukturen, egenskapene og data fra TDMS-filen, using160 den gratis TDM Excel-tillegget. Besøk TDMS hjemmeside for å lære mer om TDMS filformat for lagring av måledata til disk. 5. Innebygd verktøy for datahåndtering og trend Over tid er det vanlig å lagre og forsøke å organisere hundrevis eller tusenvis av datafiler på disken.160 Disse filene lagres ofte på forskjellige måter med forskjellige formater, og kan til og med lagres på varierende steder på en lokal maskin eller på tvers av et nettverk. Hvis du vil utvikle data over flere datafiler ved hjelp av Microsoft Excel, må du åpne hver enkelt datafil, kopiere de relevante kolonnene og lime dem inn i en mastergass (aggregert) fil, og gå videre til neste datafil.160 Nøyaktig trending lignende Datakanaler over hundrevis av unike datafiler kan ta dager eller uker. DIAdem kan utføre denne samme oppgaven på sekunder.160 Ved hjelp av DataPlugins kan DIAdem laste disse forskjellige filformatene til en felles importert struktur for jevn analyse og rapportering. Videre installerer DIAdem en teknologi som heter My DataFinder, som hjelper deg med å raskt finne og isolere de eksakte datasettene du leter etter, selv om de ligger over forskjellige filer som vist på figur 7. 160 Min DataFinder lager automatisk en indeks av beskrivende informasjon inneholdt i datafiler som blir søkbare innen DIAdem.160 Ved hjelp av DIAdem og DataFinder-teknologien kan du raskt finne alle datafiler som ble skrevet av en bestemt operatør, finne alle mislykkede tester eller til og med identifisere eventuelle datakanaler på tvers av alle datafiler som ble lagret ved hjelp av en bestemt type sensor.160 Jo mer informasjon du dokumenterer i datafilene, desto flere muligheter er tilgjengelige når du søker etter bestemte data lagret på flere filer i ulike mapper og eller filformater. Figur 7. I denne spørringen har DataFinder plassert datakanaler på tvers av alle datafiler som ble samlet inn ved hjelp av et J-Type-termoelement og lagret til disk av operatøren Jennifer. Se en webcast som viser DIAdem og NI DataFinder for datahåndtering, analyse og rapportering. 6. Datainspeksjon og synkronisering Med Microsoft Excel kan brukere lage grunnleggende diagrammer og grafer, men statiske grafer tillater ikke at du fullt ut samhandler med og inspiserer data som har blitt målt over tid.160 Det er for eksempel umulig å visualisere korrelerte måledata og GPS160data ved hjelp av innebygde verktøy i Excel. 160 For å fullstendig karakterisere alle aspekter av tidsbaserte målinger, inkluderer DIAdem et kraftig visualiseringsverktøy som har fullt synkroniserbare visningsområder som er ideelle for å spille av målinger koordinert med videoer, 3D-modeller, akseanlegg, GPS-kartskjermbilder, konturer, lydavspilling, og mer.160 Dette gjør at du kan spille av en måling synkronisert med annen informasjon for å fullstendig forstå sin kontekst.160 DIAdems visualiseringsverktøy lar deg også enkelt zoome inn i en bestemt region i en graf, kopiere eller slette eller interpolere dataintervallene, og undersøke eksakte verdier av spesifikke punkter grafisk.160 Ved hjelp av dette dynamiske verktøyet er det enkelt å identifisere områder av interesse eller finne avvikere innenfor større datasett. Figur 8. Ved hjelp av DIAdem kan du synkronisere fullstendig avspilling av måledata, lyddata, GPS-koordinater, video og mer. 7. Rapporterende maler du kan se (WYSIWYG) DIAdem har en robust rapporteringsmotor som utnytter gjenbrukbare maler fordi mange ingeniører genererer de samme rapportene gjentatte ganger ved hjelp av forskjellige datasett.160 WYSIWYG-rapportmaler i DIAdem lagre referanser til data i minnet i motsetning til lagring av de faktiske dataverdiene selv. Hvis du vil opprette rapporter fra forskjellige datasett ved hjelp av den samme lagrede rapportmalen, kan du ganske enkelt laste de nye dataene inn i minnet, og den lastede rapportmalen oppdaterer øyeblikkelig 160-talls visning med de nylig lastede dataverdiene.160 Du kan deretter eksportere fullført oppløsning med høy oppløsning Rapporterer allerede til de vanligste rapporteringsformatene, inkludert PDF, PowerPoint, HTML, bilde og mer. 160 I Excel lagres rapportvisningen sammen med dataene i en felles regnearkfil, noe som gjør det mye vanskeligere å bruke en bestemt rapportvisning for flere datasett. 160 Figur 9. DIAdem har en WYSIWYG-rapportredigering. Publiseringsberettede eksporterte rapporter vil se ut som deres redigeringsmal. 8. Interaktiv Automation Excel gir et kraftig miljø for utviklingen av makroer.160 Ved å bruke opptaksmodus, er det mulig å registrere makroer som 160automatiserer lange evalueringer eller beregninger.160 DIAdem similarly160 har 160an integrert VBScript editor, en brukerdialog editor og en skriptopptaker for å generere interaktive skript som automatiserer lange evalueringer eller beregninger. 160160 Ved hjelp av skripting kan hele DIAdem-miljøet tilpasses og automatiseres slik at repeterende dataflytprosesser som pleide å ta dager, kan oppnås om noen minutter.160 Dette virkelig maksimerer effektiviteten til ingeniører og forskere og reduserer dramatisk tiden det tar dem å slå råmåledata til brukbar informasjon. 9. Excel er gratis, men for dyrt å bruke Microsoft Office brukes av ca. 80 bedrifter1. 160 Mange ingeniører og forskere ser Excel som gratis programvare fordi den er installert på de fleste bedriftens datamaskiner uten spørsmål.160 Ofte begynner forskere og ingeniører å bruk Excel for deres analyse - og rapporteringsbehov fordi det er kjent og tilgjengelig.160 Når de møter Excels-begrensninger som oppsummert i tabell 2. De lever enten med ofte gjentatte og tidkrevende manuell behandling eller bruker timer og uker til å utvikle og opprettholde egendefinert makrokode. Hvis du estimerer at personalkostnader (inkludert lønn, forsikring, utstyr osv.) For en ingeniør totalt 100 000 årlig, vil kostnaden for å kjøpe en lisens for DIAdem Advanced og en hel uke med opplæring, bli gjenopprettet etter bare 2,8 arbeiders uker med realiserte produktivitetsgevinster over Microsoft Excel. Som beskrevet i dette dokumentet, betaler NI DIAdem raskt seg selv ved å overvinne begrensningene i Excel og introdusere ytterligere effektivitetsverktøy for å administrere, analysere og160 rapporteringsmålingsdata.160160 Tabell 2. DIAdem vil øke effektiviteten ved å overvinne begrensningene i Microsoft Excel. 10. Lær mer og flytt til DIAdem i dag Bruk ressursene nedenfor for å lære mer om å flytte over Excel til kraftigere verktøy for måledataanalyse og rapportering. Se en webcast-utheving DIAdems fordeler for datahåndtering, analyse og rapportering. Se seks 1 minutt videoer for å lære mer om DIAdem. Last ned DIAdem og utforsk miljøet med en gratis 7-dagers evaluering. Snakk med en ekspert for en gratis webdemo eller for å få svar på spørsmålene dine umiddelbart. De fleste mennesker er kjent med uttrykket, vil quotthis drepe to fugler med en stonequot. Hvis du ikke gjør det, refererer fasen til en tilnærming som adresserer to mål i en handling. (Dessverre er uttrykket i seg selv ganske ubehagelig, siden de fleste av oss ikke vil kaste stein på uskyldige dyr) I dag kommer jeg til å dekke noen grunnleggende om to gode funksjoner i SQL Server: Columnstore-indeksen (kun tilgjengelig i SQL Server Enterprise) og SQL Query Store. Microsoft implementerte faktisk Columnstore-indeksen i SQL 2012 Enterprise, selv om de har forbedret den i de to siste utgivelsene av SQL Server. Microsoft introduserte Query Store i SQL Server 2016. Så, hva er disse funksjonene og hvorfor er de viktige Vel, jeg har en demo som vil introdusere begge funksjonene og vise hvordan de kan hjelpe oss. Før jeg går videre, dekker jeg også dette (og andre SQL 2016-funksjoner) i min CODE Magazine-artikkel om nye funksjoner SQL 2016. Som en grunnleggende introduksjon kan Columnstore-indeksen bidra til å øke hastigheten på spørringer som skannegistrerer over store mengder data, og Query Store sporer forespørsler om henrettelser, utførelsesplaner og kjøretidsstatistikk som du vanligvis må samle inn manuelt. Stol på meg når jeg sier at disse er flotte funksjoner. For denne demoen skal jeg bruke demo-databasen til Microsoft Contoso Retail Data Warehouse. Løst snakkes Contoso DW som kvote virkelig stor AdventureWorksquot, med tabeller som inneholder millioner av rader. (Det største AdventureWorks-bordet inneholder omtrent 100 000 rader i det meste). Du kan laste ned Contoso DW-databasen her: microsoften-usdownloaddetails. aspxid18279. Contoso DW fungerer veldig bra når du vil teste ytelsen på spørsmål mot større bord. Contoso DW inneholder et standard datalager Fakta tabellen kalt FactOnLineSales, med 12,6 millioner rader. Det er absolutt ikke det største datalagertabellen i verden, men det er ikke barns spill heller. Anta at jeg vil oppsummere salgsbeløp for 2009, og rangere produktene. Jeg kan spørre faktabordet og bli med i produktdimensjonstabellen og bruke en RANK-funksjon, slik: Her er et delvis sett sett av de 10 øverste radene, av Total Sales. På min bærbare datamaskin (i7, 16 GB RAM) tar spørringen alt fra 3-4 sekunder til å kjøre. Det kan ikke virke som enden av verden, men enkelte brukere kan forvente umiddelbare resultater (slik du kan se umiddelbare resultater når du bruker Excel mot en OLAP-terning). Den eneste indeksen jeg har for øyeblikket på denne tabellen, er en klynget indeks på en salgsnøkkel. Hvis jeg ser på utførelsesplanen, gjør SQL Server et forslag om å legge til en dekselindeks i tabellen: Nå, bare fordi SQL Server antyder en indeks, betyr ikke at du blindt bør opprette indekser på hver kvoterende indexquot-melding. I dette tilfellet oppdager SQL Server imidlertid at vi filtrerer basert på år, og bruker produktnøkkelen og salgsbeløpet. Så foreslår SQL Server en dekselindeks, med DateKey som indeksnøkkelfelt. Årsaken til at vi kaller dette en quotcoveringquot-indeks er fordi SQL Server vil sitere langs den ikke-nøkkelfeltkvoten vi brukte i spørringen, citerer ridequot. På denne måten trenger ikke SQL Server å bruke tabellen eller den klyngede indeksen på alle databasemotorer kan bare bruke dekselindeksen for spørringen. Dekker indekser er populære i visse datalagring og rapportering av databasescenarier, selv om de kommer til en pris av databasemotoren som opprettholder dem. Merk: Omslagsindekser har eksistert lenge, så jeg har ennå ikke dekket Kolumnstore-indeksen og Query Store. Så vil jeg legge til dekselindeksen: Hvis jeg gjenoppretter det samme spørsmålet jeg kjørte for et øyeblikk siden (den som samlet salgsbeløpet for hvert produkt), synes spørringen noen ganger å kjøre om et sekund raskere, og jeg får en en annen utførelsesplan, en som bruker en indekssøk i stedet for en indekssøk (ved hjelp av datotasten på dekselindeksen for å hente salget for 2009). Så, før Columnstore Index, kan dette være en måte å optimalisere denne spørringen i mye eldre versjoner av SQL Server. Den går litt raskere enn den første, og jeg får en utførelsesplan med en indekssøk i stedet for en indekssøk. Imidlertid er det noen problemer: De to eksekveringsoperatørene quotIndex Seekquot og quotHash Match (Aggregate) citerer begge i hovedsak drift quote for rowquot. Tenk deg dette i et bord med hundrevis av millioner av rader. Relatert, tenk på innholdet i en faktabord: i dette tilfellet kan en enkelt nøkkelverdi og en enkelt produktnøkkelverdi gjentas over hundre tusenvis av rader (husk at faktabordet også har nøkler for geografi, markedsføring, salgsmann , etc.) Så når quotIndex Seekquot og quotHash Matchquot jobber rad for rad, gjør de så oververdier som kan gjentas over mange andre rader. Dette er normalt der jeg krysser til SQL Server Columnstore-indeksen, som gir et scenario for å forbedre ytelsen til denne spørringen på utrolige måter. Men før jeg gjør det, la vi gå tilbake i tid. La oss gå tilbake til år 2010, da Microsoft introduserte et tillegg for Excel kjent som PowerPivot. Mange husker sannsynligvis å se demo av PowerPivot for Excel, der en bruker kunne lese millioner av rader fra en ekstern datakilde til Excel. PowerPivot vil komprimere dataene, og gi en motor til å lage pivottabeller og pivotdiagrammer som utføres med fantastiske hastigheter mot komprimerte data. PowerPivot brukte en innebygd teknologi som Microsoft kalte quotVertiPaqquot. Denne minneteknologien i PowerPivot vil i utgangspunktet ta dupliserte nøkkelverdier for virksomhetsnøkkelknapper og komprimere dem ned til en enkelt vektor. In-memory-teknologien vil også scanaggregere disse verdiene parallelt, i blokker på flere hundre ad gangen. Den nederste linjen er at Microsoft bakte en stor mengde ytelsesforbedringer i VertiPaq-minnefunksjonen, slik at vi kan bruke det helt ut av den ordspråklige boksen. Hvorfor tar jeg denne lille spasertur ned minnekort Siden Microsoft i SQL Server 2012 implementerte en av de viktigste funksjonene i historien til databasemotoren: Columnstore-indeksen. Indeksen er egentlig bare en indeks i navn: det er en måte å ta et SQL Server-bord på og lage et komprimert kolonneforlag i minnet som komprimerer dupliserte utenlandske nøkkelverdier ned til enkeltvektverdier. Microsoft opprettet også et nytt bufferbasseng for å lese disse komprimerte vektorverdiene parallelt, noe som skaper potensialet for store ytelsesgevinster. Så, jeg kommer til å lage en kolonneindeks på bordet, og jeg vil se hvor mye bedre (og mer effektivt) spørringen går, i motsetning til spørringen som går mot dekselindeksen. Så, jeg vil lage en kopi av FactOnlineSales (I39ll call It FactOnlineSalesDetailNCCS), og jeg vil opprette en kolonnestatistikkindeks på duplikatbordet slik at jeg vil blande opp det opprinnelige bordet og dekselindeksen på noen måte. Deretter lager jeg en kolonneindeks på det nye bordet: Merk flere ting: Jeg har angitt flere utenlandske nøkkel kolonner, samt salgsbeløpet. Husk at en kolonnemarkedsindeks ikke er som en tradisjonell rade-indeks. Det er ingen quotkeyquot. Vi indikerer bare hvilke kolonner SQL Server skal komprimere og plassere i et kolonnekort i minnet. For å bruke analogi av PowerPivot for Excel når vi lager en kolonneforhandlerindeks, forteller vi at SQL Server skal gjøre det samme som PowerPivot gjorde da vi importerte 20 millioner rader til Excel ved hjelp av PowerPivot. Så, jeg vil kjøre spørringen igjen denne gangen. det dupliserte FactOnlineSalesDetailNCCS-tabellen som inneholder kolonneforhandlingsindeksen. Denne spørringen kjører øyeblikkelig på mindre enn et sekund. Og jeg kan også si at selv om bordet hadde hundrevis av millioner av rader, ville det fortsatt kjøre på det ordspråklige sitatet på en øyenvippe. Vi kunne se på utførelsesplanen (og i noen få minutter vil vi), men nå er det på tide å dekke Query Store-funksjonen. Tenk deg et øyeblikk, at vi kjørte begge spørringene over natten: spørringen som brukte det vanlige FactOnlineSales-tabellen (med dekselindeksen) og deretter spørringen som brukte duplikatabellen med Columnstore-indeksen. Når vi logger på neste morgen, ønsker vi å se utførelsesplanen for begge spørringene som de skjedde, samt utførelsesstatistikken. Med andre ord, vi liker å se den samme statistikken som vi kunne se om vi kjørte begge spørsmålene interaktivt i SQL Management Studio, slått på TIME og IO Statistics, og så på utførelsesplanen umiddelbart etter at forespørselen ble utført. Vel, det er det som spørringsbutikken tillater oss å gjøre, vi kan slå på (aktivere) spørringslager for en database, noe som vil utløse SQL Server for å lagre søkekspedisjon og planlegge statistikk slik at vi kan se dem senere. Så, jeg kommer til å aktivere Query Store i Contoso-databasen med følgende kommando (og I39ll fjerner også eventuelt caching): Så kjører jeg de to spørringene (og quotequotot jeg kjørte dem for noen timer siden): La oss nå late som de kjørte timer siden. Ifølge det jeg sa, vil Query Store fange utførelsesstatistikken. Så hvordan ser jeg på dem Heldigvis er det ganske enkelt. Hvis jeg utvider Contoso DW-databasen, ser jeg en mappe med spørringslager. Query Store har enorm funksjonalitet, og jeg vil prøve å dekke mye av det i etterfølgende blogginnlegg. Men for øyeblikket vil jeg se utførelsesstatistikk for de to spørringene, og spesifikt undersøke eksekveringsoperatørene for kolonneforhandlingsindeksen. Så høyreklikker jeg på de beste ressursforbrukerne og kjører det alternativet. Det gir meg et diagram som det nedenfor, hvor jeg kan se eksekveringsvarighetstid (i millisekunder) for alle forespørsler som er utført. I dette tilfellet var spørring 1 spørringen mot det opprinnelige bordet med dekselindeksen, og spørring 2 var mot bordet med kolonneforhandlingsindeksen. Tallene ligger ikke i kolonnestatistikkindeksen bedre enn den opprinnelige bordbelegningsindeksen med en faktor på nesten 7 til 1. Jeg kan endre metriske for å se på minnekonsumt i stedet. Merk i så fall at spørring 2 (kolonneforlagsindekset spørringen) brukte mye mer minne. Dette demonstrerer tydelig hvorfor kolonneforhandlingsindeksen representerer quotin-memoryquot-teknologi. SQL Server laster inn hele kolonneforhandlingsindeksen i minnet, og bruker et helt annet buffertbasseng med forbedrede eksekveringsoperatører for å behandle indeksen. OK, så vi har noen grafer for å se utførelsesstatistikk, kan vi se eksekveringsplanen (og eksekveringsoperatørene) knyttet til hver utførelse Ja, vi kan Hvis du klikker på den vertikale linjen for spørringen som brukte kolonneforhandlingsindeksen, ser du kjøringen planlegg under. Det første vi ser er at SQL Server har utført en kolonnestedsindekssøk, og det representerte nesten 100 av kostnaden for spørringen. Du kan kanskje si, et øyeblikk, det første spørsmålet brukte en dekselindeks og utførte en indeks, så hvordan kan en kolonnekursindeks skje raskere? Det er et legitimt spørsmål, og heldigvis er det et svar. Selv når den første spørringen utførte en indekssøk, utførte den fortsatt kvote etter radikott. Hvis jeg legger musen over kolonnestedsindeks-skannoperatøren, ser jeg et verktøytips (som den nedenfor) med en viktig innstilling: Utførelsesmodusen er BATCH (i motsetning til ROW. Som er det vi hadde med det første spørsmålet ved hjelp av dekker indeksen). Den BATCH-modusen forteller oss at SQL Server behandler de komprimerte vektorene (for eventuelle utenlandske nøkkelverdier som dupliseres, for eksempel produktnøkkelen og dato-nøkkelen) i grupper på nesten 1000, parallelt. Så SQL Server er fortsatt i stand til å behandle kolonnestatistikkindeksen mye mer effektivt. I tillegg, hvis jeg legger musen over Hash Match (Aggregate) - oppgaven, ser jeg også at SQL Server samler inn kolonnemarkedsindeksen ved hjelp av Batch-modus (selv om operatøren selv representerer en så liten prosentandel av kostnaden for spørringen) kan spørre, quotOK, så SQL Server komprimerer verdiene i dataene, behandler verdiene som vektorer, og leser dem i blokker med nesten tusen verdier parallelt, men spørringen min bare ønsket data for 2009. Så er SQL Server-skanning over hele settet med dataquot igjen, et godt spørsmål. Svaret er, quote Ikke virkelig. Heldigvis for oss utfører den nye kolonnestørrelsen indeksbufferbasseng en annen funksjon kalt quotsegment eliminationquot. I utgangspunktet vil SQL Server undersøke vektorverdiene for dato-nøkkelkolonnen i kolonnestatistikkindeksen, og eliminere segmenter som er utenfor omfanget av året 2009. Jeg stopper her. I etterfølgende blogginnlegg dekker jeg39ll både kolonnestedsindeksen og Query Store mer detaljert. I hovedsak er det vi har sett her i dag at Columnstore-indeksen kan øke hastigheten på spørringer som skannerer over store mengder data, og Query Store vil fange spørsmålstiltak og la oss undersøke utførelses - og resultatstatistikk senere. Til slutt vil vi gjerne produsere et resultatsett som viser følgende. Legg merke til tre ting: Kolonnene svinger i det vesentlige alle mulige returårsaker, etter å ha vist salgsbeløpet Resultatsettet inneholder subtotaler ved uken slutter (søndag) dato over alle klienter (der klienten er null) Resultatsettet inneholder en total total rad (hvor klient og dato er begge null) Først, før jeg kommer inn i SQL-enden, kunne vi bruke den dynamiske pivotmatrix-funksjonen i SSRS. Vi ville bare måtte kombinere de to resultatene med en kolonne, og da kunne vi mate resultatene til SSRS-matrisekontrollen, som vil spre returårsakene over kolonnens akse i rapporten. Men ikke alle bruker SSRS (selv om de fleste burde). Men selv da, må utviklere noen ganger forbruke resultatsett i noe annet enn et rapporteringsverktøy. Så for dette eksempelet, antar vi at vi ønsker å generere resultatsettet for en nettrutenett, og evt. Utvikleren ønsker å quotustrip outquot de subtotale radene (hvor jeg har en ResultatSetNum-verdi på 2 og 3) og plasser dem i et oppsummeringsnett. Så bunnlinjen, vi trenger å generere utgangen over direkte fra en lagret prosedyre. Og som en ekstra vridning neste uke kan det være Return Reason X og Y og Z. Så vi vet ikke hvor mange tilbake grunner det kan være. Vi ønsker enkelt at spørringen skal svinge på de mulige forskjellige verdiene for returårsak. Her er hvor T-SQL PIVOT har en begrensning vi trenger for å gi den mulige verdier. Siden vi vant vet at inntil løpstid, må vi generere spørringsstrengen dynamisk ved hjelp av det dynamiske SQL-mønsteret. Det dynamiske SQL-mønsteret innebærer å generere syntaksen, stykke for hverandre, lagre den i en streng, og deretter utføre strengen på slutten. Dynamisk SQL kan være vanskelig, da vi må legge inn syntaks i en streng. Men i dette tilfellet er det vårt eneste sanne alternativ hvis vi ønsker å håndtere et variert antall returårsaker. Jeg har alltid funnet ut at den beste måten å skape en dynamisk SQL-løsning på, er å finne ut hva quote-quotet genererte spørringen ville være på slutten (i dette tilfellet, gitt Return grunnene vi vet om).og deretter reversere det ved å kutte det sammen en del om gangen. Og så, her er SQL-en som vi trenger hvis vi visste at disse returgrunnene (A through D) var statiske og ikke ville endre seg. Spørringen gjør følgende: Kombinerer dataene fra SalesData med dataene fra ReturnData, der vi quothard-wirequot ordet Salg som en handlingstype danner salgstabellen, og deretter bruker du tilbakemelding fra Return Data til samme ActionType-kolonne. Det vil gi oss en ren ActionType-kolonne som kan pivotere. Vi kombinerer de to SELECT-setningene til et felles tabelluttrykk (CTE), som i utgangspunktet er en avledet tabellundersøkelse som vi senere bruker i neste setning (til PIVOT) En PIVOT-setning mot CTE, som summerer dollarene for Action Type å være i en av de mulige Action Type-verdiene. Merk at dette er det siste resultatsettet. Vi legger dette inn i en CTE som leser fra den første CTE. Årsaken til dette er fordi vi vil gjøre flere grupperinger på slutten. Den endelige SELECT-setningen, som leser fra PIVOTCTE, og kombinerer den med en etterfølgende spørring mot samme PIVOTCTE, men hvor vi også implementerer to grupperinger i funksjonen GROUPING SETS i SQL 2008: GROUPING etter ukenes sluttdato (dbo. WeekEndingDate) GRUPPERING for alle rader () Så hvis vi visste med sikkerhet at vi aldri hadde flere returårsaker, så ville det være løsningen. Imidlertid må vi ta hensyn til andre årsakskoder. Så vi må generere hele spørringen ovenfor som en stor streng der vi bygger de mulige returårsakene som en kommaseparert liste. Jeg kommer til å vise hele T-SQL-koden for å generere (og utføre) det ønskede spørsmålet. Og så bryter jeg det ut i deler og forklarer hvert trinn. Så først, her er hele koden for å dynamisk generere det jeg har fått over. Det er i utgangspunktet fem trinn vi må dekke. Trinn 1 . Vi vet at et sted i blandingen må vi generere en streng for dette i spørringen: SalesAmount, Årsak A, Årsak B, Årsak C, Årsak D0160016001600160 Det vi kan gjøre er å bygge et midlertidig felles borduttrykk som kombinerer det hardt kablede quotSales Amountquot kolonne med den unike listen over mulige grunnkoder. Når vi har det i en CTE, kan vi bruke det fine, lette trikset FOR FORMAT PATH (3939) for å kollapse disse radene i en enkelt streng, legg et komma foran hver rad som spørringen leser, og bruk deretter STUFF til å erstatte Første forekomst av et komma med tomt rom. Dette er et triks som du kan finne i hundrevis av SQL-blogger. Så denne første delen bygger en streng kalt ActionString som vi kan bruke lenger ned. Steg 2 . Vi vet også at vi vil SUM de genererte pivoted årsakskolonnene, sammen med standard salgskolonnen. Så vi trenger en separat streng for det, som jeg vil ringe SUMSTRING. I39ll bruker bare den opprinnelige ActionString, og erstatt deretter de ytre parentesene med SUM-syntaks, pluss originale braketter. Trinn 3: Nå begynner det virkelige arbeidet. Ved å bruke det opprinnelige spørsmålet som en modell, ønsker vi å generere det opprinnelige spørsmålet (begynner med UNION av de to tabellene), men erstatter eventuelle referanser til svingte kolonner med strenger vi dynamisk generert ovenfor. Også, mens det ikke er absolutt nødvendig, har jeg også opprettet en variabel til bare noen vognreturneringsmatematkombinasjoner som vi vil legge inn i det genererte spørsmålet (for lesbarhet). Så vi vil konstruere hele spørringen til en variabel som heter SQLPivotQuery. Trinn 4. Vi fortsetter å konstruere spørringen igjen, sammenføyning av syntaksen vi kan quothard-wirequot med ActionSelectString (som vi genererte dynamisk for å holde alle mulige returårsverdier). Trinn 5. Endelig vil vi generere den siste delen av Pivot Query, som leser fra 2: e felles tabelluttrykk (PIVOTCTE, fra modellen ovenfor) og genererer den endelige SELECT å lese fra PIVOTCTE og kombinere den med en andre leser mot PIVOTCTE til implementer gruppesettene. Til slutt kan vi quotexecutequot strengen ved hjelp av SQL-systemet lagret proc spexecuteSQL Så forhåpentligvis kan du se at prosessen for å følge for denne typen innsats, er å avgjøre hva den endelige spørringen ville være, basert på ditt nåværende sett med data og verdier (dvs. bygget en spørringsmodell) Skriv den nødvendige T-SQL-koden for å generere forespørselsmodellen som en streng. Kanskje den viktigste delen er å bestemme det unike settet av verdier som du vil PIVOT, og deretter kollapse dem i en streng ved hjelp av STUFF-funksjonen og FOR XML PATH (3939) triks Så hva skjer i dag Vel, minst 13 elementer To somre siden skrev jeg et utkast til BDR som fokuserte (delvis) på rollen som utdanning og verdien av en god liberal kunstbakgrunn, ikke bare for programvarebransjen, men også for andre næringer. Et av temaene til denne spesielle BDR understreket et sentralt og opplyst synspunkt fra den anerkjente programarkitekten Allen Holub angående liberal kunst. Jeg forklarer sannelig hans budskap: Han utheste parallellene mellom programmering og studere historie ved å minne alle om at historien leser og skriver (og jeg legger til, identifiserer mønstre), og programvareutvikling leser og skriver også (og igjen, identifiserer mønstre ). Og så skrev jeg et meningsstykke som fokuserte på dette og andre relaterte emner. Men til i dag har jeg aldri kommet rundt for å enten publisere det. Hvert så ofte Id tenker på å revidere det, og Id setter seg selv ned i noen minutter og gjør noen tilpasninger til det. Men da ville livet generelt komme seg og Id aldri fullføre det. Så hva forandret For noen uker siden skrev kollega CoDe Magazine-kolonne og industrileder Ted Neward et stykke i sin vanlige kolonne, Managed Coder, som fikk oppmerksomheten min. Tittelen på artikkelen er On Liberal Arts. og jeg anbefaler at alle leser det. Ted diskuterer verdien av en liberal arts bakgrunn, den falske dikotomi mellom en liberal arts bakgrunn og suksess i programvareutvikling, og behovet for å skrive godt. Han snakker om noen av sine tidligere møter med HR-personaleledelse om hans pedagogiske bakgrunn. Han understreker også behovet for å godta og tilpasse seg endringer i vår bransje, samt kjennetegnene til en vellykket programvareprofessor (å være pålitelig, planlegge fremover og lære å komme forbi den første konflikten med andre lagmedlemmer). Så det er en god les, og det er Teds andre CoDe-artikler og blogginnlegg. Det fikk meg også tilbake til å tenke på mine synspunkter på dette (og andre emner) også, og til slutt motiverte meg til å fullføre mitt eget redaksjonelt. Så, bedre sent enn aldri, her er mitt nåværende Bakers Dozen of Reflections: Jeg sier: Vann fryser ved 32 grader. Hvis du er i en treningsopplæringsrolle, tror du kanskje du gjør alt i verden for å hjelpe noen når de faktisk føler seg en temperatur på 34 grader, og derfor er det ikke noe som gjør det sterkere for dem. Noen ganger tar det bare litt mer innsats eller en annen ideakemisk katalysator eller et nytt perspektiv, noe som betyr at de med tidligere utdanning kan trekke på forskjellige kilder. Vannet fryser ved 32 grader. Noen mennesker kan opprettholde høye konsentrasjoner selv med et rom fullt av støyende mennesker. Jeg er ikke en av dem noen ganger, jeg trenger litt privatliv for å tenke gjennom et kritisk problem. Noen beskriver dette som du må lære å gå bort fra det. Oppgitt på en annen måte, det er et søk etter den sjeldne luften. Denne uken tilbrakte jeg timer i halvt opplyst, stille rom med whiteboard, til jeg forsto et problem fullt ut. Det var først da jeg kunne snakke med andre utviklere om en løsning. Meldingen her er ikke å forkynne hvordan du skal gå om din virksomhet med å løse problemer, men heller for alle å kjenne deres styrker og hva som fungerer, og bruke dem til din fordel så mye som mulig. Noen setninger er som negler på en tavle for meg. Bruk det som et undervisningsmoment er en. (Hvorfor er det som negler på en tavle? For hvis du er en mentorroll, bør du vanligvis være i undervisningsmodus uansett, men subtilt). Heres en annen jeg kan ikke virkelig forklare det med ord, men jeg forstår det. Dette kan høres litt kaldt, men hvis en person virkelig ikke kan forklare noe i ord, kan de kanskje ikke forstå det. Jo, en person kan ha en fuzzy følelse av hvordan noe fungerer. Jeg kan bløffe meg gjennom å beskrive hvordan et digitalkamera fungerer, men sannheten er at jeg ikke forstår det så bra. Det er et fagområde som kalles epistemologi (studiet av kunnskap). En av de grunnleggende grunnlagene for å forstå om det er et kamera eller et mønster - er evnen til å etablere sammenheng, å identifisere kjeden av relaterte hendelser, egenskapene til noen komponenter underveis, etc. Ja, forståelse er noen ganger veldig hardt arbeid , men å dykke inn i et emne og bryte det fra hverandre er verdt innsatsen. Selv de som unngår sertifisering, vil erkjenne at prosessen med å studere for sertifiseringstester vil bidra til å fylle hull i kunnskap. En databasesjef er mer sannsynlig å ansette en databaseutvikler som kan snakke ekstremt (og uten problemer) om transaksjonsisolasjonsnivåer og utløsere, i motsetning til noen som vet om det, men sliter med å beskrive bruken av dem. Det er en annen konsekvens her. Ted Neward anbefaler at utviklere tar opp offentlige taler, blogger osv. Jeg er enig i 100. Prosessen med taler og blogging vil praktisk tvinge deg til å begynne å tenke på emner og bryte ned definisjoner som du kanskje ellers hadde tatt for gitt. For noen år siden trodde jeg at jeg forsto T-SQL MERGE-setningen ganske bra. Men først etter å ha skrevet om det og snakket om å sette spørsmål fra andre som hadde perspektiver som aldri skjedde for meg at forståelsesnivået mitt økte eksponentielt. Jeg kjenner en historie om en ansatt leder som en gang intervjuet en forfatterutvikler for en kontraktsposisjon. Ansatteforvalteren var forakt av publikasjoner generelt, og barket på søkeren. Så hvis du skal jobbe her, vil du heller skrive bøker eller skrive kode Ja, jeg gir det i noen bransjer vil det være noen rene akademikere. Men det som ansette lederen savnet var mulighetene for å styrke og skarpe ferdighetssett. Mens jeg rydde ut en gammel boks bok, kom jeg over en skatt fra 1980-tallet: Programmerere på jobb. som inneholder intervjuer med en veldig ung Bill Gates, Ray Ozzie, og andre kjente navn. Hvert intervju og hvert innsikt er verdt prisen på boken. Etter min mening var det mest interessante intervjuet med Butler Lampson. som ga noen kraftige råd. Til helvete med datakompetanse. Det er helt latterlig. Studer matematikk. Lær å tenke. Lese. Skrive. Disse tingene er av mer varig verdi. Lær hvordan å bevise teoremer: Mange bevis har samlet seg gjennom århundrene som tyder på at denne ferdigheten er overførbar til mange andre ting. Butler snakker sannheten. Jeg legger til det punktet lære å spille djevler talsmann mot deg selv. Jo mer du kan virkelighet - sjekk dine egne prosesser og arbeid, desto bedre blir du. Den store datateknikerautor Allen Holub lagde sammenhengen mellom programvareutvikling og liberal kunst spesielt, temaet i historien. Her var hans poeng: hva er historie Lesing og skriving. Hva er programvareutvikling Blant annet lesing og skriving. Jeg pleide å gi studentene mine T-SQL essay spørsmål som praksis tester. En student snakket med at jeg handlet mer som en lovprofessor. Vel, akkurat som treneren Donny Haskins sa i filmen Glory Road, min vei er vanskelig. Jeg tror fast på et sterkt intellektuelt grunnlag for ethvert yrke. Akkurat som applikasjoner kan ha fordel av rammebetingelser, kan enkeltpersoner og deres tankeprosesser også dra nytte av menneskelige rammer. Det er det grunnleggende grunnlaget for stipend. Det er en historie som på 1970-tallet utvidet IBM sin rekrutteringsinnsats i de store universitetene ved å fokusere på de beste og lysteste av liberale kunsteksamenere. Selv da innså de at de beste leserne og forfatterne en dag kunne bli sterke programmeringssystemanalytikere. (Ta gjerne den historien til en hvilken som helst HR-type som insisterer på at en kandidat må ha en datavitenskapelig grad) Og snakker om historie: Hvis det ikke er noe annet, er det viktig å huske historien om produktutgivelser hvis jeg jobber på en klientsted som fortsatt bruker SQL Server 2008 eller til og med (gisp) SQL Server 2005, må jeg huske hvilke funksjoner som ble implementert i versjonene over tid. Har noen gang en favoritt lege som du likte fordi heshe forklarte ting i vanlig engelsk, ga deg den rette sannheten, og tjente din tillit til å operere på deg. Det er gale ferdigheter. og er resultatet av erfaring og hardt arbeid som tar år og til og med flere tiår å dyrke. Det er ingen garantier for jobbsuccess fokus på fakta, ta noen beregnede risikoer når du er sikker på at du kan se deg til målstreken, la sjetongene falle hvor de kan, og aldri miste det som å være akkurat som den legen som har tjent din tillit Selv om noen dager jeg går kort, prøver jeg å behandle klienten min og deres data som en lege ville behandle pasienter. Selv om en lege gir mer penger, er det mange clicher jeg avskyder, men heres jeg ikke hater: Det er ikke noe slikt som et dårlig spørsmål. Som en tidligere instruktør hørte en ting som tok min øre, høre noen kritisere en annen person for å spørre et antatt, dumt spørsmål. Et spørsmål indikerer at en person erkjenner at de har litt gap i kunnskapen de ser for å fylle. Ja, noen spørsmål er bedre formulert enn andre, og noen spørsmål krever ytterligere innramming før de kan besvares. Men reisen fra å stille et spørsmål til et svar er sannsynlig å generere en aktiv mental prosess i andre. Det er alle gode ting. Mange gode og fruktbare diskusjoner stammer fra et dumt spørsmål. Jeg jobber over hele linja i SSIS, SSAS, SSRS, MDX, PPS, SharePoint, Power BI, DAX alle verktøyene i Microsoft BI-stakken. Jeg skriver fremdeles noen kode fra tid til annen. Men gjett hva jeg fremdeles bruker så mye tid på å skrive T-SQL-kode til profildata som en del av oppdagingsprosessen. Alle applikasjonsutviklere bør ha gode T-SQL-koteletter. Ted Neward skriver (riktig) om behovet for å tilpasse seg teknologiendringer. Jeg legger til at behovet for å tilpasse seg klientemployerendringer. Bedrifter endrer forretningsregler. Selskaper erverver andre selskaper (eller blir mål for oppkjøp). Bedrifter gjør feil i å kommunisere forretningsbehov og spesifikasjoner. Ja, vi kan noen ganger spille en rolle i å hjelpe til med å håndtere disse endringene, og noen ganger var fly, ikke frontruten. Disse forårsaker noen ganger stor smerte for alle, spesielt I. T. mennesker. Det er derfor begrepet livssituasjon eksisterer, vi må takle det. Akkurat som ingen utvikler skriver feilkode hver gang, ingen I. T. Personen har det bra med endringer hver eneste gang. En av de største kampene Ive hadde i mine 28 år i denne bransjen, viser tålmodighet og selvbeherskelse når endringer flyr fra mange forskjellige retninger. Her er hvor mitt forrige forslag om å søke etter rarified luften kan hjelpe. Hvis du klarer å assimilere endringer i tankeprosessen din, og uten å føle deg overveldet, vil odds være en betydelig ressurs. I de siste 15 månedene måtte jeg håndtere en enorm profesjonell forandring. Its been very difficult at times, but Ive resolved that change will be the norm and Ive tried to tweak my own habits as best I can to cope with frequent (and uncertain) change. Its hard, very hard. But as coach Jimmy Duggan said in the movie A League of Their Own: Of course its hard. If it wasnt hard, everyone would do it. The hard, is what makes it great . A powerful message. Theres been talk in the industry over the last few years about conduct at professional conferences (and conduct in the industry as a whole). Many respected writers have written very good editorials on the topic. Heres my input, for what its worth. 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. Så der har du det. 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.
Comments
Post a Comment