Acer Aspire S 13 S5-371 Notebook Review For den originale tyske anmeldelsen, se her. Etter Aspire S7 og den billige Aspire S3. Acer lanserer neste representant for tynn og lett klasse. Aspire S13 kan være et godt medium mellom sine to forgjengere. Mens den bruker avanserte komponenter, for eksempel en Intel i7-6500U CPU. det ligner Aspire S7 i skjerm (Full HD, matte) og lagringsenhet (opptil 512 GB SATA3 SSD). Dette skaper en attraktiv, rask og mobil datamaskin til et prispunkt på omtrent 1000 euro (1140). Lyder dette kjent for deg For eksempel er de utallige UX300 ZenBook-modellene fra Asus i nøyaktig samme prisklasse. Oppdateringer Changelog 05-10-2016 16:00 lagt til informasjon om webkameraet og en video på viften støy 05-04-2016 14:30 fargeplass, vurdering, spill benchmarks 05-03-2016 18:00 forklart vedlikehold og oppgraderingsmuligheter og illustrert 05-03-2016 09:15 imagesanalysis utendørs bruk, lydanalyse, SD-korttest, visningsvinkler 05-02-2016 17:00 Gassanalyse (ytelse, klokkeslett og temperaturer under CB15 og The Witcher 3 gt1h) 05 -01-2016 12:45 Systemstøy og høyttalere The Witcher 3 Benchmarks 05-01-2016 09:00 Batterilevetid under belastning, AS SSD og 3DMark 11 benchmarks 04-30-2016 23:44 PCMark 8 med analyse 04-30- 2016 21:30 første publikasjon Oppgraderer forsterker Vedlikehold For å komme til viften, batteriet og M.2 SSD må du først fjerne 10 Phillips skruer og løsne kanten med en plastspyd (for å unngå skade) etterpå. Dessverre er dette en tung oppgave, der vi ødela vårt verktøy. Når du har løsnet plastklipsene, kan du fjerne undersiden og komme til de interne komponentene. Det er prisverdig at batteriet ikke er limt, men bare tilkoblet en plugg og festet med to skruer. Selv viften kan nås direkte for rengjøring, og M.2 SSD kan byttes ut etter fjerning av en annen skrue. Qualcomm Wi-Fi-modulen finner du øverst til høyre. Den er koblet til to antenner og kan også enkelt byttes ut. Kommunikasjon En spesiell funksjon er 802.11 n-brikken fra Qualcomm, som er i stand til MU-MIMO. I starten av testene var WLAN-tilkoblingen stabil og nedlastingshastighetene ble ikke bremset. En 2 GB-fil ble overført fra vår sakte WD MyCloud NAS på 60-70 MBs (ifølge oppgavebehandling på over 600 MBits mottatt trafikk). Imidlertid oppnådde vi bare 250 Mbits (sending) og 320 Mbits (mottak) i en standardtest med iperf (med vår MU-MIMO-kompatible Linksys EA8500 referanseleder). Den samme filen fra NAS nådde bare 160-200 MBits i henhold til oppgavebehandling etter det. Det bakbelagte tastaturet gleder seg med et behagelig, fuktet slag og tillater oss jevn og rask å skrive med få feil fra starten. Vi likte oppsettet, nøkkelavstanden og strekningen. Bare markørtastene er litt små. Merk: Vi hadde en variant av Aspire S 13 med QWERTY-layout under vurdering. QWERTZ-tastaturer vil bli innlemmet i modeller solgt av tyske forhandlere. I testen WPM (Ord per minutt) oppnådde forfatteren 84 WPM uten lang tilpasning. Testen som ble utført umiddelbart etterpå med et Cherry-skrivebordstastatur (mekanisk), resulterte i 90 WPM. Typefeilene ble jevnt fordelt. Totalt sett er dette et veldig godt resultat. Touchpad er komfortabelt stort og har gode glidegenskaper. Dens nedre 90 er klikkbar, men ikke helt jevn som et spørsmål om prinsipp. Men det virker ganske bra for en quotWindows touchpadquot. Selv om den ikke kan følge med den nåværende MacBook Trackpad, tilhører den definitivt de bedre i Windows-verdenen. Vår testmodell bruker en Intel Core i7-6500U. I de første benchmarkene viser det et gjennomsnitt til meget god ytelse sammenlignet med andre bærbare datamaskiner med i7-6500U. Det samme gjelder for grafikkenheten. Tilsynelatende er kjølingen tilstrekkelig for gode resultater fra dual-core CPU med integrert GPU. Vi kontrollerer ytelsen til prosessorkjernene i Cinebench R15. Den innebygde Core i7-6500U oppnår et gjennomsnittlig resultat i single-core testene. Den raskeste i7-6500U er bare 8 raskere, mens den tregeste bare oppnår 69 av ytelsen. Til gjengjeld er det bare 1 under ledelsen i multi-core testen. Alt i betraktning gir dette en meget god ytelse. Etter mange Cinebench R15 Multi-løp er poenget til Aspire S 13 omtrent 10 lavere (292 versus 326 poeng). Klokkefrekvensen forblir stabil mellom 2,6 og 2,7 GHz, og prosessorkjernene avtar ved 84 C. Systemytelse I systembenken PCMark8 Home (3.0 akselerert) er S 13 på nivå med de beste bærbare med Core i7-6500Us. Zenbook UX303UA (5), Aspire R14 R5-471T (3) og ThinkPad X1 Carbon (3) er bare litt raskere. Imidlertid er Yoga 900. XPS 13. og Envy 13 omtrent 15 tregere. Full HD-oppløsningen kan faktisk føre til en ytelsesgevinst sammenlignet med f. eks. 4K bærbare datamaskiner. Sammenlignet med alle anmeldte underbøker, utfører Aspire S13 utmerket. Den raskeste enheten er den gamle EliteBook 820 G1. som imidlertid bare er 10 raskere. Gjennomsnittet er vesentlig lavere ved 82. PCMark 8 Home Score Accelerated v2 PCMark 8 Arbeidspoeng Accelerated v2 Storage Device Vår testmodell bruker en 512 GB SSD fra LiteOn som lagringsenhet. LITEON CV1-8B512 er en M.2 2280 SATA SSD og spesifisert med maksimalt 520450 MBs (readwrite). Med 502418 MB, oppnår det gode resultater for en SATA SSD i CrystalDiskMark 3.0, og AS SSD-benchmarkresultatene er ikke noe å nyse på. Likevel er det litt uheldig at systemet ikke bruker en raskere NVMe SSD. Det er imidlertid tvilsomt om dette vil være merkbart i hverdagens oppgaver. Systemstøy Ifølge våre første observasjoner er kjølesystemet en blandet pose. Den målte systemstøyen er ikke i det hele tatt overdreven. Viften forblir vanligvis uten belastning, og enheten er stille. Dessverre begynner den lille viften raskt å kjøre med minimal belastning. Under vår test har dette allerede skjedd når du åpner nettsteder eller installerer programmer. Selv om den målte systemstøyen forblir lav på det meste 31,3 dB (sjelden 33 dB), er støykarakteristikken relativt ubehagelig på grunn av høy frekvens og er veldig hørbar i rolige omgivelser. Videre endres viftehastigheten permanent, noe som gjør den enda mer merkbar. Under belastning utgjør viften mest på 36,9 dB. Men det er også høyere topper. For eksempel ble enheten så høy som 42 dB i kort tid under den første 3DMark06-kjøringen på en kald enhet. I tillegg øker det ofte etter at programmene allerede er stengt som om det vil blåse resten av varmen ut av kjølesystemet. Siden frekvensen også er ubehagelig høy ved høyere rotasjonshastigheter, kan følsomme brukere føle seg forstyrret i rolige omgivelser. Hvis du skal bruke den bærbare datamaskinen på et normalt høyt kontor, vil omgivende støy sikkert drukne ut viften. I lys av de observerte ukritiske temperaturene inne, kan det være mulig å moderere den for aktive viften under lav belastning med en programvareoppdatering. Acer jobber for tiden med en slik BIOS-oppgradering. Om mulig, vil vi sjekke Aspire etterpå. Kjølesystemet forblir relativt stille, men den skiftende rotasjonshastigheten og høyfrekvensene var ganske ubehagelige for oss. I løpet av den første 3DMark06-løp øker systemstøyen i begynnelsen, men til slutt blir den omtrent 37 dB. I et førsteinntrykk spiller høyttalerne høyt og tydelig. Lyden mangler imidlertid basser. Det blir tydelig i direkte sammenligning med frekvensdiagrammet til den nye Apple MacBook 12. som gir en utmerket lyd med tanke på sin størrelse, at Aspire S 13 spesielt viser svakheter i lave frekvenser og høye frekvenser. MB 12 er høyere i begge områder og viser en mer lineær frekvenskurve samlet. Med 80 dB og en frekvenskurve langt fra lineær, er høyttalerne ikke bemerkelsesverdige. Batterilevetid Med Acer Aspire S 13 på 7,5 timer (452 minutter) i Wi-Fi-batterietesten (åpner websider via skript med 150 cdm lysstyrke), er Acer Aspire S 13 litt over gjennomsnittet (de gjennomgåtte undernotatene de siste 24 månedene oppnådde 422 minutter på gjennomsnitt). Toshiba Satellite Z30-B-100 fører med imponerende 12 timer. Zenbook UX305UA-FC040T med samme CPUGPU-kombinasjon oppnådde 561 minutter (over 9 timer) og er den beste 6500U-enheten. Imidlertid er den minimale målte batterilevetiden (Battery Eater Classic-spillbelastning ved maksimal lysstyrke) definitivt under gjennomsnittet. Den relativt korte batterilevetiden på 1,5 timer skyldes absolutt høy lysstyrke. For eksempel løp den krevende The Witcher 3 i to timer og fem minutter på 150 cdm, dessverre bare 14-16 fps, men uten ytelse tap i forhold til nettilførsel. Idle (uten WLAN, min lysstyrke) Vårt første inntrykk av Acer Aspire S 13 var veldig positivt, og dette ble først og fremst bekreftet gjennom resten av testen. Vi likte saken, inngangsenhetene og skjermen. Selv om fargegodset skal være bedre utenom boksen (veldig gode resultater etter kalibrering), er matt overflate kombinert med høy maksimal lysstyrke en stor proff. Vi likte ikke fanaktiviteten til vår tidlige testmodell så mye, noe som viser en ubehagelig frekvens. Vi må vente på en BIOS-oppdatering her, siden en aktiv vifte ikke er nødvendig under lav belastning med tanke på temperaturene. Ifølge Acer jobber de allerede med en oppdatering for å fikse dette problemet. Dette kan gi en betydelig forbedring av systemstøyverdien, og notatboksens totale vurdering kan øke med ett prosentpoeng. Rask system, lys og matt IPS-skjerm samt god batterilevetid i realistiske scenarier: Acer har laget et godt laget bunt for mobile brukere med Aspire S 13. Videre har Aspire S 13 en god ytelse og batterilevetid over 7 timer i virkelige scenarier. Videre var inngangsenhetene overbevisende i vår test. Asus Zenbooks, inkludert UX305CA med passiv kjøling eller tilsvarende utrustet UX303UA. er ganske like posisjonert som Acer Aspire S13. Acers Aspire R13 R7-372T er et interessant alternativ fra 2-i-1-serien. For tiden er Dell XPS 13 svært vellykket i 13-tommers rekkevidde, og varianter med i5 CPU og FHD-skjerm er lik priset. PricecompareCreating Dynamic Subsets i Applix TM1 med MDX - En Primer om dette dokumentet Denne MDX Primer er ment å fungere som en enkel introduksjon til å lage dynamiske dimensjonsundergrupper ved hjelp av MDX i TM1. Det fokuserer på å gi arbeidseksempler fremfor å forsøke å forklare den komplette teorien om MDX og sørger for å dekke de funksjonene som er mest nyttige for TM1-brukere. TM1 for øyeblikket (som av 9,0 SP3) tillater bare brukere å bruke MDX til å opprette dimensjonsundergrupper og ikke definere kubevisninger. Dette betyr at bruken av MDX i TM1 ofte er ganske annerledes både når det gjelder syntaks og intensjon fra eksempler som finnes i bøker og på internett. Siden MDX (Multi-Dimensional eXpressions) er et bransjestandardsspråk for OLAP-databaser fra Microsoft, er det mange referanser og eksempler på Internett, men husk at TM1 ikke støtter alle aspekter av språket og legger til noen få unike egenskaper av seg selv. Dette kan gjøre det vanskelig å bruke eksempler på nettet, mens alle eksemplene i dette dokumentet enkelt kan kopieres og limes inn i TM1 og vil utføres uten endring, forutsatt at du har eksemplet mini-modellen opprettet som dokumentert senere. Fullt dokument som bare en HTML-side her. Hva er en MDX-basert dynamisk delmengde i TM1 En dynamisk delmengde er en som ikke er en fast, statisk liste, men i stedet er den basert på en spørring som blir revurdert hver gang delmengden brukes. Faktisk kan MDX brukes til å opprette en statisk delmengde, og et eksempel er vist nedenfor, men dette er usannsynlig å være nyttig eller vanlig. Noen eksempler på nyttige dynamiske delsett kan være en liste over alle produkter på grunnnivå. En liste over våre 10 beste kunder med bruttoavgift. En liste over forsinkede forsendelsesforsendelser alle kostnadssteder som ennå ikke har lagt inn budsjettet. Poenget er at disse lister (delsett) kan variere fra sekund til sekund basert på strukturen eller dataene i TM1. For eksempel, så snart en ny filial er lagt til Europa, vil den europeiske grenenes undergruppe umiddelbart inneholde denne nye grenen, uten at manuell inngriping er nødvendig. MDX er søkspråket som brukes til å definere disse delsettene. MDX er et bransjestandardsprog for multidimensjonale databaser som TM1, selv om TM1 bare støtter en viss undergruppe (unnskyld ordspillet) av hele språket, og legger til i noen få unike funksjoner i tillegg. Når du definerer en delmengde med MDX i stedet for en standardundergruppe, lagrer TM1 denne definisjonen i stedet for det resulterende settet. Dette betyr at definisjonen eller spørringen går igjen hver gang du ser på den uten at brukeren eller administratoren trenger å gjøre noe i det hele tatt. Hvis databasen er endret på en måte, kan du få forskjellige resultater fra siste gang du brukte den. For eksempel, hvis en delmengde er definert som barn av West Coast Branches, og dette returnerer i utgangspunktet Oakland, San Francisco, San Diego når det er først definert, kan det senere returnere Oakland, San Francisco, San Diego, Los Angeles en gang LA har blitt lagt inn i dimensjonen som et barn av vestkysten grener. Dette er hva vi mener ved å dynamiske resultatendringene. En annen grunn som kan føre til at delmengden endres, er når den er basert på verdiene i en terning eller attributt. Hver dag i avisen er de største aksjemarkederne listet opp, for eksempel en topp 10 når det gjelder aksjekursvekst. I en TM1-modell vil dette være en delmengde som ser på et aksjekursendringsmål, og det vil tydeligvis komme tilbake til et annet sett på 10 medlemmer hver dag. Den beste delen er at delmengden vil oppdatere resultatene automatisk uten noe arbeid som trengs av en bruker. Slik oppretter du en MDX-basert delmengde i TM1 De samme grunnleggende trinnene kan følges med alle eksemplene i dette dokumentet. Vanligvis kan eksemplene kopiere og limes inn i uttrykksvinduet i delsettreditoren for den aktuelle dimensjonen ofte Produkt. Merk at det er irrelevant hvilken kube dimensjonen blir brukt av, vil du få samme resultat om du åpner dimensjonen Subset Editor fra en kubevisning, kubetreet i Server Explorer eller dimensjonstreet i Server Explorer. For å kunne se og redigere en MDX-spørring må du kunne se uttrykkvinduet i delsetteditoren. Hvis du vil bytte dette vinduet av og på, velger du Vis uttrykksvindu. Du kan nå bare skrive inn (eller lime inn) spørringen din i denne Expression Windows og trykk Oppdater-knappen for å se resultatene. Slik oppretter du en statisk delmengde med MDX En statisk delmengde er en som aldri varierer i innholdet. Denne spørringen vil returnere de samme 3 medlemmene (Rabattlån, Terminlån og Detaljhandel) hver gang. Ikke bekymre deg, det blir mer spennende herfra. Hvordan oppretter du en dynamisk delmengde med MDX TM1, støtter bare et visst antall funksjoner fra den komplette MDX-spesifikasjonen. Ulike versjoner av TM1 vil støtte forskjellige funksjoner (og potensielt støtte dem på forskjellige måter). Det gyldige settet av funksjoner for versjonen av TM1 som du bruker, finnes i hovedhjelpfilen, under Referansemateriale MDX Funksjonsstøtte. Før du prøver å skrive en ny spørring, sørg for at den støttes, og selv om noen unoterte funksjoner sikkert gjør arbeid, må de brukes på egen risiko. Standard feilmeldingen som betyr at funksjonen egentlig ikke støttes av din versjon av TM1, Mislyktes å kompilere uttrykk. Ett ord av advarsel: Resultatet av en dynamisk delmengde kan i sin natur endre seg. Når du inkluderer dynamiske delsett i visninger, prosesser, SUBNM-funksjoner og så videre, bør du nøye vurdere hva potensielle fremtidige resultater kan være, spesielt hvis delmengden en dag kunne være tom. De to vanligste metodene for å skape en dynamisk delmengde er å lage dem for hånd eller ved hjelp av TurboIntegrator. For hånd . Du kan enten skrive inn (eller lime inn) en forespørsel i Expressions-vinduet som forklart tidligere, eller du kan velge Verktøy Record Expression (og deretter Stopp opptak når du er ferdig) for å slå på en slags videoopptaker. Du kan deretter bruke de vanlige funksjonene til delsetteditoren (for eksempel velg etter nivå, sorter nedstigning osv.) Og denne opptakeren vil gjøre handlingene dine til et gyldig MDX-uttrykk. Dette er en fin måte å se noen eksempler på gyldig syntaks, spesielt for mer komplekse søk. Når du har tatt opp et uttrykk og velger Stopp innspilling TM1, vil du be om å bekrefte om du vil legge til uttrykket med delmengden - sørg for å si ja og merk av for avkrysningsboksen Lagre uttrykk når du lagrer den resulterende delmengden, ellers bare en statisk liste av resultatet er lagret, ikke selve det dynamiske spørsmålet. Bruke TurboIntegrator. Bare én linje, med SubsetCreateByMDX, er nødvendig for å opprette og definere delmengden. Du må vite hvilken spørring du vil ha som definisjonen allerede. Vær oppmerksom på at spørringen kan bygges opp i TI-skriptet ved hjelp av tekstforbindelser, så det kan inkorporere variabler fra skriptet ditt og tillate lange spørringer å bli bygget opp i etapper som er enklere å lese og vedlikeholde. SubsetCreatebyMDX (Base Products,, 0)) Alle TI-opprettede MDX-undersettene lagres som dynamiske MDX-spørringer automatisk og ikke som en statisk liste. Vær oppmerksom på at, i hvert fall opptil TM1 v9.0 SP3, kan MDX-baserte delsett ikke ødelegges (SubsetDestroy) hvis de brukes av en offentlig visning, og de kan ikke gjenopprettes ved å bruke en annen SubsetCreateByMDX-kommando. Derfor er det vanskelig å endre MDX-baserte delsett ved hjelp av TI. Selv om den dynamiske naturen til delsettet definisjonen kan gjøre det litt usannsynlig at du faktisk vil gjøre dette, er det viktig å huske på. Hvis du trenger å endre et aspekt av spørringen (f. eks. En TM1FilterByPattern fra 2006-12 til 2007-01, må du kanskje definere spørringen for å bruke eksterne parametre, som dokumentert i dette dokumentet. Dette vil få en liten ytelse effekt over det enklere hardkodet versjon. Også filter mot verdier av en kube med SubsetCreateByMDX i Epilog-fanen f. eks. 0), Test. (Posting Measures. Amount) gt 0) virker ikke hvis verdiene er blitt lastet i kategorien Data. Du må utføre kommandoen SubsetCreateByMDX i en påfølgende TI-prosess. Vær oppmerksom på at TI har en grense på 256 tegn for å definere MDX-undergrupper, i hvert fall opptil v9.1 SP3, noe som kan være ganske begrenset. Syntaks og layout En forespørsel kan brytes over flere linjer for å gjøre den mer lesbar. For eksempel: FILTER (, 0), Test2. (Rate MeasuresRate) 19) er mer lesbar enn å ha hele spørringen i en linje. Den faktiske filterseksjonen er lettere å lese og modifisert nå ved å ha den på en linje av seg selv. Merk at referanser til medlemmer vanligvis har dimensjonsnavnet som prefiks. For eksempel er dimensjonsnavnet faktisk valgfritt, men bare hvis medlemsnavnet (Retail i dette tilfellet) er helt unikt innen hele serveren, det vil si at det ikke er noen kuber, dimensjoner eller medlemmer med det nøyaktige navnet. For eksempel er dette det samme spørsmålet med dimensjonsnavnet utelatt: Som ville fungere i sammenheng med prøveapplikasjonen som brukes av dette dokumentet, men det ville være risikabelt i en applikasjon i virkeligheten. Feilmeldingen mottatt når du glemmer å spesifisere prefikset, vil være noe som, Nivå eller medlemsnavn. Retail tvetydig: funnet i dimensjoner, og så fortsetter det å oppgi de ulike dimensjonene der det ikke-unike medlemnavnet kan bli funnet, noe som er veldig hjelpsom. Det er derfor absolutt sikreste og mest performante å alltid bruke dimensjonsprefikset. Bruken av firkantede parentes kan noen ganger virke litt vilkårlig når man leser eksempler på MDX-spørringer. Faktum er at et OLAP-objektnavn (f. eks. Kubenavn, dimensjonsnavn, medlemsnavn) bare skal være vedlagt i firkantede parenteser hvis den inneholder et mellomrom, starter med et tall eller er et MDX-reservert ord (f. eks. Velg). Men noen ganger kan det være enklere å bestemme seg for alltid å bruke parentes, slik at lignende søk kan sammenlignes side om side lettere. Den nøyaktige definisjonen av et medlem i TM1 er nesten alltid uttrykt som Dimensjonsnavn. Medlemsnavn og ikke mer. I andre produkter som også bruker MDX som et spørrespråk (for eksempel Microsoft Analysis Services), kan du legge merke til at spørringene spesifiserer hele banen fra dimensjonsnavnet gjennom hierarkiet ned til medlemsnavnet, for eksempel: Date.2009.Q1.Feb. Week 06 Dette kan også skrives som Date.2009Q1FebWeek 06 Årsaken til dette er at andre produkter kanskje ikke krever at hvert medlems navn skal være unikt siden hvert medlem har en kontekst (sin familie) slik at den blir unikt identifisert, og derfor de trenger å vite nøyaktig hvilken uke 06 er nødvendig siden det kan være andre (i 2008 for eksempel i eksempelet ovenfor). TM1 krever at alle medlemsnavn, på et hvilket som helst nivå (og innenfor Aliases), er helt unike innenfor den dimensjonen. TM1 ville trenge deg til å gjøre Q1, Feb og Week 06 mer eksplisitt i første omgang (dvs. Q1 2009, Feb 2009, Uke 06 2009), men du kan da bare referere til Date. Week 06 2009. Endelig, tilfelle (dvs. store bokstaver versus små bokstaver) er ikke viktig med MDX-kommandoer (f. eks. Filter eller FILTER, TOPCOUNT eller TopCount er alle fine), men igjen kan du foretrekke å bruke bare en stil som standard for å gjøre det lettere å lese. Eksempelmodellen brukt I dette dokumentet vil mange eksempler på dynamiske spørsmål bli gitt. De jobber alle sammen (akkurat som skrevet, bare kopier og lim dem inn i Expression Window i Subset Editor av den aktuelle dimensjonen for å bruke dem) på det enkle settet med kuber og dimensjoner vist nedenfor. Modellen er bevisst enkel uten spesielle egenskaper, så du burde finne det enkelt å overføre arbeidet til din egen modell. Modellen brukte 1 hoveddimensjon, produkt, hvor det store flertallet av søkene fungerer, pluss 3 kuber: Test, Test2 og Test3. Dataverdiene i kubene vil variere under testingen (du vil justere verdiene og gjenopprette spørringen for å sikre at resultatene endres og er korrekte), men skjermbildene nedenfor viser kube - og dimensjonsstrukturer godt nok til at du raskt kan gjenopprette dem eller hvordan du bruker din egen modell i stedet. For å forenkle distribusjonen av dette dokumentet er det ingen hensikt å også distribuere de faktiske TM1-modellfilene. Vær oppmerksom på at hoveddimensjonen brukes, Produkt, kjennetegnet ragged og flere, hierarkier. TM1SubsetAll, Medlemmer, medlemsnivå Grunnlaget for mange søk, returnerer dette (nesten se nedenfor) hele dimensjonen, som tilsvarer å klikke på Alle-knappen i delsetteditoren. TM1SUBSETALL (Produkt) Merk at bare den endelige forekomsten i det første hierarkiet av medlemmer som er konsolidert flere ganger, returneres. Medlemmer-funksjonen, derimot, leverer full dimensjon, inkludert duplikater: Product. Members. En rekke sammenhengende medlemmer fra samme nivå kan velges ved å spesifisere det første og siste medlemmet av settet du trenger med et kolon mellom dem. Dette eksemplet returnerer 1. januar til 12. januar 1972. Velg etter nivå, vanlig uttrykk (mønster) og ordinært velg medlemmer basert på nivået i dimensjonshierarkiet (TM1FilterByLevel) eller med et mønster av strenger i deres navn (TM1FilterByPattern) kan sees enkelt ved å bruke Record Expression-funksjonen i delsetteditoren. Den klassiske alle bladmedlemmer spørre ved hjelp av TM1s nivåfiltreringskommando TM1FilterByLevel:, 0) Velg alle bladmedlemmene som samsvarer med jokertegnet HC, dvs. som har H og C som tredje og fjerde tegn fra slutten av navnet. , 0), HC) Grunnen til at disse funksjonene starter med TM1 er at de ikke er standard MDX-kommandoer og er unike for TM1. Det er to hovedgrunner til at Applix vil implementere slike unike funksjoner: å legge til en funksjon som er til stede i standard TM1 og brukere vil savne hvis den ikke er der, eller fordi standard TM1 har samme funksjon som MDX, men har historisk implementert den litt annerledes enn MDX, og vil derfor igjen gi brukere problemer hvis det bare ble implementert på standard MDX-måten. I disse to tilfellene bringer TM1FilterByPattern inn en funksjon som vanligvis brukes av TM1-brukere som mangler i MDX, mens TM1FilterByLevel eksisterer fordi TM1 siden lanseringen i 1984 har nummerert konsolideringsnivå som starter ved null for bladnivået som øker nivåene til totale medlemmer, mens Microsoft bestemte seg for å gjøre det nøyaktig motsatt måte. I visse situasjoner er det nyttig å bruke standard MDX-nivåmetoden, og dette er også tilgjengelig med nivåer-funksjonen. Det lar deg returnere medlemmene av en dimensjon som ligger på samme nivå som et navngitt medlem, bare husk at standard MDX bestiller nivåene med hensyn til deres avstand fra toppen av hierarkiet og ikke bunnen som TM1. Dette eksemplet returnerer alle medlemmene på samme nivå som Retail-medlemmet: Som, selv om Retail er en konsolidering på høyt nivå, returneres et N: element (Produkt ikke aktuelt) i dimensjonen, fordi dette ruller rett opp i Alle produkter som gjør Retail så de anses å være på samme nivå. For å filtrere dimensjonen basert på et nivånummer må du bruke. Ordinal-funksjonen. Dette er ikke dokumentert som støttet i hjelpefilen, og fungerte ikke i 8.2.7, men ser ut til å fungere i minst 9.0 SP3 og 9.1.1.36. Dette eksemplet returnerer alle medlemmene på nivå 1:, Product. CurrentMember. Level. Ordinal 1) Dette eksemplet vil returnere alle medlemmer ikke på samme nivå som Rabattlån. , Product. CurrentMember. Level. Ordinal TM1Sort, TM1SortByIndex og Order TM1Sort er ekvivalent med å trykke på en av de to Sorter Ascending eller Sort Descending knappene i delsetteditoren, dvs. sorter alfabetisk. TM1SortIndex er ekvivalent med å trykke på en av de to Sorter etter indeksen, stigende eller Sorter etter indeks, synkende knapper i delsetteditoren, dvs. sorter etter dimensjonsindeksen (dimix). Ordre er en standard MDX-funksjon som bruker en dataverdi fra en terning for å utføre sorteringen. For eksempel, sorter listen over kunder i henhold til salget, eller en liste over ansatte i henhold til deres lengden på tjenesten. Sorter hele produktdimensjonen i alfabetisk stigende rekkefølge. , ASC) Sorter bladets medlemmer av dimensjonen i henhold til deres Beløp verdier i Test kuben fra høyest nedover. ORDER (, 0). Test. (Posting Measures. Amount), BDESC) Merk at bruk av BDESC i stedet for DESC gir radikalt forskjellige resultater. Dette skyldes at BDESC behandler alle medlemmene i hele settet (i dette tilfellet hele dimensjonen) som like søsken og rangerer dem tilsvarende, mens DESC behandler medlemmene som fortsatt i deres familiegrupper og rangerer dem bare mot sine egne direkte søsken . Hvis du ikke er sikker på hva dette betyr og kan ikke se forskjellen når du prøver det, kan du bare bruke BDESC Order også bruke et attributt i stedet for en kubeverdi. I dette eksemplet brukes AlternateSort-attributtet til produktet til å sortere barna av etterspørselslån i synkende rekkefølge. Det er en numerisk attributt som inneholder heltall (dvs. 1, 2, 3, 4 osv.) For å tillate en helt dynamisk sorteringsrekkefølge som skal defineres:, Product. AlternateSort, DESC) TopCount og BottomCount En klassisk topp 10 kommando:, 0) 10, Test. (Posting Measures. Amount)) Ved å utelate en sorteringsrekkefølge sorterer den i standardordren (som har verdiene synkende i verdi og bryter opp eventuelle hierarkier). En topp 10 spørring med en eksplisitt sorteringsrekkefølge for resultatene. , 0), 10, test. (Posting Measures. Amount)), test. (Posting Measures. Amount), BDESC) BDESC betyr å bryte hierarkiet. Legg merke til hvordan det valgte målet gjentas for sorteringsrekkefølgen. Selv om samme mål brukes i eksemplet ovenfor, kan du faktisk finne de 10 beste produktene ved salg, men deretter vise dem i rekkefølge av, for eksempel enheter solgt eller en strategisk betydningattributt. Dette er de 10 beste produktene basert på Test2s Prisverdier, ikke bestilt, vil bli sortert i henhold til verdiene i Test2. , 0), 10, Test2. (Rate Measures. Rate)) Dette er de 10 beste produktene basert på test2s data i Rate measure, bestilt fra 10 til 1., 0), 10, test2. (Rate Measures. Rate) ), test2. (Rate Measures. Rate), ASC) TopCount gjør automatisk en synkende sorter etter verdi for å få TOP-medlemmene. Hvis dette ikke er ønsket, vil du kanskje bruke hovedfunksjonen (detaljert nedenfor) i stedet. BottomCount er motsatt av TopCount, og brukes til å finne medlemmene med de laveste verdiene i en terning. Vær oppmerksom på at laveste verdi ofte er null, og hvis den verdien må utelukkes fra spørringen, må du se avsnittet om filterfunksjonen senere i dette dokumentet. En bunn 10 spørring med en eksplisitt sorteringsrekkefølge for resultatene. , 0), 10, test. (Posting Measures. Amount)), test. (Posting Measures. Amount), BASC) Videre lesing: TopSum, TopPercent og deres Bunnekvivalenter er nyttige relaterte funksjoner. Filtrer etter verdier, strenge og attributter FILTER-funksjonen brukes til å filtrere dimensjonen basert på noen slags dataverdier i stedet for bare medlemmene og deres hierarki alene. Disse dataene kan være kubedata (numerisk eller streng) eller attributtdata. Dette krever en forandring av tenkning fra enkle enkle dimensjoner (lister med et hierarki og noen ganger noen attributter) til et flerdimensjonalt rom hvor hver dimensjon i disse kuber må vurderes og håndteres. Dette eksemplet returnerer bladets medlemmer av produktet som har en beløpsverdi i testkuben over null. , 0), Test. (Posting Measures. Amount) gt 0) Siden Test-kuben bare har 2 dimensjoner Produkt - og posteringsmålinger er dette et forenklet eksempel. De fleste kuber vil ha mer enn bare dimensjonen blir filtrert og dimensjonen med filterverdien i. Det er imidlertid enkelt å utvide det første eksemplet for å arbeide i en større terning. Dette eksemplet returnerer bladets medlemmer av produktet som har en beløpsverdi for alle enheter i Test3-kuben over null. , 0), Test3. (Entity. All Entities, Posting Measures. Amount) gt 0) Som du kan se fra ovenstående, må du bare inkludere alle nødvendige dimensjonsreferanser inne i runde parentesene. Vanligvis trenger du bare et bestemt navngitt medlem (for eksempel alle enheter). Hvis dimensjonen utelates, brukes CurrentMember i stedet som ligner på å bruke dimensjon (dvs. for hver) i en TM1-regel, og kunne returnere forskjellige resultater med en annen hastighet. I stedet for bare å bruke en hardkodet verdi for å filtrere mot (nuller i eksemplene ovenfor) returnerer dette eksemplet alle produkter med en mengde i Test-kuben som er større enn eller lik verdien i cellen MidasJCFI, Beløp. , 0), Test. (Posting Measures. Amount) gt Test. (Product. MidasJCFI, Posting Measures. Amount)) Denne spørringen returnerer produktene som har en Rate verdi i Test2 større enn MidasJXCOs Rate i Test2. Nå returnerer dette spørsmålet bare et sett med produkter til deg, hvilken kube du viser disse produktene i, dvs. at du kan kjøre dette mens du surfer Test, og derfor returnerer det som ser ut som et nesten tilfeldig sett med produkter, men faktum er at spørringen filtrerer listen over produkter basert på data holdt i test2. This may not immediately appear to be useful but actually it is, and can be extremely useful for example display the current years sales for products that were last years worst performers. If the data for two years was held in different cubes then this would be exact same situation as this example. There are often many potential uses for displaying a filteredfocused set of data in Cube B that is actually filtered based on data in Cube A. , 0), Test.(Posting Measures. Amount) gt Test2.(Product. MidasJXCO, Rate Measures. Rate) ) As detailed elsewhere, Tail returns the final member(s) of a set. An example of when it is handy when used with Filter would be for finding the last day in a month where a certain product was sold. The simple example below initially filters Product to return only those with an All Entity Amount gt 0, and then uses tail to return the final Product in that list. , 0), Test3.( Entity. All Entities, Posting Measures. Amount) gt 0 )) Note: with the other cubes having more dimensions than does Test the current member is used (each), not All so whether you want each or All you should write this explicitly to be clearer. You can even filter a list in Cube1 where the filter is a value in one measure compared to another measure in Cube1. This example returns the Products with an amount in the Test cube above zero where this Amount is less than the value in Count. , 0), (Test. Posting Measures. Amount 0 ) This example returns all the leaf products that have an Amount in Entity Not Applicable 10 greater than the Amount in Entity Not Found, in the Test3 cube. Not very useful but this was the only example cube we had to work with, but it would be very useful when comparing, say, Actual Q1 Sales with Budget, or finding out which cost centres Q2 Costs were 10 higher than Q1. Later in this document we will see how to take that 10 bit and make it a value from another cube, thus allowing administrators, or even end users, to set their own thresholds. , 0), test3.(Entity. Entity Not Applicable, Posting Measures. Amount) 1.1 gt test3.(Entity. Entity Not Found, Posting Measures. Amount)) Filtering for strings uses the same method but you need to use double quotes to surround the string. For example, this query returns products that have a value of bob in the Test2 cube against the String1 member from the StringTest dimension. Note that TM1 is case-insensitive. , 0), Test2.(StringTest. String1) bob ) Filter functions can be nested if required, although the AND or INTERSECT functions may be useful alternatives. The limit to the number of characters that an MDX subset definition can sometimes be, 256, is too restricting for many data-based queries. When trying to shoehorn a longer query into less characters there are a few emergency techniques that might help: consider whether you need things like TM1FILTERBYLEVEL, 0 (it might well be that the filter would only return members at the leaf level by definition anyway) whether the dimension name prefix can be removed if the member is guaranteed to be unique remove all spaces lookup cubes are not for end users so maybe you could shorten some names (cubes, dimension, members) drastically whether there are alternative functions with shorter syntaxes that return the same result - e. g. an INTERSECT or AND versus a triple FILTER. Finally, if it really is vital to get a long query working then you can build up the final result in stages i. e. put some of the filtering into Subset1, then use Subset1 as the subject of Subset2 which continues the filtering, etc. Parent, Children, FirstChild, LastChild, Ancestors, Descendants, DrillDownLevel and TM1DrilldownMember Children returns the set of members one level below a named parent. FirstChild returns the first child one level below a named parent. Returns Call Participation Purchased. LastChild returns the last child one level below a named parent. This is excellent for finding the last day in a month, since they can vary from 28 to 31. Another example is when a consolidation is set up to track a changing set of members (e. g. Easter, or Strategic Customers). Returns Term Participation Purchased. Parent returns the first parent of a given member. If a member has more than one parent, and the full unique path to the member is not specified then the first parent according to the dimension order is returned. Returns Bonds. Would force TM1 to return the second parent, External Bonds. Descendants returns the named parent and all of its descendant children i. e. the hierarchy down to the leaf level: TM1DrilldownMember returns the same thing as descendants: , ALL, RECURSIVE ) DrillDownLevel just returns the parent and its immediate children: ) DrillDownLevel can be extended with a parameter to say which level to return the members from, rather than the level immediately below, but this doesnt appear to work in TM1 v9.0 SP2 through to 9.1.1.36. The common requirement to return a list of just leaf-level descendants of a given consolidated member just needs a level filter applied to the TM1DrillDownMember example above:,ALL, RECURSIVE), 0) Or: , 0) Ancestors is like a more powerful version of Parent it returns a set of all the parents of a member, recursively up though the hierarchy including any multiple parents, grandparents, etc. Returns 2006 October, 2006 Q4, 2006 H2, 2006, All Dates. Lag, Lead, NextMember, PrevMember, FirstSibling, LastSibling, Siblings and LastPeriods Lags and Leads are the equivalent of DnextDprev. will return 2006-10-04. Lead(n) is the same as Lag(-n) so either function can be used in place of the other by using a negative value, but if only one direction will ever be needed in a given situation then you should use the correct one for understandabilitys sake. Note that they only return a single member so to return the set of members between two members you can use the lastperiods function. Equally you can use NextMember and PrevMember when you only need to move along by 1 element. Or: To return the 6 months preceding, and including, a specific date: Or: LastPeriods(6, Date.2006-10-03) Both of which work because LastPeriods is a function that returns a set, and TM1 always requires a set. Curly braces convert a result into a set which is why many TM1 subset definitions are wrapped in a pair of curly braces, but in this case they are not required. This will return the rest (or the ones before) of a dimensions members at the same level, from a specified member. Despite its name LastPeriods works on any kind of dimension: Siblings are members who share a common parent. For example, a date of 14th March 2008 will have siblings of all the other dates in March the first of which is the 1st March and the last of which is 31st March. A cost centre under West Coast Branches would have a set of siblings of the other west coast branches. The FirstSibling function returns the first member that shares a parent with the named member. For example: Returns MidasHCBK. While: Returns MidasHSFI. The siblings function should return the whole set of siblings for a given member. TM1 9.0 SP2 through to 9.1.2.49 appear to give you the entire set of members at the same level (counting from the top down) rather than the set of siblings from FirstSibling through to LastSibling only. Filtering by CurrentMember, NextMember, PrevMember, Ancestor and FirstSibling This example returns the members that have an Amount value in the Test cube above 18. The Product. CurrentMember part is optional here but it makes the next example clearer. , 0), Test.(Product. CurrentMember, Posting Measures. Amount) gt 18 ) This query then modifies the previous query slightly to return members where the NEXT member in the dimension has a value above 18. In practice this is probably more useful in time dimensions. , 0), Test.(Product. CurrentMember. NextMember, Posting Measures. Amount) gt 18 ) This can then be improved to returning members where the next member is greater than their amount. , 0), Test.(Product. CurrentMember. NextMember, Posting Measures. Amount) gt Test.(Product. CurrentMember, Posting Measures. Amount) ) In addition to NextMember, PrevMember can also be used as could lags and leads. The simple, but unsupported as of 9.1.1.89, Name function allows you to filter according to the name of the member. As well as exact matches you could find exceptions, less-thans and greater-thans, bearing in mind these are alphanumeric comparisons not data values. This example returns all base members before and including the last day in January 1972. ,0), Date. CurrentMember. Name For example, this could be a useful query even a dimension not as obviously sorted as dates are: ,0), Product. CurrentMember. Name which returns all base members before MidasJ in terms of their name rather than their dimension index. Parent returns the first parent of a given member: Used with Filter you can come up with another way of doing a children of query: ,0), Date. CurrentMember. Parent. Name 1972 - January) Ancestor() can be used instead of Parent if desired. This example returns base-level product members whose first parents have a value above zero, in other words a kind of family-based suppress zeroes: a particular product might have a value of zero but if one if its siblings has a value then it will still be returned. , 0), Test.(Ancestor(Product. CurrentMember,0), Posting Measures. Amount) gt 0 ) This example filters the products based on whether they match the Amount value of MidasHCBK. , Test.(Ancestor(Product. CurrentMember,0), Posting Measures. Amount) Test.(Product. MidasHCBK, Posting Measures. Amount) ) This example uses FirstSibling to filter the list based on whether a products value does not match that products First Sibling (useful for reporting changing stock levels or employee counts over time, for example, things that are usually consistent). , 0), Test.(Ancestor(Product. CurrentMember,0), Posting Measures. Amount) Filtering by Attributes and logical operators This returns members that match a certain attribute value using the Filter function. , Product. Category Customer Lending) This example looks at multiple attribute values to return a filtered list: FILTER( , ( (Product. CategoryCustomer Lending OR Product. TypeDebit) AND (Product. Internal Deal Filtering by level, attribute and pattern are combined in the following example: ,0), Product. Internal Deal Yes), ID) Head, Tail and Subset Where TopCount and BottomCount sort the values automatically and chop the list to leave only the most extreme values, Head combined with Filter works in a similar manner but Head then returns the FIRST members of the filtered set in their original dimension order. These queries simply return the first and last members of the Product dimension as listed when you hit the All button: This returns the actual last member of the whole Product dimension according to its dimix: , ALL, RECURSIVE ), ASC)) An example of Tail returning the last member of the Customer Lending hierarchy: , ALL, RECURSIVE )) An example of Head returning the first 10 members (according to the dimension order) in the product dimension that have an Amount in the Test cube above zero. , 0), Test.(Posting Measures. Amount) gt 0 ), 10) With both Head and Tail the ,10 part can actually be omitted (or just use ,0) which will then return the first or last member. This returns the last (in terms of dimension order, not sorted values) product that had an amount gt 0 in the Test cube. , 0), Test.(Posting Measures. Amount) gt 0 )) One example of when this is useful over TopCount or BottomCount i. e. when sorting the results would be detrimental - would be to return the last day the year when a certain product was sold. Subset is closely related to Head and Tail, and can actually replicate their results, but is additionally capable of specifying a start point and a range, similar in concept to substring functions (e. g. SUBST) found in other languages, though working on a tuple of objects not strings. The equivalent of Head, 10 would be: , 1, 10) But Subset would also allow us to start partitioning the list at a point other than the start. So for example to bring in the 11th 20th member: , 11, 10) Note that asking for more members than exist in the original set will just return as many members as it can rather than an error message. Union joins two sets together, returning the members of each set, optionally retaining or dropping duplicates (default is to drop). To create a list of products that sold something both in this cube and in another (e. g. last year and this): FILTER( , 0), Test.(Posting Measures. Amount) gt 0 ) , FILTER( , 0), Test3.(Posting Measures. Amount, Entity. All Entities) gt 0 ) ) Intersect returns only members that appear in both of two sets. One example might be to show products that performed well both last year and this year, or customers that are both high volume and high margin. The default is to drop duplicates although , ALL can be added if these are required. This example returns leaf Product members that have an Amount gt 5 as well as a Count gt 5. INTERSECT( FILTER( , 0), Test.(Posting Measures. Amount) gt 5 ) , FILTER( , 0), Test.(Posting Measures. Count) gt 5 ) ) Except and Validating Dimension Hierarchies The function takes two sets as its mandatory parameters and removes those members in the first set that also exist in the second . In other words it returns only those members that are not in common between the two sets, but note that members that are unique to the second set are not included in the result set. Except is a useful function in a variety of situations, for example when selecting all the top selling products except for 1 or 2 you already know are uninteresting or irrelevant, or selecting all the cost centres with high IT costs except for the IT department. The simplest example is to have a first set of 2 members and a second set of 1 of those members: EXCEPT ( , ) Which returns MidasJCFI, the only member not in common between the two sets. For the purposes of maximum clarity in the rest of this section only, we will drop the Product reference and trust that these product names are uniquely in the Product dimension on our server. The optional extra ALL parameter allows duplicates to remain prior to the determination of the difference i. e. matching duplicates within the first set are discarded, while non-matching duplicates are retained. A simple example where there are duplicate members in the first set: EXCEPT ( , ) Returns MidasJCCO (because duplicates are discarded without ALL), while: EXCEPT ( , . ALL) Returns MidasJCCO, MidasJCCO (as ALL allows the duplicate MidasJCCO members to be retained). Note that ALL has no effect on the following query as MidasJCFI is the only member not in common between the two sets and so this is the only result either way: EXCEPT ( , ) Returns MidasJCFI. Remember, the members in the first set that also exist in the second are eliminated, hence (both instances of) MidasJCCO is eliminated So if you were to ask for EXCEPT( , ) then the final set would be without ALL and with ALL. Because matching duplicates in the first set are eliminated first (that is, duplicates in the first set that match a member in the second set), Apples (the only member in the second set that matches a pair of duplicates in the first set, is eliminated. To put the fruit down and return to our demo model we can write the equivalent query against products: EXCEPT ( , ) Returns just one MidasJCFI (the equivalent of Oranges above) while: EXCEPT ( , . ALL) Returns two instances of MidasJCFI. These results are due to the fact that, in the example with ALL, MidasJCCO is eliminated due to a matching member in set 2, while MidasJCFI is reduced to 1 instance due to the lack of ALL. MidasHDBK has no impact because it could not be subtracted from set 1 as it was not in set 1. When ALL was used in the second example, the two MidasJCCO members were still eliminated due to a match in set 2, and MidasHDBK was still irrelevant, but this time the two MidasJCFI members were left alone due to the ALL allow ing duplicates. Note: the following section does not work in v9.1 SP2, but does work in v9.0. Your mileage may vary. A particularly clever use of Except is to check a TM1 dimension for a valid structure. A simple query can return a list of members that do not eventually roll up into a particular consolidated member. This could be included in a TI process to automate the consistency checking of dimensions after an update. This example returns all the members in the dimension that do not roll up into All Products: EXCEPT ( TM1SUBSETALL( Product ), TM1DRILLDOWNMEMBER( , ALL, RECURSIVE )) Modifying this slightly makes it return base-level members that do not roll up into All Products: EXCEPT ( TM1FILTERBYLEVEL(TM1SUBSETALL( Product ), 0), TM1FILTERBYLEVEL(TM1DRILLDOWNMEMBER( , ALL, RECURSIVE ), 0)) This query returns members that have been consolidated twice or more at some point under the given consolidated member this will often mean there has been an accidental double-count. EXCEPT ( TM1DRILLDOWNMEMBER( , ALL, RECURSIVE ), TM1SUBSETALL( Product ), ALL) It will return one instance of the multi-consolidated member for each time it is consolidated greater than once i. e. if it has been consolidated 4 times then it will return 3 instances. This is due to the fact that TM1SUBSETALL( Product ) will only return one instance of a member that has been consolidated multiple times while the TM1DrilldownMember function will return all the instances. You are reminded that Dimension. Member is actually a shortcut that usually works in TM1 but because the MDX specification allows for member names to be non-unique within a dimension the full address of a member is actually Dimension. Parent1.Parent2Member. Therefore more specific references to duplicate members may be needed, for example Product. Demand Loan. MidasHCBK will address a different instance of MidasHCBK than would Product. Discount Loan. MidasHCBK. In this case, with the Except function, they are treated as if they are different member names altogether. ToggleDrillState ToggleDrillState changes the default drill state from a returned set so if the first query returns a member in a hierarchy rolled up then it will drill it down, or vice versa. Using TM1 Subsets, TM1Member and TM1SubsetToSet One of the special features of using MDX with TM1 dimensions is that existing subsets can be used within the query for defining a new subset. This can be useful in allowing a simpler building block approach and for not having to repeat the same code over and over again and having to maintain it. Used throughout this section, Report Date is an existing subset in the Date dimension containing one leaf date member and test2 is an existing 20-member subset. Note that private subsets are used in preference to public subsets when there is one of each with the same name. This can allow a public subset to return different results based on the contents of different users private subsets, though inevitably with some issues with reliability of results. To simply return the member(s) of pre-existing Date subsets: Date. Report Date Or TM1SubsetToSet(Date, Report Date) The first syntax may be shorter and more convenient but bear in mind, as per the TM1 help file, Since the same syntax (.IDENTIFIER ) is used for members and levels, a subset with the same name of a member or a level will never be instantiated. The second syntax on the other hand will happily work with any subset names even if they are named the same as a cube or dimension. To return the first member of the test2 subset: To return a valid cube reference within a more complex query: TM1Member(Date. Current Date. Item(0), 0) For example: , 1), Reconciliation.(Entity. All Entities, TM1Member(Date. Current Date. Item(0),0),Reconciliation Measures. Transaction Balance) To start with the fourth item (.Item counts from zero) in the test2 subset and then return the preceding 14 members from the whole dimension, including the fourth item: This example returns the one date in Report Date and the next 13 periods, sorted with the earliest date first a moving 2-week reporting window which just needs the Report Date subset to be maintained. This query uses another subset, Strategic Products, as a building block and finds the Top 5 members within it, even though this ranking may well have been based on different values than the original subset was built on. For example, a subset that is already defined may list the 10 highest spending customer segments in terms of year to date actuals, and you then build a new subset that works with these 10 only to find the top 5 in terms of planned marketing spend next quarter. , 5, Test.(Posting Measures. Count)), Test.(Posting Measures. Count), BDESC) Heres a bigger example using TM1member and TM1SubsetToSet functions, in addition to various others. It takes the single period in the Current Date subset and returns the last day of the two preceding months. There would be several different ways of achieving the same result. union( tm1member(tm1subsettoset(Date, Current Date).item(0),0),1) )))), tm1member(tm1subsettoset(Date, Current Date).item(0),0),1) )))) ) Username and StrToMember It returns the TM1 username (or Windows domain username depending on the security system being used for example, GERJEREMY) of the user who runs the query. Note that you may need to give all users Read access to the Clients dimension and all its elements. It is not documented in the help file as being officially supported by TM1 but it is a standard MDX feature that appears to work in v8.3. However, since 8.4.3 until 9.1.2.49 it is reported as failing to automatically update when a new user uses the subset. This can be circumvented by running a frequent TI process that uses the subset as its datasource and the following line in Prolog (Workaround reported by Steve Vincent on the Applix Forum, 2nd August 2006): DIMENSIONSORTORDER(CLIENTS, BYNAME, ASCENDING,,) With this micro-process workaround set to run every few minutes a pseudo-dynamic result is possible. An actual solution to the problem should be tested for in your version if it is 9.1 or later. To save a dynamic subset it needs to be set up on the Clients dimension choose View Control Objects in Server Explorer to see this dimension. Once you have saved the public subset (e. g. as Current User) you can turn this option off again. Clients ), USERNAME ) As an alternative to the above method, and as a way of including the current username directly in queries use the StrToMember function which converts a plain string into a valid MDX member reference. Clients. USERNAME) Either way the subset can then be referred to on Excel spreadsheets, VBA processes and, as it is simply a standard TM1 subset, in TM1 Websheets. As a non-MDX alternative v9.1.2.49 introduced a TM1User(servername) worksheet function which could be used in some circumstances. Data-based queries, Filter, Sum, Avg and Stdev Sometimes it is not adequate to simply use a single value in a query you need to consider a combination of values. It might be that this combination is only needed for one or two queries, though, so it is not desirable to calculate and store the result in the cube for all to see. Therefore it is more logical to quickly calculate the result on the fly and although this is then repeated every time the subset is used, it is still the preferred choice. The function Sum, Avg and Stdev are therefore useful for things that are only needed occasionally or by a limited number of users and means that the actual cube is thus smaller and more efficient. SUM, as it might appear, sums up a set of numbers. This allow the aggregation of members not already consolidated in the model. This example checks the Test3 cube for products whose Amounts in the on-the-fly-consolidation of 2 entities are greater than 50. , 0), SUM( , Test3.(Posting Measures. Amount) ) gt 50 ) AVG calculates the average value of a set. Note how empty (zero) cells are not included by the AVG function so the resulting average value might be higher than you expected. This example returns a list of leaf products that have an Amount value in the Test cube higher than the average Amount value of all leaf products (or rather all non-zero leaf products). , 0), (Test. Posting Measures. Amount gt AVG( , 0), Test.(Posting Measures. Amount)) ) ) The set of members that AVG works on here (AVG , 0)) can be changed to something that doesnt match the list of members being filtered earlier in the query. For example, return a list of all leaf products that are higher than the average of the leaf descendants of the Customer Lending consolidation only. , 0), (Test. Posting Measures. Amount gt AVG(,Test.(Posting Measures. Amount))) ) STDEV is the standard deviation function. It returns the average distance from each value in a set to the average of the set as a whole. In this way you can calculate how consistent or unpredictable a set of data is if all the values lie tightly around the average, or if the values vary to be extremely high and low. This example returns the outlying products whose Amount value in the Test cube is greater than the average value plus the standard deviation i. e. those products who have values that are above averagely above the average. , 0), ( Test. Posting Measures. Amount gt ( AVG( , 0), Test.(Posting Measures. Amount)) STDEV( , 0), Test.(Posting Measures. Amount) gt 0 ) ) ) ) ) Note that the AVG function automatically drops empty cells from the filtering set but STDEV does not so we have to apply our own filter. The above queries could be INTERSECTed for both sets of outliers in one subset, if required. Further reading: The MEDIAN function is also supported by TM1 and might be more appropriate than AVG (mean) in some circumstances. Using parameters in queries TM1Member will allow you to use parameterized references by using cube values as part of the query itself. For example if a UserParams cube was created with the Clients dimension (thus allowing concurrent usage by all users) which would hold various choices made by users as they used your application, then dynamic subsets could use those choices as part of their syntax, thus altering not just the thresholds for comparisons (we can see elsewhere in this document how to check if something is, say, above a certain threshold which is actually a value in another cube) but the actual thing that is queried in the first place. For example, this shows the descendants of a parent member, the name of which is held in the 2D UserParams cube at the intersection of the current username and SelectedParentDimix. TM1SUBSETALL( Product ).Item(UserParams.(StrToMember(Clients. USERNAME), UserParamMeasures. SelectedParentDimix)-1) . 0)) Below are screenshots showing the parameter cube which can be extended to hold various user-specific selections and then link them into dynamic subsets plus the other relevant screens. The Generate function applies a second set to each member of a first set, performing a union of the results. Duplicates are dropped by default but can be retained with, ALL. Although Generate doesnt really do anything unique in itself it is a very useful way of shortening what would otherwise be long, laborious and error-prone queries. In the following example the top performing child product is returned for each member of Level 1 of the hierarchy: GENERATE( , 1), TopCount(Descendants(Product. CurrentMember, 1),1,Test.(Posting Measures. Amount))),Test.(Posting Measures. Amount) gt 0 ) Count and IIF Caveat: Note that IIF is not listed in the TM1 v9.0 SP2 help file as being supported so use at your own risk. Count returns the number of items in a set but this set can be a set of members or a set of data values. The result is, obviously, a number and is often returned in reports when used in MDX queries outside of TM1. When trying to use it do define a TM1 subset it can only be used as part of the query logic and not as a result itself. Count can be wrapped around a lot of the other MDX functions and so can be used in many different scenarios. One example is to count how many children a month has and, if there are 28, doing something that is unique to February. Although dimension subsets are usually a list of meaningful items in a business model and are included within application cubes, it is actually possible to have dimensions for administrator purposes only (that are never used to build cubes) which might indicate the state of something e. g. All Passwords Set, or Reconciliation Failed and the Count function could be used to define a subset that contains one of these members, which is information for the administrator only. IIF allows you to introduce some branching logic in your queries i. e. do one thing if this is true, otherwise do something else. You could use it to apply different statistical functions to members that have certain attributes. It works quite commonly with Count to allow one thing to happen if the count of something falls below a threshold, or do something else if not. This example performs either a Top 5 or a Top 10 on all base products Amounts in the Test cube, depending on whether the number of base level Products is 10 or less at the time the query is run. , 0), IIF(Count( , 0)) lt 10, 5, 10), Test.(Posting Measures. Amount) ) This example does a TopCount of the base products based on their Amount value in the Test cube where the number of items displayed is equal to the number of cells in the Test cube whose Amount value is anything other than zero. , 0), Count( Filter( , 0), Test.(Posting Measures. Amount) These are fairly pointless examples, practically speaking, but they show the syntax. Comments allow you to explain, to yourself andor to your users, what the query is trying to achieve, how it works, who wrote it or amended, etc. Use or (without the double quotes) to end a line with a comment or to have the comment on its own line. You can also use COMMENT (again without the quotes) to insert a comment in the middle of a line. You are also able to type anything after the command. This heavily-commented example returns all the products beginning MidasJ: Comment number 1 this is another comment -- and another comment , this is yet another comment MidasJ) You seem to be able to type what you like here, but treat with caution This does not work in version 8.2.7 but does in at least 9.0 and 9.1.1.MSI GL62 6QF Notebook Review For the original German review, see here . quotGaming starts here is MSIs slogan to advertise the pretty inexpensive GL62. Compared to other models from the GE or GS series, however, the manufacturer has cut some corners. For example, the 15-inch model lacks a keyboard illumination as well as an IPS display. The other features are also pretty mediocre. If you look at the models listed by the Internet shop notebooksbilliger. de. which provided the test sample, you only get 8 GB DDR4 RAM, a DVD burner (no Blu-ray drive) and a TN panel with 1920x1080 pixels. You do not get a high-end GPU, either. After the launch of the Nvidia GTX 980. the GTX 960M is more of an upper mainstream chip. Depending on the model, the processor is either a Core i5-6300HQ or the Core i7-6700HQ. MSI uses solid-state drives, conventional hard drives or a combination of both as storage solutions. The biggest advantage of the GL62 is the fair price. Not every manufacturer offers gaming devices priced between 900 and 1100 Euros ( 1218). The competition is still pretty tough for the 15-inch notebook. Whether it is the Asus G501VW or the Acer V15 Nitro. comparable configurations are hardly more expensive. Our review sample, priced at 1100 Euros ( 1218) is based on the model GL62-6QFi78H11 and competes directly with the recently launched HP Omen . good (75) MSI GL62-6QFi781H11 Intel Core i7-6700HQ NVIDIA GeForce GTX 960M v5.1 - 06262016 (download rating image as PNG or SVG ) NVIDIA GeForce GTX 960M - 2048 MB, Core: 1097 MHz, Memory: 2500 MHz, GDDR5, ForceWare 359.00 (368.39 for Games), Optimus 1x 8 DDR4-2133 SO-DIMM, Single-Channel, 1 of 2 slots free, up to 32 GB 15.6 inch 16:9, 1920x1080 pixel 141 PPI, CMN N156HGE-EAL (CMN15D2), TN LED, Full HD, glossy: no Intel HM170 (Skylake PCH-H) Toshiba HG6 THNSNJ128G8NY, 128 GB SSD HGST Travelstar 7K1000 HTS721010A9E630, 1000 GB HDD 7200 rpm. Slots: 1x M.2 Type 2280 (NVMePCIe) 1 x 2.5-inch Realtek ALC899 Intel Sunrise Point PCH - High Definition Audio Controller 1 USB 2.0, 3 USB 3.0 3.1 Gen1, 0 USB 3.1 Gen2, 1 HDMI, 1 DisplayPort, 1 Kensington Lock, Audio Connections: Headphones, Microphone, Card Reader: SD, SDHC, SDXC, Brightness Sensor Qualcomm Atheros AR81718175 PCI-E Gigabit Ethernet (101001000MBit), Intel Dual Band Wireless-AC 3165 (abgnac), Bluetooth 4.2 Both the design and the port selection of the GL62 are reminiscent of the 15-inch sibling GE62. We have already mentioned that there is no keyboard illumination for the cheaper model. Another difference is the materials used. While some parts of the GE62 are made of metal, the GL62 is made entirely of plastic and as a result does not appear quite as sophisticated. Otherwise, the case leaves a decent impression. The stability could be better here and there (wobbly lid, the area around the optical drive can be pushed in), but the build quality meets the price. Thanks to a moderate weight of 2.3 kilograms ( 5.1 lb) and the comparatively slim construction (2.9 cm 1.14 in), it is not hard to transport. The hinges are also good, but you can notice some bounces caused by vibrations. Unlike some other MSI notebooks, the design is surprisingly subtle. The manufacturer mainly uses the color black, and we can only find some red elements on the lid and the bottom. Our overall rating for the case is Satisfactory. Working For Notebookcheck Are you a loyal reader of notebookcheck Are you a techie who knows how to write Then join our Team Connectivity See our Top 10 Notebooks: Top 10 Tablets Smartphones: There is hardly any criticism for MSI in terms of the port selection. Except for the somewhat impractical layout (many ports are at the left front), the connectivity is satisfactory. While RJ45-Ethernet, Kensington Lock, two audio jacks and two video ports are essential for a gaming notebook, four USB ports are hardly a matter of course, especially since MSI has implemented two USB 3.0 Type-C ports (but no USB 3.1 Gen. 2). Card Reader We are disappointed by the performance of the card reader. A mere 27 to 30 MBs in the sequential AS SSD Benchmark test and 25 MBs when we copy 250 jpg files are pretty low. Most gaming notebooks manage more than 70 MBs. Our reference card (Toshiba Exceria Pro SDXC 64 GB UHS-II) could manage up to 260 MBs. Left side: Kensington Lock, RJ45-LAN, USB 3.0, HDMI, DisplayPort, USB 3.0, USB 3.0 Type-C, microphone, headphones Communication MSI uses the WLAN module Wireless-AC 3165 from Intel. As befits a modern gaming notebook, the module supports WLAN 802.11 abgn as well as the ac standard (2.4 amp 5 GHz, up to 433 Mbps) besides Bluetooth. The range was average during our test. At a distance of 10 meters ( 33 ft) to the router and through several walls, Windows indicated 70 Mbps (45 bars). Maintenance The maintenance of the GL62 leaves mixed impressions. It is a pity that MSI does not implement a corresponding hatch. If you want to tinker a little or upgrade parts, you can still remove the whole bottom panel. A damaged warranty seal should not be a problem in Germany, as long as the maintenance work was performed by experienced personnel. As you can see on the pictures of the GL72 (link ), you can access the battery, cooling system, both RAM slots, the 2.5-inch slot and the M.2 slot. Processor and graphics card are soldered, which is normal by now. MSI has equipped the GL62 with various applications and tools. Below, we have included screenshots from three examples. In addition to the System Control Manager, the Dragon Gaming Center is interesting. The latter includes several monitoring and special functions such as the Shift mode, which adjusts the clock behavior of the CPU and the GPU depending on the setting (Green, Comfort amp Sport). The sound can be optimized via Nahimic Sound Enhancer. Office 365 and Norton Security are included as trial versions. Movie enthusiasts will be happy about CyberLink Power DVD 12. The keyboard is a matter of taste. Once again, MSI is using a very unconventional layout. The German version also gets a single-line Return key, so the - key has been shifted. Because of the oversized Shift key, ltgt is moved right next to the space bar. This means that users of classic layouts will have to get used to the keyboard. The typing experience is as good as the GE62 pressure point and stroke will be satisfactory for most users. The same applies for the typing noise, which is not very loud in the case of the GL62 quite the contrary. The key size varies between a generous (15 x 15 mm main keys 0.6 x 0.6 mm) and a rather narrow (12 x 15 mm numbers pad 0.47 x 0.6 in). The F-keys are also smaller, which is typical for notebooks. Great: MSI uses the arrow keys for the volume and brightness control, which results in a more comfortable and simple use. Speaking of comfort: The keyboard is located pretty far at the top, so users get a decently-sized palm rest. We would call the mouse replacement convenient. MSI has implemented a conventional touchpad with precise, but very loud buttons. Considering a width of 10.5 and a height of 6 cm ( 4.1 and 2.4 in respectively), the size is okay. The surface is slightly textured, which is visible in the close-ups. It improves the feedback and the precision without affecting the gliding capabilities significantly. Obviously, the touchpad supports several gestures starting with zooming up to turning gestures. Attention: For some reason, scrolling with two fingers is deactivated by default and has to be enabled in the Synaptics software first (touchpad icon in the notification area). Gestures work great except for the rather tricky zoom. GPU Performance Gaming notebooks priced between 1000 and 1500 Euros ( 1661) are primarily equipped with one of three graphics cards. While the GeForce GTX 965M has 1024 shaders, the less expensive siblings GTX 960M and GTX 950M get only 640 shaders. There are no differences in terms of memory interface, which is 128-bit in each case. The amount of VRAM varies from notebook to notebook. Once again, MSI tries to save some money and has implemented the GTX 960M with 2 instead of 4 GB GDDR5-VRAM. This means that you cannot use the maximum settings in all games (like Hitman ) or at least it is not recommended. However, the GTX 960M will have problems with higher details in general, and it does not matter if you have the 2 or 4 GB version. 3DMark 11 Performance On the other hand, the GL62 can utilize the Turbo perfectly. According to GPU-Z even maximum load is handled with a core clock of 1189 instead of the normal 1097 MHz. Note: Nvidias Maxwell generation will be replaced by Pascal soon. It might be worthwhile to wait for discounts on the GL62 or even a new model. Thanks to the architectural upgrade, the manufacturing process drops from 28 to 16 nm, which promises higher power efficiency. 1920x1080 Fire Strike Graphics 6001 Points sim100 42 5904 Points sim98 39 5323 Points sim89 26 4348 Points sim72 3 4314 Points sim72 2 4239 Points sim71 1920x1080 Fire Strike Score 5261 Points sim100 33 5179 Points sim98 31 4760 Points sim90 20 4028 Points sim77 2 4008 Points sim76 1 3954 Points sim75 1280x720 Performance GPU 8064 Points sim100 63 7919 Points sim98 60 7128 Points sim88 44 5440 Points sim67 10 5304 Points sim66 7 4938 Points sim61 8006 Points sim100 55 7926 Points sim99 53 7269 Points sim91 40 5635 Points sim70 9 5533 Points sim69 7 5178 Points sim65 Unigine Heaven 4.0 - Extreme Preset DX11 32 fps sim100 30 31.8 fps sim99 29 Gaming Performance We have already mentioned that the GTX 960M is not a high-end GPU, which can handle all games at maximum details. If you do not want to reduce the resolution and want to play in the native 1920x1080 pixels, you will often have to choose medium settings without anti-aliasing. This is the case for some of the tested games including Anno 2205 , Assassins Creed Syndicate , XCOM 2 and Mirrors Edge Catalyst . We would even recommend low details for Doom in FHD. Need for Speed , Overwatch , FIFA 16 and Rainbow Six Siege can even be played with high details. However, the limitations would be much lower with the GTX 965M. The latter is at least the 2016 model about 30 faster on average. We updated the GPU driver via GeForce Experience from version 359.00 to the brand-new ForceWare 368.39 for our gaming benchmarks. System Noise Noise-sensitive users should avoid the GL62. The system is not too loud with 41 dB(A) while gaming and up to 46 dB(A) in the stress test, but the idle noise is unnecessarily high at 35 to 37 dB(A). Most gaming notebooks level off if there is no pulsating at around 32 dB(A). The constant fan noise also hides the murmur of the hard drive. You can expect about 39 dB(A) when you watch a DVD movie. We would not advise the use the fan button, which will improve the cooling, but it gets really loud and annoying at 55 dB(A). Even though MSI has equipped the GL62 with audio software and several presets (Music, Gaming amp Movie), the sound is a big disappointment. The 4.0 system sounds pretty muddy, tinny, and unbalanced. This is often the verdict in our notebook reviews, but some rivals perform better (like the Acer V15 Nitro). We would recommend headphones or external speakers for prolonged sessions. Energy Management Power Consumption The 3D consumption is on par with other GTX 960M notebooks. 82 watts during the first 3DMark 06 scene could also be from the Asus G501VW. Maximum load will draw up to 118 watts from the socket, so the GL62 is similar to the Acer V15 Nitro. Curious: Even though the power adapter is rated at 120 watts, the battery will be drained (on mains) in extreme scenarios. The 15-inch device consumes between 10 to19 watts only, while idling. Battery Runtime Nvidias Optimus technology, which depending on the application uses either the GeForce GTX 960M or the integrated GPU of the processor (HD Graphics 530 ), has a big effect on the battery runtimes in particular. However, MSI is not very generous in this category. A battery capacity of 41 watts is pretty low, and the competition is usually equipped with 60-Wh modules. This will affect the mobility. 71 minutes under load at the highest luminance and 5.5 hours while idling at the lowest luminance are not great. A browsing session via WLAN is possible for 2.5 hours. Idle (without WLAN, min brightness)
No comments:
Post a Comment