Archivio per la categoria SQL

Enter Our Daily Sweepstakes to Celebrate the Anniversary of SQL Server 2012!

Celebrate the Anniversary

, ,

Lascia un commento

SQL, MDX E DAX alla ricerca del RANK perduto.

Questa è la breve storia di tre signori di epoche diverse con la medesima esigenza, ritrovare il Rank perduto.
SQL è un signore di 38 anni nato in un laboratorio IBM, e possiede la grande dote di saper interrogare

MDX è il cugino di SQL, nasce nel 1997 ed era un Teenager con ottime prospettive, e una delle sue caratteristiche è quella di saper
manipolare

DAX è il più giovane dei tre non ha neanche 5 anni e deve ancora farsi le ossa, ma è dotato di grande memoria

Un giorno di Settembre SQL, MDX e DAX si trovano nel bel mezzo di una base di dati gigantesca piena di esseri strani chiamati bit.
C’erano bit di tutte le forme e di tutte le dimensioni che infastidivano i nostri amici.

SQL, il più esperto dei 3 disse:
Select
Bit, Forma, Grandezza
, RANK() OVER (PARTITION BY Forma ORDER BY Grandezza DESC) AS Rank
from GrandeBaseDati

ovvero

“dobbiamo assegnare un rango di grandezza per ogni forma. Solo in questo modo saremo in grado di difenderci !!!”.

L’idea era giusta ma la GrandeBaseDati non voleva cedere all’interrogazione del nostro SQL e dopo 3 ore ancora non si era avuta nessuna risposta.

Il giovane MDX decise di entrare in azione e disse:
WITH MEMBER [Measures].[Rank] AS
RANK([DIM_Forme].[Forma].CurrentMember, ORDER([DIM_Forme].[Forma].[Forma].MEMBERS, [Measures].[Grandezza], BDESC))
SELECT
[Measures].[Rank] ON 0
,[DIM_Forme].[Forma].[Forma].MEMBERS on 1
FROM [GrandeBasiDati]

“fatemi manipolare un po questa GrandeBaseDati, la mettiamo in un Cubo, gli facciamo fare un po’ di aggregazioni e vedrete che otterremo la risposta che ci serve!”

Anche in questo caso l’idea poteva avere successo ma il tempo passava inesorabile e le risposte non arrivavano.

L’infante DAX si fece avanti e disse:
Rank: = RANKX (ALLEXCEPT(Bit;Bit[Forma]);[Grandezza])

ovvero

“Non serve aspettare le risposte da questo mostro, lui non ce le darà mai, dobbiamo solo osservare e memorizzare, le risposte arriveranno da sole”.

SQL e MDX si guardarono perplessi ma dopo pochi secondi avevano tutto chiaro e vedevano tutte le forme dei bit in ordine di grandezza.
Riuscirono cosi a schivare quelle più grandi e quelle più insidiose e finalemente uscirono dalla GrandeBaseDati.

MORALE: puoi saper interrogare, puoi saper manipolare ma se non hai un briciolo di memoria non avrai mai tutte le risposte nel tempo necessario.

7 commenti

Utilizzo del LIKE in MDX

A differenza del linguaggio SQL, non esiste la funzione LIKE in MDX.
Per ottenere lo stesso risultato in MDX bisogno utlizzare questo codice:

FILTER([Nome Dimensione].[NomeDimensione].Members,
LEFT([Nome Dimensione].[NomeDimensione].CurrentMember.Name, NumeroDiCaratteri) = “Parola”)

Es. Tutti i Clienti che iniziano per “Vari”

FILTER([Dim Clienti].[Dim Clienti].Members, LEFT([Dim Clienti].[Dim Clienti].CurrentMember.Name, 4) = “Vari”)

1 Commento