2011-11-18 2 views
1

Quelle sera MDX requête équivalente à:MDX équivalent de requêtes SQL

select * from tableName where somecount > num1 and somecount < num2? 

somecount est une dimension dans mon cas (et non une dimension). Pour autant que je l'ai compris, la clause WHERE dans MDX Queries ne prend pas en charge une opération inférieure ou supérieure à l'opération. somecount dans mon cas est Timestamp. Puisque je veux agréger des données sur les paramètres passés par l'utilisateur (peut être agrégé hier, les 7 derniers jours, les 15 derniers jours, le mois dernier etc.). Donc, pré-calculer l'horodatage et le stocker comme Année-Mois-Jour-Temps n'aidera pas.

+1

Pour "somecount> num1" vous devez lire sur la fonction Filter MDX(). –

Répondre

1

Il y a une erreur commune mélangeant SQL et MDX en raison de la syntaxe similaire. mais MDX n'est pas comme SQL.

Je vous conseillerais de passer par cette Gentle MDX Tutorial pour avoir une meilleure compréhension.

Select * 

Il n'y a pas d'équivalent * dans MDX, vous devez indiquer vos axes en mettant vos dimensions. Vous pouvez utiliser [Measures] .members pour sélectionner une liste de mesures par exemple.

.. where somecount > num1 and somecount < num2? 

La traduction de cette MDX subselects utilise, étrange mais MDX where clause est quelque chose de différent. Il est plus comme:

Select [Measures].members on 0 
from (
    select {All the members that match your filter} from [MyCube] 
) 

Il y a deux façons obtenir la liste des membres, consultez la liste des MDX functions available pour avoir une idée de tout ce qui est possible.

Bonne chance avec vos premiers pas dans MDX.

0
SELECT MEMBERS ON ROWS FROM (SELECT Filter(filter) ON COLUMNS FROM [FACT_TABLE]) 

filtre doit être quelque chose comme ça

Filter([TIME].[YEAR].[YEAR].AllMembers, (
[TIME].[YEAR].CurrentMember.member_caption>="2009" AND 
[TIME].YEAR].CurrentMember.member_caption<="2012")) 
0
SELECT Measures.members ON ROWS, 
     Dimension.members ON Columns 
    FROM Cube 
WHERE somecount.value > num1 
    AND somecount.value < num2