Wednesday 11 October 2017

N Dagers Eksponentiell Moving Average


Eksponentiell Flytende Gjennomsnittlig Kalkulator Gitt en bestilt liste over datapunkter, du kan konstruere det eksponentielt vektede glidende gjennomsnittet av alle punktene opp til det nåværende punktet. I et eksponentielt glidende gjennomsnitt (EMA eller EWMA for kort), reduseres vektene med en konstant faktor 945 ettersom vilkårene blir eldre. Denne typen kumulative glidende gjennomsnitt blir ofte brukt ved kartlegging av aksjekurser. Den rekursive formelen for EMA er hvor x i dag er dagens prispunkt og 945 er noen konstant mellom 0 og 1. Ofte er 945 en funksjon av et visst antall dager N. Den mest brukte funksjonen er 945 2 (N1). For eksempel har 9-dagers EMA av en sekvens 945 0,2, mens en 30-dagers EMA har 945 231 0,06452. For verdier på 945 nærmere 1, kan EMA-sekvensen initialiseres på EMA8321 x8321. Men hvis 945 er svært liten, kan de tidligste betingelsene i sekvensen motta unødig vekt med en slik initialisering. For å rette opp dette problemet i en N-dag EMA, er den første termen for EMA-sekvensen satt til å være det enkle gjennomsnittet av de første 8968 (N-1) 28969-vilkårene, og EMA starter dermed på dag nummer 8968 (N-1 ) 28 969. For eksempel, i et 9-dagers eksponentielt glidende gjennomsnitt, EMA8324 (x8321x8322x8323x8324) 4. Deretter ser EMA8325 0.2x8325 0.8EMA8324 og EMA8326 0.2x8326 0.8EMA8325 etc. ved hjelp av eksponentielle flytende gjennomsnitt. Stock analytikere ser ofte på EMA og SMA (simple moving average) av aksjekursene for å notere trender i stigning og fall eller priser og for å hjelpe de forutsi fremtidig oppførsel. Som alle bevegelige gjennomsnittsnivåer, vil høyder og nedturer i EMA-grafen ligge etter høyder og nedturer av de opprinnelige, ufiltrerte dataene. Jo høyere verdien av N, desto mindre 945 blir og jo jevnere grafen vil være. Foruten eksponentielt vektede kumulative bevegelige gjennomsnitt, kan man også beregne lineært vektet kumulative bevegelige gjennomsnitt, der vektene minsker lineært ettersom vilkårene blir eldre. Se den lineære, kvadratiske og kubiske kumulative bevegelige gjennomsnittlige artikkelen og kalkulatoren. Bruk True Range-regneark 038 Opplæringen Oppdag hvordan handelsfolk bruker gjennomsnittlig sant rekkevidde som en stopp-indikator ved kjøp av forsterkningsstrategier, og lær hvordan det beregnes i Excel. Et lager8217s rekkevidde er forskjellen mellom maksimum og minimumspris på en enkelt dag, og brukes ofte som indikator for volatilitet. Men handel stoppes ofte hvis prisene øker eller reduseres med en stor mengde på en enkelt dag. Dette observeres noen ganger i varehandel, og kan føre til et gap mellom åpnings - og sluttpriser mellom to påfølgende dager. Et daglig utvalg vil ikke nødvendigvis fange opp denne informasjonen. J. Welles Wilder introduserte sant utvalg og gjennomsnittlig sant utvalg i 1978 for bedre å beskrive denne oppførselen. Det sanne området fanger forskjellen mellom lukkings - og åpningspriser mellom to påfølgende dager. Sant område er det største av forskjellen mellom i går8217s nær og i dag8217 er lav forskjellen mellom i går8217s nær og i dag8217s høy forskjellen mellom today8217s høy og today8217s lav Den opprinnelige verdien av ekte rekkevidde er rett og slett den daglige høye minus det daglige lave. Det gjennomsnittlige sanne området (ATR) er et eksponentielt n-dagers gjennomsnitt. og kan tilnærmet ved denne ligningen. hvor n er vinduet i det bevegelige gjennomsnittet (vanligvis 14 dager) og TR er det sanne området. ATR er vanligvis initialisert (ved t 0) med et n-dagers etterfølgende gjennomsnitt av TR. Gjennomsnittlig sant utvalg angir ikke retningen til markedet, men bare volatiliteten. Ligningen gir den siste prisbevegelsen større betydning, og den brukes til å måle markedssentimentet. Det brukes vanligvis til å analysere risikoen for å ta en bestemt posisjon i markedet. En måte å gjøre dette på er å forutse daglige bevegelser basert på historiske verdier av ATR, og gå inn eller ut av markedet tilsvarende. For eksempel kan et daglig stopptap settes til 1,5 eller 2 ganger det gjennomsnittlige sanne området. Dette gir en aktiv prisfrihet til å variere naturlig på en handelsdag, men stiller fortsatt en rimelig utgangsposisjon. Videre, hvis det historiske gjennomsnittlige sanne omfanget avtaler mens prisene trender oppover, kan dette tyde på at markedssentimentet kan slå. Kombinert med Bollinger Bands. gjennomsnittlig sant utvalg er et effektivt verktøy for volatilitetsbaserte handelsstrategier. Beregn gjennomsnittlig True Range i Excel Dette Excel-regnearket bruker daglige aksjekurser for BP for de fem årene fra 2007 (lastet ned med dette regnearket). Regnearket er fullt annotert med ligninger og kommentarer for å hjelpe din forståelse. Det følgende regnearket har imidlertid mye mer smarts. Den automatiserer automatisk det gjennomsnittlige sanne området, den relative styrkeindeksen og den historiske volatiliteten fra data som den automatisk laster ned fra Yahoo Finance. Du skriver inn følgende informasjon: en aksjekrysser en start - og sluttdatoberegningsperiode for ATR, RSI og historisk volatilitet. Etter å ha klikket på en knapp, citerer regnearknedlastningsbeholdningen fra Yahoo Finance (spesielt de daglige åpne, lukkede, høye og lave prisene mellom de to datoene). Det plotter da det gjennomsnittlige sanne omfanget og den historiske volatiliteten. It8217s veldig enkelt å bruke I8217d elsker å høre hva du synes, eller hvis du har noen forbedringer som du liker. 11 tanker om ldquo Gjennomsnittlig True Range-regneark 038 Tutorial rdquo Som Free Spreadsheets Master Knowledge Base Siste innlegg22 SQL for analyse og rapportering Oracle har forbedret SQLs analytiske behandlingsfunksjoner ved å introdusere en ny familie av analytiske SQL-funksjoner. Disse analytiske funksjonene gjør det mulig å beregne: Rangeringer og prosentiler Flytte vinduberegninger Linjær regresjonsstatistikk Rangeringsfunksjoner inkluderer kumulative distribusjoner, prosentranger og N-fliser. Flytte vindu beregninger lar deg finne bevegelige og kumulative aggregasjoner, for eksempel summer og gjennomsnitt. Laglead analyse muliggjør direkte mellomrange referanser, slik at du kan beregne period-to-period endringer. Firstlast analyse lar deg finne den første eller siste verdien i en bestilt gruppe. Andre forbedringer til SQL inkluderer CASE-uttrykket og partisjonert ytre tilkobling. CASE uttrykkene gir hvis-da logikk nyttig i mange situasjoner. Partisjonert ytre sammenføyning er en utvidelse av ANSI ytre tilkoblingssyntax som lar brukerne selektivt tette visse dimensjoner mens andre holdes sparsomme. Dette gjør det mulig for rapporteringsverktøyene å selektivt tette dimensjoner, for eksempel de som vises i sine tverrgående rapporter samtidig som de holder andre sparsomme. For å forbedre ytelsen, kan analytiske funksjoner parallelliseres: flere prosesser kan samtidig utføre alle disse setningene. Disse funksjonene gjør beregningene enklere og mer effektive, og forbedrer databasens ytelse, skalerbarhet og enkelhet. Analytiske funksjoner er klassifisert som beskrevet i tabell 22-1. Tabell 22-1 Analytiske funksjoner og deres bruksområder For å utføre disse operasjonene, legger de analytiske funksjonene flere nye elementer til SQL-behandling. Disse elementene bygger på eksisterende SQL for å tillate fleksible og kraftige beregningsuttrykk. Med noen få unntak har de analytiske funksjonene disse nye elementene. Behandlingsstrømmen er representert i figur 22-1. Figur 22-1 Behandlingsordre De essensielle begrepene som brukes i analytiske funksjoner er: Søkebehandling ved hjelp av analytiske funksjoner foregår i tre trinn. Først går alle sammen, hvor. GROUP BY og HAVING klausuler utføres. For det andre blir resultatsettet gjort tilgjengelig for de analytiske funksjonene, og alle deres beregninger finner sted. For det tredje, hvis spørringen har en ORDER BY-klausul ved slutten, behandles ORDER BY for å tillate presis utskriftsbestilling. Behandlingsordren er vist i figur 22-1. Resultatopprettede partisjoner De analytiske funksjonene tillater brukere å dele spørringsresultatsettene i grupper av rader som kalles partisjoner. Vær oppmerksom på at begrepet partisjoner som brukes med analytiske funksjoner ikke er relatert til tabellpartisjonen. Gjennom dette kapittelet refererer begrepet partisjoner bare til meningen som er relatert til analytiske funksjoner. Partisjoner opprettes etter at gruppene er definert med GROUP BY-klausuler, slik at de er tilgjengelige for eventuelle aggregerte resultater som summer og gjennomsnitt. Partisjon divisjoner kan være basert på eventuelle ønskede kolonner eller uttrykk. Et spørringsresultat sett kan deles inn i bare en partisjon som holder alle rader, noen store partisjoner, eller mange små partisjoner som holder bare noen få rader hver. For hver rad i en partisjon, kan du definere et glidende vindu med data. Dette vinduet bestemmer rekkevidden av rader som brukes til å utføre beregningene for den aktuelle raden. Vinduestørrelser kan baseres på enten et fysisk antall rader eller et logisk intervall som tid. Vinduet har en startrute og en enderig rad. Avhengig av definisjonen kan vinduet bevege seg i en eller begge ender. For eksempel vil et vindu definert for en kumulativ sum-funksjon ha sin startrute festet på den første raden i partisjonen, og den enderende raden vil glide fra startpunktet helt til den siste raden i partisjonen. I motsetning til dette ville et vindu definert for et bevegelig gjennomsnittssted ha både start - og sluttpunktslid slik at de opprettholder et konstant fysisk eller logisk område. Et vindu kan settes så stort som alle rader i en partisjon eller bare et skyvevindu på en rad i en partisjon. Når et vindu er nær en kantlinje, returnerer funksjonen resultater for bare tilgjengelige rader, i stedet for å advare deg om at resultatene ikke er det du vil ha. Når du bruker vindusfunksjoner, er den nåværende raden inkludert under beregningene, så du bør kun spesifisere (n -1) når du arbeider med n elementer. Hver beregning utført med en analytisk funksjon er basert på en nåværende rad i en partisjon. Den nåværende raden tjener som referansepunkt som bestemmer start og slutt på vinduet. For eksempel kan en sentrert glidende gjennomsnittlig beregning defineres med et vindu som holder nåværende rad, de seks foregående radene og de følgende seks radene. Dette ville skape et glidende vindu med 13 rader, som vist i figur 22-2. Figur 22-2 Skyvevindueksempel Rangering, vindsetting og rapporteringsfunksjoner Denne delen illustrerer de grunnleggende analytiske funksjonene for rangering, windowing og rapportering. Eksempel linjær regresjonsberegning I dette eksemplet beregner vi en regresjonslinje med ordinært minste kvadrat som uttrykker mengden som er solgt av et produkt som en lineær funksjon av produktlisten. Beregningene er gruppert etter salgskanal. Verdiene SLOPE. INTCPT. RSQR er henholdsvis helling, avskjæring og bestemmelseskoeffisient av regresjonslinjen. Verdien (heltall) COUNT er antall produkter i hver kanal for hvem både solgt kvantum og listeprisdata er tilgjengelige. Statistiske aggregater Oracle gir et sett med SQL statistiske funksjoner og en statistikkpakke, DBMSSTATFUNCS. Denne delen viser noen av de nye funksjonene sammen med grunnleggende syntaks. Beskrivende statistikk Du kan beregne følgende beskrivende statistikk: Median av en datasettmodus for et datasett Du kan beregne følgende parametriske statistikk: Spearmans rho-koeffisient Kendalls tau-b Koeffisient I tillegg til funksjonene har denne utgivelsen en PLSQL-pakke, DBMSSTATFUNCS . Den inneholder den beskrivende statistiske funksjonen SAMMENDRAG sammen med funksjoner for å støtte distribusjonsmontering. Sammendragsfunksjonen oppsummerer en numerisk kolonne av et bord med en rekke beskrivende statistikker. De fem distribusjonsfunksjonene støtter normal, uniform, Weibull, Poisson og eksponentielle distribusjoner. Brukerdefinerte aggregater Oracle tilbyr et anlegg for å lage dine egne funksjoner, kalt brukerdefinerte aggregatfunksjoner. Disse funksjonene er skrevet i programmeringsspråk som PLSQL, Java og C, og kan brukes som analytiske funksjoner eller aggregater i materialiserte visninger. Se Oracle Database Data Cartridge Developers Guide for ytterligere informasjon om syntaks og begrensninger. Fordelene ved disse funksjonene er: Meget komplekse funksjoner kan programmeres ved hjelp av et fullt prosessorisk språk. Høyere skalerbarhet enn andre teknikker når brukerdefinerte funksjoner er programmert for parallellbehandling. Objektdatatyper kan behandles. Som et enkelt eksempel på en brukerdefinert aggregatfunksjon, bør du vurdere skråstatistikken. Denne beregningen måler hvis et datasett har en skrå fordeling om dens gjennomsnitt. Det vil fortelle deg om en hale av fordelingen er betydelig større enn den andre. Hvis du opprettet et brukerdefinert aggregat som kalles utskew og brukt det til kredittgrenseverdiene i forrige eksempel, kan SQL-setningen og resultatene se slik ut: Før du bygger brukerdefinerte aggregatfunksjoner, bør du vurdere om dine behov kan oppfylles i vanlig SQL. Mange komplekse beregninger er mulige direkte i SQL, spesielt ved å bruke CASE-uttrykket. Å holde fast med vanlig SQL vil muliggjøre enklere utvikling, og mange spørringsoperasjoner er allerede godt parallellisert i SQL. Selv det tidligere eksempelet, skråstatistikken, kan opprettes ved hjelp av standard, om enn langvarig, SQL. Dreieoperasjoner D-ataene som returneres av forretningsinformasjonsforespørsler, er ofte mest anvendbare hvis de presenteres i et krysstabulært format. Pivotclause av SELECT-setningen lar deg skrive crosstabuleringsforespørsler som roterer rader i kolonner, aggregere data i rotasjonsprosessen. Pivoting er en viktig teknikk i datalager. I den forvandler du flere rader med innspill til færre og generelt bredere rader i datalageret. Når du svinger, blir en aggregeringsoperatør søkt for hvert element i pivotkolonnens verdiviste. Pivottkolonnen kan ikke inneholde et vilkårlig uttrykk. Hvis du må svinge på et uttrykk, bør du alias uttrykket i en visning før PIVOT-operasjonen. Den grunnleggende syntaksen er som følger: For å illustrere bruken av sving, opprett følgende visning som grunnlag for senere eksempler: Eksempel: Dreiing Følgende setning illustrerer en typisk sving på kanalkolonnen: Merk at utgangen har opprettet fire nye aliased kolonner , DIREKTE SALG. INTERNETSALES. CATALOGSALES. og TELESALES. en for hver av pivotverdiene. Utgangen er summen. Hvis ingen alias er oppgitt, vil kolonneoverskriften være verdiene til IN-listen. Vri på flere kolonner Du kan pivotere på mer enn en kolonne. Følgende setning illustrerer en typisk flere kolonnepivot: Merk at dette eksemplet angir en IN-liste med flere kolonner med kolonneoverskrifter utformet for å matche IN-listen-medlemmene. Vridning: Flere aggregater Du kan pivotere med flere aggregater, som vist i følgende eksempel: Merk at spørringen oppretter kolonneoverskrifter ved å sammenkoble dreieverdiene (eller aliaset) med aliaset for aggregatfunksjonen, pluss en understrekning. Distinguishing PIVOT-Generated Nulls from Nulls i Source Data Du kan skille mellom nullverdier som genereres fra bruk av PIVOT og de som eksisterer i kildedataene. Følgende eksempel illustrerer nuller som PIVOT genererer. Følgende spørring returnerer rader med 5 kolonner, kolonne prodid. og pivot resulterende kolonner Q1. Q1COUNTTOTAL. Q2. Q2COUNTTOTAL. For hver unik verdi av prodid. Q1COUNTTOTAL returnerer totalt antall rader hvis qtr-verdi er Q1. det vil si, og Q2COUNTTOTAL returnerer totalt antall rader hvis qtr-verdi er Q2. Anta at vi har en bordsalg2 av følgende struktur: Fra resultatet vet vi at for prodid 100 er det to salgsrader for kvartalet Q1. og 1 salgsstrek for kvartalet Q2 for prodid 200, er det 1 salgsstrek for kvartalet Q1. og ingen salgsstrek for kvartalet 2. Så i Q2COUNTTOTAL. Du kan identifisere at NULLlt1gt kommer fra en rad i den opprinnelige tabellen, hvis mål er null verdi, mens NULLlt2gt skyldes at ingen rad er tilstede i opprinnelig tabell for prodid 200 i kvartalet Q2. Unpivoting Operations En unpivot reverserer ikke en PIVOT-operasjon. I stedet roterer det data fra kolonner til rader. Hvis du arbeider med pivoted data, kan en UNPIVOT-operasjon ikke reversere noen aggregeringer som er gjort av PIVOT eller på noen annen måte. For å illustrere unpivoting, må du først opprette et pivotbord som inneholder fire kolonner, for kvartaler av året: Tabellinnholdene ligner på følgende: Den følgende UNPIVOT-operasjonen roterer kvartkolonnene i rader. For hvert produkt vil det være fire rader, en for hvert kvartal. Legg merke til bruken av INCLUDE NULLS i dette eksemplet. Du kan også bruke EXCLUDE NULLS. som er standardinnstillingen. I tillegg kan du også unpivot bruke to kolonner, som i følgende: Wildcard og Subquery Pivoting med XML-operasjoner Hvis du vil bruke et wildcard-argument eller subquery i svingbare kolonnene, kan du gjøre det med PIVOT XML-syntaks. Med PIVOT XML er utdataene fra operasjonen riktig formatert XML. Følgende eksempel illustrerer ved hjelp av wildcard søkeordet, noe. Den sender ut XML som inneholder alle kanalverdier i salgsvisning: Merk at søkeordet ALLE er bare tilgjengelig i PIVOT-operasjoner som en del av en XML-operasjon. Denne utdataen inneholder data for tilfeller der kanalen finnes i datasettet. Vær også oppmerksom på at aggregeringsfunksjoner må angi en GROUP BY-klausul for å returnere flere verdier, men pivotclause inneholder ikke en eksplisitt GROUP BY-klausul. I stedet utfører pivotclause en implisitt GROUP BY. Følgende eksempel illustrerer ved hjelp av en underforespørsel. Den utsender XML som inneholder alle kanalverdier og salgsdata som tilsvarer hver kanal: Utgangen tetter dataene for å inkludere alle mulige kanaler for hvert produkt. Datadensifisering for rapporteringsdata lagres normalt i sparsom form. Det vil si at hvis ingen verdi eksisterer for en gitt kombinasjon av dimensjonsverdier, eksisterer ingen rad i faktatabellen. Du vil imidlertid kanskje se dataene i tett form, med rader for alle kombinasjoner av dimensjonsverdier som vises selv når det ikke finnes noen faktumdata for dem. For eksempel, hvis et produkt ikke solgte i en bestemt tidsperiode, vil du kanskje fortsatt se produktet for den perioden med null salgsverdi ved siden av den. Videre kan tidsserier beregninger utføres lettest når dataene er tette langs tidsdimensjonen. Dette skyldes at tette data vil fylle et konsistent antall rader for hver periode, noe som igjen gjør det enkelt å bruke de analytiske vinduene med fysiske forskyvninger. Datadensifisering er prosessen med å konvertere sparsomme data til tett form. For å overvinne problemet med sparsity, kan du bruke et partisjonert ytre sammenføyning for å fylle hullene i en tidsserie eller en annen dimensjon. En slik samling utvider den konvensjonelle ytre sammenkoblingssyntaxen ved å påføre den ytre sammenføyning til hver logisk partisjon definert i en forespørsel. Oracle skiller logisk partiene i spørringen din basert på uttrykket du angir i PARTITION BY-klausulen. Resultatet av en partisjonert ytre sammenføyning er en UNION av ytre leddene til hver av partisjonene i det logisk oppdelte bordet med bordet på den andre siden av festet. Legg merke til at du kan bruke denne typen til å fylle hullene i en hvilken som helst dimensjon, ikke bare tidsdimensjonen. De fleste eksemplene her fokuserer på tidsdimensjonen, fordi det er den dimensjonen som oftest brukes som grunnlag for sammenligninger. Partisjon Bli med syntaks Syntaksen for partisjonert ytre slett utvider ANSI SQL JOIN-klausulen med setningen PARTISJON BY etterfulgt av en uttrykksliste. Uttrykkene i listen angir gruppen som det ytre medlemmet er brukt på. Følgende er de to syntaksformene som vanligvis brukes for partisjonert ytre sammenføyning: Merk at FULL OUTER JOIN ikke støttes med en partisjonert ytre sammenføyning. Eksempel på sparsomme data En typisk situasjon med en sparsom dimensjon er vist i følgende eksempel, som beregner det ukentlige salget og det årlige salg for produktet Bounce for uker 20-30 i 2000 og 2001: I dette eksemplet ville forvente 22 rader med data (11 uker hver fra 2 år) dersom dataene var tette. Vi får imidlertid kun 18 rader fordi uker 25 og 26 mangler i 2000 og uker 26 og 28 i 2001. Fylling av hull i data Vi kan ta de sparsomme dataene fra foregående spørring og gjøre en partisjonert ytre sammenføyning med et tett sett med tidsdata. I det følgende spørsmålet alias vi vårt opprinnelige spørsmål som v, og vi velger data fra tidstabellen, som vi alias som t. Her henter vi 22 rader fordi det ikke er noen hull i serien. De fire tilsatte radene har hver 0 som deres salgsverdi satt til 0 ved hjelp av NVL-funksjonen. Merk at i denne spørringen ble en WHERE-tilstand plassert i uker mellom 20 og 30 i inlinevisningen for tidsdimensjonen. Dette ble introdusert for å holde resultatet satt lite. Fylle hull i to dimensjoner N-dimensjonale data vises vanligvis som en tett 2-dimensjonell tverrfane med (n - 2) sidedimensjoner. Dette krever at alle dimensjonsverdier for de to dimensjonene som vises i kryssfanen fylles inn. Følgende er et annet eksempel hvor den fordelte ytre sammenkoblingsfunksjonen kan brukes til å fylle hullene i to dimensjoner: I denne spørringen er WITH subquery factoring-klausulen v1 oppsummerer salgsdata på produkt, land og årsnivå. Dette resultatet er sparsomt, men brukere vil kanskje se hele landet, årkombinasjoner for hvert produkt. For å oppnå dette, tar vi hver partisjon av v1 basert på produktverdier og ytterligere bli med på landsdimensjonen først. Dette vil gi oss alle verdier av land for hvert produkt. Vi tar da det resultatet og partisjonerer det på produkt og land verdier og deretter ytre bli med på tid dimensjon. Dette gir oss alle tidsverdier for hver produkt og landkombinasjon. Fylle hull i en beholdningstabel En oversiktstabell sporer vanligvis antall enheter tilgjengelig for ulike produkter. Dette bordet er sparsomt: det lagrer bare en rad for et produkt når det er en hendelse. For et salgstabell er arrangementet et salg, og for oppslagstabellen er hendelsen en endring i mengden som er tilgjengelig for et produkt. For eksempel, tenk på følgende oppslagstabell: Innholdstabellen har nå følgende rader: For rapporteringsformål, kan brukere kanskje se denne beholdningsdata på en annen måte. For eksempel vil de kanskje se alle tidsverdier for hvert produkt. Dette kan oppnås ved å bruke partisjonert ytre sammenføyning. I tillegg, for de nylig innførte rader med manglende tidsperioder, kan brukere kanskje se verdiene for mengden enhetskolonne som skal overføres fra den siste eksisterende tidsperioden. Sistnevnte kan oppnås ved bruk av analytisk vindusfunksjon LASTVALUE-verdi. Her er spørringen og ønsket utdata: Det interne spørsmålet beregner en partisjonert ytre tilkobling til tiden innen hvert produkt. Det indre spørsmålet tetter dataene på tidsdimensjonen (det betyr at tidsdimensjonen nå har en rad for hver ukedag). Målkolonnekvantiteten vil imidlertid ha nuller for de nylig tilførte raderne (se utgangen i kolonnekvantiteten i følgende resultater. Den ytre spørringen bruker den analytiske funksjonen LASTVALUE. Ved å bruke denne funksjonen partisjonerer dataene etter produkt og bestiller dataene på tidsdimensjonskolonne (timeid). For hver rad finner funksjonen den siste ikke-nullverdien i vinduet på grunn av alternativet IGNORE NULLS. som du kan bruke med både LASTVALUE og FIRSTVALUE. Vi ser ønsket utgang i kolonnen repeatedquantity i Følgende utdata: Datamengder for datamengder til utfyllingsfel Eksempler i forrige avsnitt illustrerer hvordan du bruker partisjonert ytre sammenføyning for å fylle hull i en eller flere dimensjoner. Resultatsettene som er produsert av partisjonert ytre sammenføyning, har nullverdier for kolonner som ikke er inkludert i PARTITION BY-listen. Disse er vanligvis målekolonner. Brukere kan benytte seg av analytiske SQL-funksjoner for å erstatte disse nullverdiene med en null-verdi. For eksempel er følgende q Du beregner månedlige totals for produkter 64 MB minne og DVD-R-plater (produkt ID 122 og 136) for år 2000. Det bruker partisjonert ytre sammenføyning for å tette dataene for alle måneder. For de manglende månedene bruker den den analytiske SQL-funksjonen AVG til å beregne salget og enhetene som gjennomsnittet av månedene da produktet ble solgt. Hvis du arbeider i SQLPlus, bryter følgende to kommandoer kolonneoverskriftene for større lesbarhet av resultater: Tidsserieregninger på Densified Data Densificatio n er ikke bare for rapporteringsformål. Det muliggjør også bestemte typer beregninger, spesielt tidsrekkeberegninger. Tidsserier beregninger er lettere når dataene er tette langs tidsdimensjonen. Tette data har et konsekvent antall rader for hver tidsperiode, noe som igjen gjør det enkelt å bruke analytiske vindufunksjoner med fysiske forskyvninger. For å illustrere, la oss først ta eksemplet på Filling Gaps in Data. og lar vi legge til en analytisk funksjon for det spørringen. I den følgende forbedrede versjonen beregner vi ukentlig årlig salg sammen med det ukentlige salget. NULL verdsetter at partisjonert ytre sammenføyning settes inn i å lage tidsseriene tett, håndteres på vanlig måte: SUM-funksjonen behandler dem som 0s. Sammenligning fra periode til periode for ett tidsnivå: Eksempel Hvordan bruker vi denne funksjonen til å sammenligne verdier over tidsperioder Spesifikt, hvordan beregner vi en årsomsetning sammenligning på ukenivå? Følgende spørring returnerer på samme rad , for hvert produkt, det årlige salg for hver uke i 2001 med år 2000. Merk at i dette eksemplet begynner vi med en - klausul. Dette forbedrer lesbarheten av spørringen, og lar oss fokusere på den partisjonerte ytre sammenføyningen. Hvis du arbeider i SQLPlus, bryter følgende kommando kolonneoverskriftene for større lesbarhet av resultatene: I FROM-klausulen i inlinevisningen densesales. vi bruker en partisjonert ytre sammenføyning av aggregatvisning v og tidvisning t for å fylle hull i salgsdata langs tidsdimensjonen. Utgangen av det partisjonerte ytre sammenføyning blir deretter behandlet av den analytiske funksjonen SUM. OVER å beregne det ukentlige årlige salg (weeklyytdsales-kolonnen). Dermed beregner visningen densesales de årlige salgsdataene for hver uke, inkludert de som mangler i samlet visning s. Inline-visningsåret utgjør deretter årets ukentlige årlige salg ved hjelp av LAG-funksjonen. LAG-funksjonen merket weeklyytdsalsprioryear angir en PARTITION BY-klausul som parrer rader for samme uke i år 2000 og 2001 i en enkelt partisjon. Vi sender deretter en offset på 1 til LAG-funksjonen for å få det ukentlige året til dags salg for det foregående året. Den ytterste spørringsblokken velger data fra årsrekvisita med betingelsen år 2001. Og dermed returnerer spørringen for hvert produkt den ukentlige årlig salg i de angitte ukene av årene 2001 og 2000. Sammenligning fra perioder til periode for flere tidsnivåer: Eksempel Mens det tidligere eksemplet viser oss en måte å lage sammenligninger for et enkelt tidsnivå, ville det være enda mer nyttig å håndtere flere tidsnivåer i ett enkelt søk. For eksempel kan vi sammenligne salg mot tidligere periode på år, kvartal, måned og dagsnivå. Hvordan kan vi lage en spørring som utfører en årlig sammenligning av årlig salg for alle nivåer av vårt tidsherarki Vi vil ta flere skritt for å utføre denne oppgaven. Målet er en enkelt spørring med sammenligninger på dag, uke, måned, kvartal og årsnivå. Trinnene er som følger: Vi vil lage en visning kalt cubeprodtime. som har en hierarkisk kube av salg samlet i tider og produkter. Deretter vil vi lage en oversikt over tidsdimensjonen som skal brukes som kanten av kuben. Tidskanten, som har et komplett sett med datoer, vil bli partisjonert ytre som er slått sammen med de sparsomme dataene i visningen cubeprodtime. Til slutt, for maksimal ytelse, vil vi lage en materialisert visning, mvprodtime. bygget med samme definisjon som cubeprodtime. For mer informasjon om hierarkiske kuber, se kapittel 21, SQL for aggregering i datavarehus. Den materialiserte utsikten er definert i trinn 1 i det følgende avsnittet. Trinn 1 Opprett den hierarkiske kubevisningen Den materialiserte visningen som vises i det følgende, finnes allerede i systemet ditt, hvis ikke, opprett det nå. Hvis du må generere det, merk at vi begrenser spørringen til bare to produkter for å holde behandlingen kort. Fordi denne visningen er begrenset til to produkter, returnerer den litt over 2200 rader. Merk at kolonnen HierarchicalTime inneholder strengrepresentasjoner av tid fra alle nivåer av tidshierarkiet. CASE-uttrykket som brukes til kolonnen HierarchicalTime, legger til en markør (0, 1.) til hver datastreng for å angi tidsnivået for verdien. A 0 representerer årsnivå, 1 er kvartaler, 2 er måneder og 3 er dag. Merk at GROUP BY-klausulen er en sammenkoblet ROLLUP som spesifiserer opprullingshierarkiet for tid og produktdimensjonene. GROUP BY-klausulen er hva som bestemmer det hierarkiske kubens innhold. Trinn 2 Opprett visningstidspunktet, som er et komplett sett med datoverdier. Edgetime er kilden for å fylle tidsgap i den hierarkiske kuben ved hjelp av en partisjonert ytre sammenføyning. Kolonnen HierarchicalTime i edgetime vil bli brukt i en partisjonert delta i kolonnen HierarkicalTime i view cubeprodtime. Følgende setning definerer edetime: Trinn 3 Opprett den materialiserte visningen mvprodtime for å støtte raskere ytelse. Den materialiserte visningsdefinisjonen er et duplikat av visnings cubeprodtime definert tidligere. Fordi det er en duplisert spørring, vil referanser til cubeprodtime bli omskrevet for å bruke mvprodtime materialisert visning. Følgende materialiseres kan allerede eksistere i systemet ditt hvis ikke, lag det nå. Hvis du må generere det, merk at vi begrenser spørringen til bare to produkter for å holde behandlingen kort. Trinn 4 Opprett sammenligningsforespørsel Vi har nå satt scenen for vår sammenligningsforespørsel. Vi kan oppnå sammenligning av periode til periode på alle tidspunkter. Det krever å bruke analytiske funksjoner til en hierarkisk kube med tette data langs tidsdimensjonen. Noen av beregningene vi kan oppnå for hvert tidsnivå er: Summen av salg for tidligere periode på alle tidspunkter. Variasjon i omsetning i forrige periode. Sum av salg i samme periode for et år siden på alle nivåer av tid. Variasjon i omsetning i samme periode i fjor. Følgende eksempel utfører alle fire av disse beregningene. Den bruker en partisjonert ytre tilkobling av visningene cubeprodtime og edgetime for å lage en inlinevisning av tette data kalt densecubeprodtime. Spørringen bruker da LAG-funksjonen på samme måte som det forrige eksemplet på et enkelt nivå. Den ytre WHERE-klausulen spesifiserer tid på tre nivåer: dagene august 2001, hele måneden og hele tredje kvartal 2001. Merk at de to siste radene av resultatene inneholder månedsnivå og kvartalsnivå aggregeringer. Merk det å gjøre Resultatene er enklere å lese hvis du bruker SQLPlus, kolonneoverskriftene bør justeres med følgende kommandoer. Kommandoene vil brette kolonneoverskriftene for å redusere linjelengden: Her er spørringen som sammenligner nåværende salg til tidligere og år siden salg: Den første LAG-funksjonen (salespriorperiod) partisjonerer dataene på gidp. katt. Subcat. prod. Gidt og ordner radene på hele tiden dimensjonskolonner. Det blir salgsverdien for den forrige perioden ved å sende en offset på 1. Den andre LAG-funksjonen (salessameperiodprioryear) partisjonerer dataene på ytterligere kolonner qtrnum. monnum. og dag og bestiller det på år, slik at det med en kompensasjon på 1 kan beregne årets salg for samme periode. Det ytre SELECT-klausulet beregner avvikene. Opprette et egendefinert medlem i en dimensjon: Eksempel I mange analytiske SQL-oppgaver er det nyttig å definere egendefinerte medlemmer i en dimensjon. For eksempel kan du definere en spesialisert tidsperiode for analyser. Du kan bruke en partisjonert ytre sammenføyning for midlertidig å legge til et medlem i en dimensjon. Merk at det nye SQL MODEL-kriteriet er egnet for å skape mer komplekse scenarier som involverer nye medlemmer i dimensjoner. Se kapittel 23, SQL for modellering for mer informasjon om dette emnet. Som et eksempel på en oppgave, hva om vi ønsker å definere et nytt medlem for vår tidsdimensjon. Vi ønsker å opprette et 13. medlem av månedsnivået i vår tidsdimensjon. Denne 13 måneden er definert som summen av salget for hvert produkt i den første måneden i hvert kvartal 2001. Løsningen har to trinn. Legg merke til at vi vil bygge denne løsningen ved hjelp av visningene og tabellene som er opprettet i det forrige eksempelet. To trinn er påkrevd. Først oppretter du en visning med det nye medlemmet lagt til riktig dimensjon. Visningen bruker en UNION ALL-operasjon for å legge til det nye medlemmet. For å søke etter bruk av det egendefinerte medlemmet, bruk et CASE-uttrykk og en partisjonert ytre tilslutning. Vårt nye medlem for tidsdimensjonen er opprettet med følgende visning: I denne setningen er visningen timec definert ved å utføre en UNION ALLE edgtime-visningen (definert i forrige eksempel) og den brukerdefinerte 13. måned. Gittverdien på 8 ble valgt for å skille det tilpassede medlemmet fra standardmedlemmene. UNION ALL angir attributter for en 13 måneders medlem ved å gjøre en SELECT fra DUAL-tabellen. Merk at grupperings-ID, kolonne viser. er satt til 8, og kvartstallet er satt til 5. Deretter er det andre trinnet å bruke en inlinevisning av spørringen for å utføre en partisjonert ytre tilkobling av cubeprodtime med timec. Dette trinnet skaper salgsdata for 13. måned på hvert nivå av produktaggregering. I hovedspørsmålet brukes den analytiske funksjonen SUM med et CASE-uttrykk for å beregne den 13. måned, som er definert som summering av første måneders salg av hvert kvartal. SUM-funksjonen bruker en CASE for å begrense dataene til månedene 1, 4, 7 og 10 innen hvert år. På grunn av det lille datasettet, med bare 2 produkter, er opprullingsverdiene av resultatene nødvendigvis repetisjoner av lavere nivåaggregasjoner. For mer realistiske sett med opprullingsverdier kan du inkludere flere produkter fra underkategorier for spillkonsoll og Y-bokspill i den underliggende materialiserte visningen. Diverse analyse - og rapporteringsfunksjoner Denne delen illustrerer følgende ekstra analytiske evner: WIDTHBUCKET-funksjon For et gitt uttrykk returnerer WIDTHBUCKET-funksjonen bøndenummeret som resultatet av dette uttrykket vil bli tildelt etter at det er evaluert. Du kan generere equividth histogrammer med denne funksjonen. Equiwidthistogrammer deler datasett i bukser hvis intervallstørrelse (høyeste verdi til laveste verdi) er lik. Antall rader som holdes av hver bøtte, vil variere. En relatert funksjon, NTILE. skaper equiheight skuffer. Equiwidthistogrammer kan bare genereres for numeriske, dato - eller datetime-typer. Så de tre første parameterne skal være alle numeriske uttrykk eller alle datouttrykk. Andre typer uttrykk er ikke tillatt. Hvis den første parameteren er NULL. Resultatet er NULL. Hvis den andre eller den tredje parameteren er NULL. En feilmelding returneres, da en NULL-verdi ikke kan angi et sluttpunkt (eller et hvilket som helst punkt) for et område i en dato eller numerisk verdi-dimensjon. Den siste parameteren (antall bøtter) skal være et numerisk uttrykk som vurderer til et positivt heltall 0, NULL. eller en negativ verdi vil resultere i en feil. Skuffer er nummerert fra 0 til (n 1). Bucket 0 holder verdien av verdier mindre enn minimumet. Bucket (n 1) inneholder antall verdier som er større enn eller lik den maksimalt angitte verdien. WIDTHBUCKET Syntax WIDTHBUCKET tar fire uttrykk som parametere. Den første parameteren er uttrykket som ekvividthistogrammet er for. Den andre og tredje parameteren er uttrykk som angir sluttpunktene for det akseptable området for den første parameteren. Den fjerde parameteren angir antall bøtter. Vurder følgende data fra bordkunder. som viser kredittgrensene for 17 kunder. Disse dataene er samlet i spørringen vist i eksempel 22-24. I bordet kunder. kolonnen custcreditlimit inneholder verdier mellom 1500 og 15000, og vi kan tildele verdiene til fire equiwidth buckets, nummerert fra 1 til 4, ved å bruke WIDTHBUCKET (custcreditlimit, 0, 20000, 4). Ideelt sett er hver bøtte et lukket åpent intervall av den reelle talelinjen, for eksempel er bøtte nummer 2 tildelt score mellom 5000.0000 og 9999.9999. sometimes denoted 5000, 10000) to indicate that 5,000 is included in the interval and 10,000 is excluded. To accommodate values outside the range 0, 20,000), values less than 0 are assigned to a designated underflow bucket which is numbered 0, and values greater than or equal to 20,000 are assigned to a designated overflow bucket which is numbered 5 (num buckets 1 in general). See Figure 22-3 for a graphical illustration of how the buckets are assigned. Figure 22-3 Bucket Assignments You can specify the bounds in the reverse order, for example, WIDTHBUCKET ( custcreditlimit. 20000. 0. 4 ). When the bounds are reversed, the buckets will be open-closed intervals. In this example, bucket number 1 is ( 15000,20000 , bucket number 2 is ( 10000,15000 , and bucket number 4, is ( 0 ,5000 . The overflow bucket will be numbered 0 ( 20000. infinity ), and the underflow bucket will be numbered 5 (- infinity. 0 . It is an error if the bucket count parameter is 0 or negative. Example 22-24 WIDTHBUCKET The followin g query shows the bucket numbers for the credit limits in the customers table for both cases where the boundaries are specified in regular or reverse order. We use a range of 0 to 20,000. Linear Algebra Linear algebra is a branch of mathematics with a wide range of practical applications. Many areas have tasks that can be expressed using linear algebra, and here are some examples from several fields: statistics (multiple linear regression and principle components analysis), data mining (clustering and classification), bioinformatics (analysis of microarray data), operations research (supply chain and other optimization problems), econometrics (a nalysis of consumer demand data), and finance (asset allocation problems). Various libraries for linear algebra are freely available for anyone to use. Oracles UTLNLA package exposes matrix PLSQL data types and wrapper PLSQL subprograms for two of the most popular and robust of these libraries, BLAS and LAPACK. Linear algebra depends on matrix manipulation. Performing matrix manipulation in PLSQL in the past required inventing a matrix representation based on PLSQLs native data types and then writing matrix manipulation routines from scratch. This required substantial programming effort and the performance of the resulting implementation was limited. If developers chose to send data to external packages for processing rather than create their own routines, data transfer back and forth could be time consuming. Using the UTLNLA package lets data stay within Oracle, removes the programming effort, and delivers a fast implementation. Example 22-25 Linear Algebra Here is an example of how Oracles linear algebra support could be used for business analysis. It invokes a multiple linear regression application built using the UTLNLA package. The multiple regression application is implemented in an object called OLSRegression. Note that sample files for the OLS Regression object can be found in ORACLEHOMEplsqldemo . Consider the scenario of a retailer analyzing the effectiveness of its marketing program. Each of its stores allocates its marketing budget over the following possible programs: media advertisements ( media ), promotions ( promo ), discount coupons ( disct ), and direct mailers ( dmail ). The regression analysis builds a linear relationship between the amount of sales that an average store has in a given year ( sales ) and the spending on the four components of the marketing program. Suppose that the marketing data is stored in the following table: Then you can build the following sales-marketing linear model using coefficients: This model can be implemented as the following view, which refers to the OLS regression object: Using this view, a marketing program manager can perform an analysis such as Is this sales-marketing model reasonable for year 2004 data That is, is the multiple-correlation greater than some acceptable value, say, 0.9 The SQL for such a query might be as follows: You could also solve questions such as What is the expected base-line sales revenue of a store without any marketing programs in 2003 or Which component of the marketing program was the most effective in 2004 That is, a dollar increase in which program produced the greatest expected increase in sales See Oracle Database PLSQL Packages and Types Reference for further information regarding the use of the UTLNLA package and linear algebra. CASE Expressions Oracle now supports simple and searched CASE statements. CASE statements are similar in purpose to the DECODE statement, but they offer more flexibility and logical power. They are also easier to read than traditional DECODE statements, and offer better performance as well. They are commonly used when breaking categories into buckets like age (for example, 20-29, 30-39, and so on). The syntax for simple CASE statements is: Simple CASE expressions test if the expr value equals the comparisonexpr . The syntax for searched CASE statements is: You can use any kind of condition in a searched CASE expression, not just an equality test. You can specify only 65,535 arguments and each WHEN. THEN pair counts as two arguments. To avoid exceeding this limit, you can nest CASE expressions so that the returnexpr itself is a CASE expression. Example 22-26 CASE Suppose you wanted to find the average salary of all employees in the company. If an employees salary is less than 2000, you want the query to use 2000 instead. Without a CASE statement, you might choose to write this query as follows: Note that this runs against the hr sample schema. In this, foo is a function that returns its input if the input is greater than 2000, and returns 2000 otherwise. The query has performance implications because it needs to invoke a function for each row. Writing custom functions can also add to the development load. Using CASE expressions in the database without PLSQL, this query can be rewritten as: Using a CASE expression lets you avoid developing custom functions and can also perform faster. Example 22-27 CASE for Aggregating Independent Subsets Using CASE inside aggregate functions is a convenient way to perform aggregates on multiple subsets of data when a plain GROUP BY will not suffice. For instance, the preceding example could have included multiple AVG columns in its SELECT list, each with its own CASE expression. We might have had a query find the average salary for all employees in the salary ranges 0-2000 and 2000-5000. It would look like: Although this query places the aggregates of independent subsets data into separate columns, by adding a CASE expression to the GROUP BY clause we can display the aggregates as the rows of a single column. The next section shows the flexibility of this approach with two approaches to creating histograms with CASE . Creating Histograms You can use the CASE statement when you want to obtain histograms with user-defined buckets (both in number of buckets and width of each bucket). The following are two examples of histograms created with CASE statements. In the first example, the histogram totals are shown in multiple columns and a single row is returned. In the second example, the histogram is shown with a label column and a single column for totals, and multiple rows are returned. Example 22-28 Histogram Example 1 Example 22-29 Histogram Example 2 Frequent Itemsets Instead of counting how often a given event occurs (for example, how often someone has purchased milk at the grocery), you may find it useful to count how often multiple events occur together (for example, how often someone has purchased both milk and cereal together at the grocery store). You can count these multiple events using what is called a frequent itemset, which is, as the name implies, a set of items. Some examples of itemsets could be all of the products that a given customer purchased in a single trip to the grocery store (commonly called a market basket), the web pages that a user accessed in a single session, or the financial services that a given customer utilizes. The practical motivation for using a frequent itemset is to find those itemsets that occur most often. If you analyze a grocery stores point-of-sale data, you might, for example, discover that milk and bananas are the most commonly bought pair of items. Frequent itemsets have thus been used in business intelligence environments for many years, with the most common one being for market basket analysis in the retail industry. Frequent itemset calculations are integrated with the database, operating on top of relational tables and accessed through SQL. This integration provides the following key benefits: Applications that previously relied on frequent itemset operations now benefit from significantly improved performance as well as simpler implementation. SQL-based applications that did not previously use frequent itemsets can now be easily extended to take advantage of this functionality. Frequent itemsets analysis is performed with the PLSQL package DBMSFREQUENTITEMSETS. See Oracle Database PLSQL Packages and Types Reference for more information. In addition, there is an example of frequent itemset usage in Frequent itemsets . Scripting on this page enhances content navigation, but does not change the content in any way.

No comments:

Post a Comment