Acer Aspire S 13 S5-371 Notebook Review Per la recensione originale tedesca, vedi qui. Dopo l'Aspire S7 e il basso costo Aspire S3. Acer lancia il successivo rappresentante della classe sottile e leggero. L'Aspire S13 potrebbe essere una via di mezzo tra i suoi due predecessori. Anche se utilizza componenti di fascia alta, ad esempio una CPU Intel i7-6500U. assomiglia l'Aspire S7 sul display (Full HD, opaca) e dispositivo di archiviazione (fino a 512 GB SSD SATA3). Questo crea un computer di attraente, veloce, e mobili per un prezzo di circa 1000 Euro (1140). Questo suona familiare a voi, ad esempio gli innumerevoli modelli UX300 Zenbook di Asus sono nella stessa identica fascia di prezzo. Aggiornamenti Changelog 2016/05/10 16:00 Avviso sulla webcam e un video sul rumore della ventola aggiunto 2016/05/04 14:30 spazio colore, di rating, di gioco benchmark 2016/05/03 18:00 manutenzione e possibilità di aggiornamento spiegato e illustrato 2016/05/03 09:15 imagesanalysis uso esterno, analisi audio, test della scheda SD, angoli di visualizzazione 2016/05/02 17:00 analisi di banda (prestazioni, velocità di clock, e le temperature sotto CB15 e The Witcher 3 gt1h) 05 -01-2016 00:45 rumore del sistema e gli altoparlanti The Witcher 3 benchmark 2016/05/01 09:00 Durata della batteria sotto carico, AS SSD e 3DMark 11 benchmark 2016/04/30 23:44 PCMark 8 con l'analisi 04-30- 2016 21:30 prima pubblicazione aggiornamenti amplificatore di manutenzione al fine di ottenere al ventilatore, batteria e M.2 SSD è necessario prima rimuovere 10 viti Phillips e allentare il bordo con un spudger plastica (per evitare danni) in seguito. Purtroppo, questo è un compito arduo, durante il quale abbiamo rovinato il nostro strumento. Una volta che avete allentato le clip di plastica, è possibile rimuovere la parte inferiore e raggiungere i componenti interni. È lodevole che la batteria non è incollato ma solo collegata con una spina e fissato con due viti. Anche il ventilatore può essere direttamente raggiunto per la pulizia e la M.2 SSD può essere sostituito dopo rimozione un'altra vite. Il modulo Qualcomm Wi-Fi si trovano nell'angolo in alto a destra. Esso è collegato a due antenne e può anche essere sostituito facilmente. Comunicazione Una caratteristica particolare è la 802.11 n circuito integrato di Qualcomm, che è in grado di MU-MIMO. All'inizio delle prove la connessione WLAN era stabile e la velocità di download non erano rallentato. Un file di 2 GB è stato trasferito dal nostro lento WD myCloud NAS a 60-70 MB (a seconda del Task Manager di sopra di 600 MBit ricevuto traffico). Tuttavia, abbiamo ottenuto solo 250 Mbit (invio) e 320 Mbits (ricezione) in un test standard con iperf (con il nostro grado router Linksys EA8500 riferimento MU-MIMO). Lo stesso file dal NAS anche raggiunto solo 160-200 MBits secondo il task manager dopo. La tastiera retroilluminata delizia con un comodo colpo, inumidito e ci ha permesso liscia e digitazione veloce con pochi errori fin dall'inizio. Abbiamo apprezzato il layout, la distanza chiave e la corsa. Solo i tasti cursore sono un po 'piccola. Nota: Abbiamo avuto una variante del Aspire S 13 con QWERTY in esame. tastiere QWERTZ saranno incorporati in modelli venduti da concessionari tedeschi. Nel WPM (parole al minuto) di prova, l'autore realizzato 84 WPM senza lunghe adattamento. Il test eseguito subito dopo, con una tastiera del desktop Cherry (meccanica) ha provocato 90 WPM. errori di battitura sono stati distribuiti uniformemente. Nel complesso, questo è un ottimo risultato. Il touchpad è comodamente grande e dotato di buone caratteristiche di scorrimento. Il suo più basso 90 è cliccabile, anche se non del tutto, anche per una questione di principio. Ma, funziona abbastanza bene per un touchpadquot quotWindows. Anche se non può tenere il passo con l'attuale MacBook trackpad, appartiene sicuramente a quelle migliori nel mondo di Windows. Il nostro modello di test utilizza un processore Intel Core i7-6500U. Nei primi benchmark, mostra una media di prestazioni molto buone rispetto ad altri notebook con i7-6500U. Lo stesso vale per l'unità grafica. A quanto pare, il raffreddamento è sufficiente per buoni i risultati delle prestazioni della CPU dual-core con GPU integrata. Controlliamo le prestazioni dei core del processore in Cinebench R15. Il Core i7-6500U integrato raggiunge un risultato medio nei test single-core. Il i7-6500U più veloce è solo 8 più veloce, mentre il più lento si raggiunge solo 69 delle prestazioni. In cambio, è solo 1 sotto il comando nel test multi-core. Tutto considerato, questo dà una prestazione molto buona. Dopo molti Cinebench R15 Multi corre, il punteggio del Aspire S 13 è di circa 10 inferiori (292 contro 326 punti). La frequenza di clock rimane stabile tra 2.6 e 2.7 GHz e core del processore di livello scendere a 84 C. System Performance Nel benchmark sistema PCMark8 casa (3,0 accelerato), S 13 è alla pari con i migliori notebook con core i7-6500Us. Il Zenbook UX303UA (5), l'Aspire R14 R5-471T (3), e il carbonio ThinkPad X1 (3) sono solo leggermente più veloce. Tuttavia, lo Yoga 900. XPS 13. e l'Envy 13 sono circa 15 più lenti. La risoluzione Full HD può infatti portare ad un guadagno di prestazioni rispetto a esempio notebook 4K. Rispetto a tutti i subnotebook recensiti, l'Aspire S13 esegue in modo eccellente. Il dispositivo più veloce è il vecchio EliteBook 820 G1. che, tuttavia, solo 10 più veloce è. La media è significativamente inferiore a 82. PCMark 8 di casa Risultato v2 Accelerated PCMark 8 lavoro Score v2 Accelerated Storage Device Il nostro modello di test utilizza un SSD da 512 GB da LiteOn come dispositivo di memorizzazione. Il LITEON CV1-8B512 è un M.2 2280 SATA SSD e specificato con un massimo di 520450 MB (readwrite). Con 502418 MB, raggiunge buoni risultati per un SSD SATA a CrystalDiskMark 3.0 ed i risultati dei benchmark AS SSD sono anche niente starnutire a. Tuttavia, è un po 'sfortunato che il sistema non utilizza un NVMe SSD più veloce. Tuttavia, è lecito chiedersi se questo sarebbe evidente in attività quotidiane in ogni caso. Il rumore del sistema Secondo le nostre prime osservazioni, il sistema di raffreddamento è un miscuglio. La rumorosità misurato non è affatto eccessivo. La ventola di solito rimane spento in assenza di carico e il dispositivo è silenzioso. Purtroppo, il piccolo ventilatore si avvia rapidamente funzionamento a carico minimo. Durante il nostro test, questo già è accaduto quando l'apertura di siti web o installare programmi. Sebbene il rumore del sistema misurata rimane bassa, principalmente 31.3 dB (raramente 33 dB), la caratteristica di rumore è relativamente sgradevole a causa di una frequenza alta ed è molto udibili in ambienti silenziosi. Inoltre, la velocità della ventola è permanente, il che rende ancora più discernibile. Sotto carico, la ventola per lo più i livelli di scendere a 36,9 dB. Tuttavia, ci sono anche picchi più alti. Ad esempio, il dispositivo ha forte come 42 dB per un breve periodo durante il primo 3DMark06 eseguito su un dispositivo fredda. Inoltre, velocizza frequentemente dopo programmi già chiusi come se volesse saltare il resto del calore dal sistema di raffreddamento. Dal momento che la frequenza è anche spiacevolmente elevata a regimi di rotazione più elevate, gli utenti sensibili potrebbero sentirsi disturbato in ambienti silenziosi. Se avete intenzione di utilizzare il portatile in un ufficio normalmente forte, il rumore ambientale sarà certamente soffocare la ventola. In considerazione delle temperature acritici osservati all'interno, potrebbe essere possibile moderare il ventilatore troppo attivo con basso carico con un aggiornamento software. Acer sta attualmente lavorando su un tale aggiornamento del BIOS. Se possibile, ci sarà ricontrollare l'Aspire dopo. Il sistema di raffreddamento rimane relativamente tranquilla ma, la velocità di rotazione mutevole e alte frequenze erano piuttosto sgradevole per noi. Durante la prima esecuzione 3DMark06, il rumore del sistema aumenta, all'inizio, ma alla fine i livelli fuori a circa 37 dB. In una prima impressione, gli altoparlanti giocano forte e chiaro. Tuttavia, il suono manca bassi. Diventa evidente nel confronto diretto al diagramma frequenza del nuovo MacBook 12. che genera un suono eccellente in vista della sua dimensione, che l'Aspire S 13 mostra particolarmente carenze basse frequenze e alte frequenze. Il MB 12 è più forte in entrambe le gamme e mostra una curva di frequenza più lineare complessiva. Con 80 dB e una curva di frequenza tutt'altro che lineare, gli altoparlanti non sono notevoli. Durata della batteria con 7,5 ore (452 minuti) nel nostro test della batteria Wi-Fi (apre le pagine web tramite script a 150 luminosità cdm), l'Acer Aspire S 13 è appena sopra la media (i subnotebook recensiti degli ultimi 24 mesi raggiunti 422 minuti su media). Il Toshiba Satellite Z30-B-100 porta con un impressionante 12 ore. Il Zenbook UX305UA-FC040T con la stessa combinazione CPUGPU compiuto 561 minuti (sopra 9 ore) ed è il miglior dispositivo 6500U. Tuttavia, la minima durata della batteria misurata (carico di gioco Battery Eater Classic alla massima luminosità), è decisamente inferiore alla media. La durata della batteria relativamente breve di 1,5 ore è certamente dovuto alla luminosità massima elevata. Ad esempio, l'impegnativa The Witcher 3 funzionato per due ore e cinque minuti a 150 cdm purtroppo solo a 14 - 16 fps, ma senza perdita di prestazioni rispetto al funzionamento da rete. Idle (senza WLAN, luminosità min) La nostra prima impressione del Acer Aspire S 13 è stata molto positiva e questo è stato confermato in primo luogo per il resto del test. Abbiamo apprezzato il caso, i dispositivi di input e il display. Sebbene la fedeltà colore deve essere meglio out-of-the-box (molto buoni risultati dopo calibrazione), la superficie opaca combinata con una luminosità massima elevata è un grande professionista. Non ci è piaciuto il comportamento della ventola del nostro modello di test precoce che tanto, che mostra una frequenza sgradevole. Dobbiamo aspettare per un aggiornamento BIOS qui, poiché una ventola attiva non è necessaria con basso carico in vista delle temperature. Secondo Acer, stanno già lavorando su un aggiornamento per risolvere questo problema. Questo potrebbe migliorare in modo significativo il nostro indice di rumorosità del sistema e dei quaderni totale del voto potrebbe aumentare di un punto percentuale. sistema veloce, display luminoso e opaco IPS così come la buona durata della batteria in scenari realistici: Acer ha creato un pacchetto ben fatto per gli utenti mobili con i Aspire S 13. Ulteriori vantaggi del Aspire S 13 sono le sue buone prestazioni e la durata della batteria di sopra 7 ore in scenari reali. Inoltre, i dispositivi di input sono stati convincenti nel nostro test. I Zenbooks Asus, tra cui il UX305CA con raffreddamento passivo o la UX303UA analogamente attrezzate. sono abbastanza simile posizionato come l'Acer Aspire S13. Acers Aspire R13 R7-372T è un'alternativa interessante della gamma 2-in-1. Attualmente, il Dell XPS 13 è un grande successo nella gamma da 13 pollici e varianti con i5 CPU e il display FHD sono valutati in modo simile. PricecompareCreating sottoinsiemi dinamici in Applix TM1 con MDX - A Primer su questo documento Questo Primer MDX è destinato a servire come una semplice introduzione alla creazione di sottoinsiemi dimensione dinamica utilizzando MDX in TM1. Si concentra sul dare esempi di lavoro, piuttosto che cercare di spiegare la teoria completa di MDX e fa in modo di coprire le caratteristiche più utili per gli utenti TM1. TM1 attualmente (a partire da 9,0 SP3) consente solo agli utenti di utilizzare MDX per creare sottoinsiemi di dimensione e non per definire una vista cubo. Ciò significa che l'utilizzo di MDX in TM1 è spesso molto diversa in termini di sintassi e dell'intenzione dagli esempi trovati in libri e su internet. Come MDX (espressioni Multi-Dimensional) è un linguaggio di query standard di settore per i database OLAP di Microsoft ci sono molti riferimenti e gli esempi che si trovano su Internet, anche se tenere a mente che TM1 pretende supporta tutti gli aspetti della lingua e aggiunge alcuni caratteristiche uniche proprie. Questo può rendere difficile utilizzare gli esempi trovati sul web, mentre tutti gli esempi in questo documento possono essere semplicemente copiato e incollato in TM1 e verranno eseguiti senza modifiche, a patto che l'esempio mini-modello creato come documentato in seguito. Documento completo come solo una pagina HTML qui. Che è un sottoinsieme dinamico MDX basata TM1 Un sottoinsieme dinamico è uno che non è, statico, elenco fisso ma invece si basa su una query che viene ri-valutata ogni volta il sottoinsieme viene utilizzato. Infatti, MDX potrebbe essere usato per creare un sottoinsieme statico e un esempio è mostrato sotto, ma questo improbabile utile o comune. Alcuni esempi di sottoinsiemi dinamici utili potrebbero essere un elenco di tutti i prodotti di livello base di un elenco dei nostri primi 10 clienti per il margine lordo un elenco delle spedizioni di fornitura scaduti tutti i centri di costo che non hanno ancora presentato il loro bilancio. Il punto è, queste liste (sottoinsiemi) possono variare da secondo a base secondo sulla struttura o di dati in TM1. Ad esempio, non appena un nuovo ramo è aggiunto in Europa, i rami europee sottoinsieme immediatamente contenere questo nuovo ramo, senza alcun intervento manuale necessario. MDX è il linguaggio di query utilizzato per definire questi sottoinsiemi. MDX è un linguaggio di query standard per i database multidimensionali come TM1, anche se TM1 supporta solo un determinato sottoinsieme (scusate il gioco di parole) di tutta la lingua e aggiunge alcune caratteristiche uniche della propria pure. Quando si definisce un sottoinsieme utilizzando MDX invece di un sottoinsieme di serie, i negozi TM1 questa definizione, piuttosto che l'insieme risultante. Questo significa che la definizione o la query viene nuovamente eseguito ogni volta che si guarda senza che l'utente o l'amministratore bisogno di fare nulla. Se il database è stato modificato in qualche modo, allora si possono ottenere risultati diversi da l'ultima volta che è stato utilizzato. Ad esempio, se un sottoinsieme è definita come i figli di Rami West Coast e questo inizialmente ritorna Oakland, San Francisco, San Diego prima volta che viene definito, si può poi tornare Oakland, San Francisco, San Diego, Los Angeles una volta LA ha stato aggiunto nella dimensione di figlio di rami West Coast. Questo è ciò che intendiamo per dinamiche il risultato cambia. Un altro motivo che può causare il sottoinsieme di cambiare è quando si basa sui valori all'interno di un cubo o attributo. Ogni giorno sul giornale più grandi motori del mercato azionario sono elencati, come ad esempio un top 10 in termini di aumento dei prezzi delle azioni. In un modello TM1 questo sarebbe un sottoinsieme guardando una misura di variazione prezzo delle azioni e chiaramente sarebbe tale da restituire un diverso insieme di 10 membri ogni giorno. La parte migliore è che il sottoinsieme aggiornerà i risultati automaticamente senza alcun lavoro necessario da parte di un utente. Come creare un sottoinsieme MDX-based in TM1 Gli stessi passi di base possono essere seguiti con tutti gli esempi in questo documento. Generalmente gli esempi possono essere copiare e incollato nella finestra Espressione del Editor sottoinsiemi della dimensione in questione spesso prodotto. Si noti che è irrilevante che il cubo dimensione viene utilizzato da otterrete stessi risultati se si apre l'Editor sottoinsiemi dimensione all'interno di una visualizzazione cubo, l'albero cubo in Esplora server o l'albero dimensione in Esplora server. Per visualizzare e modificare una query MDX si deve essere in grado di vedere la finestra Espressione nell'Editor sottoinsiemi. Per attivare o disattivare questa finestra on e off scegliere Visualizza finestra Espressione. È possibile ora solo digitare (o incollare) la query in questa espressione di Windows e premere il pulsante Aggiorna per vedere i risultati. Come creare un sottoinsieme statico con MDX Un sottoinsieme statico è uno che non varia nel suo contenuto. Questa query restituirà le stesse 3 membri (sconto di prestito, Term Loan e al dettaglio) ogni volta. Non vi preoccupate, si fa più emozionante da qui. Come creare un sottoinsieme dinamico con MDX TM1 supporta solo un certo numero di funzioni dalla specifica completa MDX. Le varie versioni di TM1 supporteranno funzioni diverse (e potenzialmente sostenere l'in modi diversi). Il set di funzioni valida per la versione di TM1 che si sta utilizzando può essere trovato nel file della Guida principale, indicando il riferimento Materiale MDX Funzione di sostegno. Prima di tentare di scrivere una nuova query, assicurarsi che sia supportato, e anche se alcune funzioni non quotate certamente fare il lavoro che devono essere utilizzate a proprio rischio. Il messaggio di errore standard che significa che la funzione non è realmente supportato dalla versione di TM1 è, non riuscito per la compilazione espressione. Un avvertimento: per sua stessa natura, i risultati di un sottoinsieme dinamico può cambiare. Quando compresi sottoinsiemi dinamici in vista, i processi, le funzioni SUBNM, e così via, considerare attentamente quali potrebbero essere i potenziali risultati futuri, soprattutto se il sottoinsieme potrebbe un giorno essere vuoto. I due metodi più comuni per andare su in realtà la creazione di un sottoinsieme dinamico sono per la loro creazione a mano o con TurboIntegrator. A mano . È possibile digitare (o incollare) una query nella finestra Espressione come spiegato in precedenza, oppure si può scegliere Strumenti Record di espressione (e quindi Interrompi registrazione quando fatto) per attivare una sorta di videoregistratore. È quindi possibile utilizzare le normali caratteristiche di l'editor sottoinsieme (ad esempio selezionare in base al livello, in ordine decrescente, ecc) e il registratore si trasformerà le vostre azioni in un'espressione MDX valida. Questo è un ottimo modo per vedere alcuni esempi di sintassi valida, soprattutto per le query più complesse. Quando sono stati registrando espressione e scegliere Interrompi registrazione TM1 vi chiederà di confermare se si desidera collegare l'espressione con il sottoinsieme - fare in modo di dire Sì e selezionare la casella di controllo Salva espressione quando si salva il sottoinsieme risultante, altrimenti solo un elenco statico del risultato viene salvato, non è la query dinamica stessa. Utilizzando TurboIntegrator. Solo una linea, utilizzando SubsetCreateByMDX, è necessario per creare e definire il sottoinsieme. Avrete bisogno di sapere quali query che si desidera, come la definizione già. Si noti che la query può essere costruito nello script di TI tramite la concatenazione di testo in modo può incorporare variabili dal vostro script e consentire le query lunghe per essere costruito in varie fasi, che sono più facili da leggere e mantenere. SubsetCreatebyMDX (prodotti di base,, 0)) tutti i sottoinsiemi MDX-TI creati vengono salvati come query MDX dinamiche automaticamente e non come un elenco statico. Si noti che, almeno fino a TM1 v9.0 SP3, sottoinsiemi MDX-based non può essere distrutta (SubsetDestroy) quando sono utilizzati da una visione del pubblico, e non possono essere ricreate utilizzando un secondo comando SubsetCreateByMDX. Pertanto è difficile modificare sottoinsiemi MDX-based utilizzando TI. Mentre la natura dinamica della definizione sottoinsieme può rendere un po 'improbabile che effettivamente vuole fare questo, è importante tenere a mente. Se avete bisogno di cambiare qualche aspetto della query (ad esempio una TM1FILTERBYPATTERN 2006-12 al 2007-01 potrebbe essere necessario definire la query per utilizzare parametri esterni, come documentato in questo documento. Ciò avrà un piccolo impatto sulle prestazioni sopra il più semplice versione hardcoded. Inoltre, il filtro contro i valori di un cubo con SubsetCreateByMDX nella scheda Epilogo ad esempio, 0), test. (pubblicazione Measures. Amount) gt 0) non funziona se i valori capita di sono stati caricati nella scheda dati. È necessario eseguire il comando SubsetCreateByMDX in un successivo processo di TI. Si noti che TI ha un limite di 256 caratteri per definire sottoinsiemi MDX, almeno fino a v9.1 SP3, che può essere molto limitante. Sintassi e layout Una query può essere suddiviso su più righe per renderlo più leggibile. Per esempio:. FILTRO (, 0), Test2 (tasso Measures. Rate) 19) è più leggibile che avere tutta la query in una sola riga. La sezione di filtro effettivo è più facilmente letta e modificata ora avendo su una riga. Si noti che i riferimenti ai membri di solito hanno il nome della dimensione come prefisso. Ad esempio, infatti il nome della dimensione è facoltativo ma solo se il nome del membro (vendita al dettaglio, in questo caso) è completamente unico entro l'intero server - vale a dire non ci sono cubi, dimensioni o membri con quel nome esatto. Per esempio questa è la stessa query con il nome della dimensione omesso: che lavorerebbe nel contesto dell'applicazione di esempio utilizzato da questo documento, ma sarebbe rischioso in un'applicazione reale. Il messaggio di errore ricevuto quando dimenticando di specificare il prefisso sarebbe qualcosa di simile, di livello o del nome utente al dettaglio ambiguo: trovato in dimensioni e poi si va avanti ad elencare le varie dimensioni in cui il nome del membro non univoco può essere trovato, che è molto utile. È quindi certamente più sicuro e più performante di utilizzare sempre il prefisso dimensione. L'uso di parentesi quadre a volte può sembrare un po 'arbitrario durante la lettura esempi di query MDX. Il fatto è che un nome di oggetto OLAP (ad esempio nome cubo, nome della dimensione, nome del membro) devono essere racchiusi tra parentesi quadre solo se contiene uno spazio, inizia con un numero o è un MDX parola riservata (ad esempio Select). Tuttavia, a volte può essere più semplice da decidere di utilizzare sempre le staffe query in modo simili possono essere confrontati fianco a fianco con maggiore facilità. La definizione esatta di un membro di TM1 è quasi sempre espressa come dimensione Name. Member nome e non di più. In altri prodotti che utilizzano anche MDX come un linguaggio di query (ad esempio Microsoft Analysis Services) si può notare che le query specifica il percorso completo dal nome della dimensione attraverso la gerarchia fino al nome del membro, ad esempio: Date.2009.Q1.Feb. Week 06 questo può anche essere scritta come Date.2009Q1FebWeek 06 La ragione di questo è che gli altri prodotti non può imporre ad ogni nome del membro per essere unico dato che ogni membro ha un contesto (la sua famiglia) per consentirle di essere identificato in modo univoco, che è il motivo hanno bisogno di sapere esattamente quale settimana 06 è necessaria in quanto ci possono essere altri (nel 2008 per esempio, nell'esempio di cui sopra). TM1 richiede che tutti i nomi dei membri, a qualsiasi livello (e all'interno di Alias) di essere completamente unico all'interno di quella dimensione. TM1 avrebbe bisogno di fare Q1, febbraio e Settimana 06 più esplicito in primo luogo (cioè 1 ° trimestre 2009, Feb 2009, Settimana 06 2009), ma si può poi basta fare riferimento alla Date. Week 06 2009. Infine, caso (ad esempio lettere maiuscole contro minuscolo) non è importante con i comandi MDX (ad esempio filtro o, topCount o topCount sono tutte belle), ma ancora una volta è preferibile adottare un solo stile di serie per rendere più facile da leggere. Il modello di esempio utilizzato in questo documento, molti esempi di query dinamiche sarà dato. Tutti lavorano (esattamente come scritto, basta copiare e incollare li nella finestra Espressione nell'Editor sottoinsiemi della dimensione appropriata per utilizzarli) sul semplice insieme di cubi e dimensioni illustrato di seguito. Il modello è volutamente semplice, senza particolari caratteristiche così si dovrebbe trovare facile trasferire il lavoro per il proprio modello. Il modello utilizzato incluso 1 dimensione principale, prodotto, in cui la stragrande maggioranza delle query funziona più 3 cubetti: Test, Test2 e Test3. I valori dei dati nei cubi varieranno durante i test (youll vogliono modificare i valori e ri-eseguire la query per assicurarsi che i risultati cambiano e sono corretti), ma gli screenshot qui sotto mostrano le strutture del cubo e dimensione abbastanza bene per voi di ricreare rapidamente li o il modo di utilizzare invece il proprio modello. Per semplificare la distribuzione di questo documento non vi è alcuna intenzione di distribuire anche l'attuale file di modello TM1. Si noti che la dimensione principale utilizzato, prodotto, caratterizzato da gerarchie incomplete, e molteplici,. TM1SubsetAll, Membri, membro varia La base per molte query, restituisce (quasi, vedi sotto) l'intera dimensione, che è l'equivalente di fare clic sul pulsante Tutti i nell'Editor sottoinsiemi. TM1SUBSETALL (prodotto) Nota che solo l'ultima istanza nella prima gerarchia dei membri consolidate più volte viene restituito. La funzione di membri, d'altra parte, offre la piena dimensione, duplicati inclusi: Product. Members un intervallo di membri contigui dello stesso livello possono essere selezionati specificando il primo e l'ultimo membro del set si richiede con i due punti tra loro. Questo esempio restituisce 1 gennaio fino al 12 gennaio 1972. Selezione per Livello, Regular Expression (Pattern) e ordinale Selezione dei membri in base al loro livello nella gerarchia dimensione (TM1FilterByLevel) o da un modello di stringhe nel loro nome (TM1FILTERBYPATTERN) può essere visto facilmente utilizzando la funzionalità di Expression Record nell'editor sottoinsieme. Il classico di query tutti i membri foglia utilizzando TM1s comando filtraggio a livello TM1FilterByLevel:, 0) selezionare tutti i membri foglia, che corrispondono al carattere jolly HC vale a dire che hanno H e C, come il terzo e quarto caratteri dalla fine del loro nome. , 0), HC) La ragione per cui queste funzioni iniziano con TM1 è che essi non sono comandi standard MDX e sono specifici di TM1. Ci sono due ragioni principali per cui Applix attuano tali funzioni uniche: per aggiungere una caratteristica che è presente in TM1 standard ed utenti mancherà se non è lì o perché standard di TM1 ha la stessa funzione come MDX ma ha storicamente realizzato in modo leggermente diverso a MDX e quindi sarebbero, ancora una volta, causare problemi degli utenti se è stata attuata solo in modo standard MDX. In questi due casi, TM1FILTERBYPATTERN porta in una funzione comunemente usata dagli utenti TM1 che manca di MDX, mentre TM1FilterByLevel esiste perché TM1 ha, dal suo lancio nel 1984, numerati livelli di consolidamento a partire da zero per il livello foglia in aumento i livelli per la membri totali, mentre Microsoft ha deciso di farlo nel modo esatto contrario. In alcune situazioni è utile usare il metodo standard di livelli MDX e questo è disponibile con la funzione Levels anche. Esso consente di restituire i membri di una dimensione che risiedono allo stesso livello come membro di nome, basta tenere a mente che di serie MDX ordina i livelli in termini di distanza dalla parte superiore della gerarchia e non il fondo come TM1. Questo esempio restituisce tutti i membri allo stesso livello del membro di vendita al dettaglio: che, pur Retail è un consolidamento di alto livello, restituisce un N: voce (Non pertinente) nella dimensione perché questo rotola verso l'alto in tutti i prodotti come fa dettaglio così essi sono considerati allo stesso livello. Per filtrare la dimensione sulla base di un numero di livello è necessario utilizzare la funzione. Ordinal. Questo non è documentato come essere sostenuti nel file della Guida, e non ha funzionato in 8.2.7, ma sembra funzionare in 9,0 SP3 e 9.1.1.36 almeno. Questo esempio restituisce tutti i membri al livello 1:, Product. CurrentMember. Level. Ordinal 1) Questo esempio potrebbe restituire tutti i membri non allo stesso livello di prestito di sconto. , Product. CurrentMember. Level. Ordinal TM1Sort, TM1SortByIndex e l'Ordine TM1Sort è l'equivalente di premere uno dei due Ordinamento crescente o Ordinamento decrescente pulsanti nell'editor sottoinsieme cioè sorta in ordine alfabetico. TM1SortIndex è l'equivalente di premere uno dei due Ordina per indice, crescente o Ordina per indice, scendendo pulsanti nell'editor sottoinsieme cioè ordina per l'indice di dimensione (dimix). L'ordine è una funzione MDX standard che utilizza un valore di dati da un cubo per eseguire l'ordinamento. Ad esempio, ordinare la lista dei clienti in base alle vendite, o un elenco di dipendenti in base alla loro anzianità di servizio. Ordinare l'intera dimensione del prodotto in ordine alfabetico ordine crescente. , ASC) Distinguete i membri foglia della dimensione in base ai loro valori quantità nel cubo di prova dal più alto verso il basso. ORDINE (, 0). Test. (Distacco Measures. Amount), BDESC) Si noti che usando BDESC invece di DESC dà risultati radicalmente diversi. Questo perché BDESC tratta tutti i membri in tutto il set utilizzato (in questo caso l'intera dimensione) in misura pari fratelli e li colloca di conseguenza, mentre DESC tratta i membri come ancora essere nei loro gruppi familiari e li colloca solo contro i propri fratelli diretti . Se non sei sicuro di ciò che questo significa e cant vedere la differenza quando si cerca fuori, poi basta usare BDESC Ordine può anche usare un attributo invece di un valore cubo. In questo esempio l'attributo AlternateSort del prodotto viene utilizzato per ordinare i figli di domanda di prestiti in ordine decrescente. Si tratta di un attributo numerico contenente numeri interi (cioè 1, 2, 3, 4, ecc) per consentire un ordinamento completamente dinamico da definire:, Product. AlternateSort, DESC) TopCount e BottomCount Un classico comando Top 10:, 0), 10, test. (Measures. Amount di invio)) omettendo un ordinamento che ordina nell'ordine di default (che ha i valori scendono di valore e si rompe eventuali gerarchie presenti). A Top 10 query con un ordinamento esplicito per i risultati. , 0), 10, di prova. (Pubblicazione Measures. Amount)), test. (Distacco Measures. Amount), BDESC) BDESC significa rompere la gerarchia. Si noti come la misura scelta si ripete per l'ordinamento. Anche se la stessa misura viene utilizzato nel precedente esempio si potrebbe effettivamente trovare i primi 10 prodotti di vendita, ma poi visualizzarli in ordine, per esempio, le unità vendute o un attributo di importanza strategica. Questa è la top 10 prodotti sulla base di valori Test2s caso, non ordinate in modo verranno ordinati in base ai valori di Test2. , 0), 10, Test2. (Tasso Measures. Rate)), questa è la top 10 prodotti a base di test2s dati nel misurare la frequenza, ordinati da 10 a 1., 0), 10, test2. (Tasso Measures. Rate) ), test2. (Tasso Measures. Rate), ASC) TopCount esegue automaticamente un ordinamento decrescente in base al valore per ottenere i membri TOP. Se questo non è desiderato, si potrebbe desiderare di utilizzare la funzione di Head (descritto di seguito), invece. BottomCount è l'opposto di TopCount e così viene utilizzato per trovare i membri con i valori più bassi in un cubo. Attenzione che il valore più basso è spesso pari a zero e se questo valore deve essere escluso dalla query è necessario fare riferimento alla sezione sulla funzione di filtro più avanti in questo documento. Un fondo 10 query con un ordinamento esplicito per i risultati. , 0), 10, prova (Distacco Measures. Amount)), prova (Distacco Measures. Amount), BASC) Ulteriori approfondimenti:.. TopSum, TopPercent e loro equivalenti di fondo sono funzioni correlate utili. Filtro, da valori, stringhe e gli attributi la funzione di filtro viene utilizzato per filtrare la dimensione in base a un qualche tipo di valori di dati piuttosto che solo i membri e la loro gerarchia per conto proprio. Questi dati potrebbero essere dati del cubo (numerico o stringa) o dati attributo. Questo richiede un cambiamento di pensiero da semplici singole dimensioni (liste con una gerarchia e occasionalmente alcuni attributi) ad uno spazio multidimensionale, in cui ogni dimensione in questi cubi deve essere considerato e trattato. Questo esempio restituisce i membri foglia di prodotto che hanno un valore di quantità nel cubo di prova sopra lo zero. , 0), Test. (Pubblicazione Measures. Amount) gt 0) Dal momento che il cubo di prova ha solo 2 dimensioni del prodotto e misure Diffusione questo è un esempio semplicistico. La maggior parte dei cubetti si hanno più di dimensione essere filtrata e la dimensione con il valore di filtro. Tuttavia, è semplice estendere il primo esempio di lavorare in un cubo grande. Questo esempio restituisce i membri foglia di prodotto che hanno un valore Quantità per tutte le entità nel cubo Test3 sopra lo zero. , 0), Test3. (Enti Entity. All, la pubblicazione di Measures. Amount) gt 0) Come si può vedere da quanto sopra, è sufficiente includere tutti i riferimenti dimensionali necessari all'interno delle parentesi tonde. Di solito si avrà solo bisogno di uno specifico utente di nome (ad esempio tutte le entità). Se la dimensione viene omesso allora il CurrentMember si utilizza invece che è simile all'uso dimensione (cioè per ciascuno) in una regola TM1, e potrebbe restituire risultati diversi a velocità diversa. Invece di utilizzare un valore hardcoded per filtrare contro (zeri negli esempi precedenti), questo esempio restituisce tutti i prodotti con una quantità nel cubo test maggiore o uguale al valore nella cella MidasJCFI, Quantità. , 0), Test. (Pubblicazione Measures. Amount) prova gt. (Product. MidasJCFI, la pubblicazione di Measures. Amount)) Questa query restituisce i prodotti che hanno un valore Tariffa in Test2 maggiore di MidasJXCOs Tariffa in Test2. Ora, questa query restituisce solo una serie di prodotti sta a voi che il cubo si visualizzano questi prodotti in IE è possibile eseguire questo durante la navigazione di prova e quindi restituire ciò che si presenta come un insieme quasi casuale di prodotti, ma il fatto è che la query sta filtrando l'elenco dei prodotti sulla base di dati conservati in 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 allowing duplicates. Note: the following section does not work in v9.1 SP2, but does work in v9.0. La vostra situazione potrebbe essere diversa. 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