2017-09-27 6 views
0

besoin de produire une sortie spécifique dans MDX et j'ai du mal à produire le résultat souhaité. J'essaie de construire un exemple en utilisant ADW Cube.Obtenir la même mesure dans deux colonnes côte à côte pour différentes périodes dans MDX

J'ai besoin pour produire une table où j'ai trois colonnes:

  1. une catégorie (la ville dans cet exemple, mais cette colonne finira par changer dynamiquement en fonction du paramètre sélectionné dans SSRS),
  2. une certaine mesure pour la catégorie (ventes Internet dans cet exemple) pour un mois spécifique
  3. la même mesure que dans la deuxième colonne, mais pour un mois précédent

La table doit être filtrée uniquement pour les trois premiers éléments les plus élevés en fonction de la mesure dans la deuxième colonne. Ci-dessous un exemple statique simple de ce que j'ai obtenu jusqu'à présent, mais l'idée est la suivante: L'utilisateur choisit certaines valeurs dans les paramètres qui sous-traiteront les données pour lesquelles le tableau sera filtré (représenté par [Pays] (Canada) dans l'exemple). Il choisira alors le niveau de granularité au sein d'une hiérarchie pour laquelle il veut obtenir ses résultats (représentés par [Ville] dans l'exemple). Et il choisira la période désirée (Spécifique [Année] et [Mois]). Lors de l'exécution de la requête, il devrait obtenir un tableau similaire comme ci-dessous (où il a les trois premiers résultats en fonction de la deuxième colonne):

Category  Internet Sales Amount (CurrentPeriod) Internet Sales Amount (PreviousPeriod) 
Langford  $13,468.39        null 
Vancouver  $12,291.48        $7,447.26 
Sooke   $11,563.01        null 

La première colonne a représente la granularité choisie. La deuxième colonne représente les ventes Internet pour la combinaison année-mois sélectionnée pour l'article donné et la troisième colonne représente les ventes Internet dans le mois précédant la combinaison choisie.

Voici ce que j'ai obtenu jusqu'ici. J'ai été capable de produire les deux premières colonnes de la table mais j'ai du mal à inclure la troisième colonne aussi. Je viens de SQL et je suis un nouveau venu chez MDX, alors, si ce que je vous demande semble simple ou si mon approche est loin de la façon dont cela devrait être fait.

SELECT [Measures].[Internet Sales Amount] ON 0, 
TopCount 
    ({[Customer].[City].[City].Members} 
    , 3 
    , [Measures].[Internet Sales Amount] 
    ) ON 1 
FROM [Adventure Works] 
WHERE ([Customer].[Country].&[Canada], 
     [Date].[Calendar Year].&[2007], 
     [Date].[Month of Year].&[12]) 

Répondre

0

Bon, j'ai réussi à résoudre cet exemple simplifié.

WITH 
    MEMBER [Measures].[SalesPrevMth] AS 
    (
     [Measures].[Internet Sales Amount] 
    ,[Date].[Calendar].CurrentMember.PrevMember 
    ) 
SELECT 
    NON EMPTY 
    { 
     [Measures].[Internet Sales Amount] 
    ,[Measures].[SalesPrevMth] 
    } ON COLUMNS 
,NON EMPTY 
    TopCount 
    ({ 
     [Customer].[City].[City].Members 
     * 
     [Date].[Calendar].[Month].ALLMEMBERS 
     }, 3, [Measures].[Internet Sales Amount]) ON ROWS 
FROM 
(
    SELECT 
    [Date].[Calendar].[Month].&[2007]&[12] ON COLUMNS 
    FROM [Adventure Works] 
) 
WHERE [Customer].[Country].&[Canada];