2009-05-12 5 views
0

J'ai créé une requête MDX pour extraire des articles spécifiques d'un cube OLAP. Fondamentalement, il retourne des articles ci-dessous un nœud article-catégorie spécifique qui sont produites par un fabricant spécifique:Tri et pagination dans une requête MDX (MS Analysis Services)

SELECT NON EMPTY 
(
    Hierarchize 
    (
     { 
      DrilldownLevel 
      (
       { 
        [T DAT Article].[Ar ID].[All] 
       } 
      ) 
     }  
    ) 

) 

DIMENSION PROPERTIES PARENT_UNIQUE_NAME, 
[T DAT Article].[Ar ID].[Ar ID].[Ar Key], 
[T DAT Article].[Ar ID].[Ar ID].[Ar LongName] 
ON COLUMNS 
FROM [Catalog_2009] 

WHERE 
(
    [T DAT Structure].[St St ID FK].&[193066], -- specific article-category node 
    [T DAT Firm].[Fi ID].&[86] -- specific manufacturer 
) 

CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS 

Maintenant, je veux améliorer cette requête pour soutenir la pagination et le tri. Signification Je peux fournir:

  • index de page (tel que 0)
  • taille de la page (tel que 30)
  • colonne de tri (tel que Ar LongName)
  • direction de triage (comme ascendant)

Quelle approche devrais-je prendre? J'ai regardé la clause Subset et order. Mais ceux-ci limitaient fondamentalement les résultats de la partie «hiérarchiser» de la requête, ce qui signifiait qu'ils coupaient les hiérarchies au lieu du résultat final.

Quelqu'un pourrait-il me donner un indice sur comment faire fonctionner le paging et le tri?

Répondre

1

Tri est une douleur dans MDX, ou du moins c'est ce que j'ai toujours ressenti à ce sujet. Si votre requête ne comporte qu'une seule dimension sur les lignes et une sur les colonnes, la vie sera beaucoup plus simple. Le mot-clé ORDER peut être appliqué à un ensemble, et il vous suffit de lui donner un numéro à trier, et lui dire dans quel sens aller avec ASC ou DESC.

Le problème ASC ou DESC devient confus car vous pouvez également spécifier BASC ou BDESC. Le "B" signifie "casser" et il dit si vous voulez que les rangées (ou colonnes) soient triées au sein de leurs groupes hiérarchiques, ou voulez-vous casser la hiérarchie quand vous triez, et réorganiser complètement les rangées.

Voici un exemple simple

ORDER({[Time].[Month].members}, [Measures].[Gross Sales], BASC) 

Cela signifie que vous voulez lister tous les mois dans l'ordre croissant de la valeur des ventes brutes. Vous brisez la hiérarchie, de sorte que les mois ne restent pas groupés dans leurs années parent, et peuvent être complètement mélangés par l'opération de tri.

+0

C'est une bonne réponse ... et la pagination? –

Questions connexes