2015-04-21 6 views
0

Jev a créé un rapport sur les revenus SSRS dans Visual Studio 2005 sur la source de données Qube SSAS 2008 R2 pour le déploiement sur MS SharePoint 2005 Server. Il fonctionne très bien (en rus.):mdx croise la hiérarchie des dimensions avec des mesures granulaires pour générer des statistiques dupliquées de l'ensemble de données Reporting Services

(oups, ne peut pas poster l'image ci-dessous 10 points de réputation)

Mais le problème est que les sorties mdx de rapport en double x2/x3/x4/statistiques x10 dans différentes mesures, qui sont chargés dans différents niveaux de la hiérarchie du calendrier (certains plans ont granularité par an, d'autres trimestriels, les données factuelles se situent dans le niveau de la fonte des dates exactes). Voici abstrait mdx-code:

/* Revenue plan-fact report for business units 
    (simplified translated abstact, 
    initially built for new 2015 and old clients) */ 

    /*============================================================================ 
     CALCULATED MEASURES 
     ============================================================================*/ 

     WITH  
     MEMBER [is new client] AS 
     CASE  
     WHEN [Clients].[First contract calendar].CURRENTMEMBER = 
      [Clients].[First contract calendar].[Year START DATE].&[2015-01-01T00:00:00] 
     THEN 1 ELSE 0 END  

     MEMBER [Measures].[New clients - Revenue Plan] AS 
       CASE WHEN [is new client] = 1 
       THEN [Measures].[New clients - Revenue Plan] 
       ELSE null END 

     MEMBER [Measures].[New clients - Revenue Fact] AS 
       CASE WHEN [is new client] = 1 
       THEN [Measures].[New clients - Revenue Fact] 
       ELSE null END 

     MEMBER [Measures].[New cients - contracts Plan] AS 
       CASE WHEN [is new client] = 1 
       THEN [Measures].[New cients - contracts Plan] 
       ELSE null END 

    /*============================================================================ 
     CONSTRACT DATA SET 
     ============================================================================*/ 

     SELECT {[Measures].[New clients - Revenue Plan], 
       [Measures].[New clients - Revenue Fact], 
       [Measures].[New cients - contracts Plan]} ON COLUMNS, 

     --exists(
     --nonempty( 
     CrossJoin(
        -- dimention of client's first contract calendar 
        -- (we need it to calculate measure of new/old client flag): 
        -- drill down from years through quarters to monthes 

        Hierarchize(DrilldownMember({ 
           {DrilldownLevel({[Clients].[First contract calendar].[Year START DATE]})}}, 
               {[Clients].[First contract calendar].[Quarter START DATE]}) 
           -{[Clients].[First contract calendar].[Month START DATE].&[1899-12-30T00:00:00]}), 

        -- dimention of company's business structure (to show in report rows) 

        Hierarchize(DrilldownMember({ 
           {DrilldownLevel({[Business structure].[Hierarchi].[ALL]})}}, 
               {[Business structure].[Hierarchi].[LV1].&[3]}) 
           -{[Business structure].[Hierarchi].[ALL],        
           [Business structure].[Hierarchi].[LV1].&[3], 
           [Business structure].[Hierarchi].[LV2].&[3]})    
       ) 
     --))   
     ON ROWS 

     FROM [DWH_FD_client_count] 

qui se traduit par des données établies avec le doublement des statistiques à différents niveaux de la hiérarchie civile:

(oups, ne peut pas poster l'image ci-dessous 10 points réputation)

I J'ai essayé les fonctions exists(), nonempty(), nonemptycrossjoin() et filter() - mais tout cela entraîne des lacunes statistiques pour une partie des business units. Je suggère que le problème de base est la granularité des mesures de Qube. Mais je ne peux pas influencer cela, j'ai besoin de faire des chiffres très bien sur le côté de mdx de Report Server. Peut-être, j'ai besoin de modifier le bloc de recherche pour [Clients]. [Premier calendrier de contrat] mesurer la hiérarchie.

Aidez-moi s'il vous plaît, les gars! Je ne peux pas surmonter ce probolem pour deux semaines maintenant

+0

avez-vous essayé d'encapsuler vos mesures personnalisées dans 'Aggregate' ou' Sum'? – whytheq

+0

J'utilise le groupement en .rdl, je n'ai pas essayé ni agrégé, ni somme dans mon mdx – Globe

Répondre

0

Voici la solution qui a fonctionné pour moi. Le problème semblait être dans le forage hiérarchique de [clients]. [Premier contrat calendrier] dimention, qui cousu faux croisement de ses niveaux avec sortie de lignes excessives et doubler les statistiques. Pour bien de travail mdx Je viens remplacé ce bloc de code:

Hierarchize(DrilldownMember({ 
          {DrilldownLevel({[Clients].[First contract calendar].[Year START DATE]})}}, 
              {[Clients].[First contract calendar].[Quarter START DATE]}) 
          -{[Clients].[First contract calendar].[Month START DATE].&[1899-12-30T00:00:00]}) 

avec une hiérarchie d'attribut appellent seulement:

[Clients].[First contract calendar].[Month START DATE] 

Note: les données de sortie définies dans les Reporting Services produit colonne non Monthes seulement , mais tous ses niveaux de hiérarchie parentale aussi: Années et Quartiers, que j'ai essayé de produire avec les fonctions Drilldownmember() et Drilldownlevel() initialement

0

Peut-être que vous avez besoin d'envelopper vos mesures personnalisées dans Sum ou Aggregate. Ces mesures sont-elles censées être récursives? Vous pouvez essayer de changer les noms - je viens d'ajouter XX pour les différencier de la mesure utilisée dans la définition:

MEMBER [Measures].[New clients - Revenue Plan XX] AS 
     SUM(    
     CASE WHEN [is new client] = 1 
      THEN [Measures].[New clients - Revenue Plan] 
      ELSE null END 
     ) 
    MEMBER [Measures].[New clients - Revenue Fact XX] AS 
     SUM(    
     CASE WHEN [is new client] = 1 
      THEN [Measures].[New clients - Revenue Fact] 
      ELSE null END 
     ) 

    MEMBER [Measures].[New cients - contracts Plan XX] AS 
     SUM(    
     CASE WHEN [is new client] = 1 
      THEN [Measures].[New cients - contracts Plan] 
      ELSE null END 
     ) 
+0

whytheq, j'ai essayé d'utiliser sum() pour les membres calculés - ça n'aide pas, statistiques doulbes encore. En tout cas, merci pour votre suggestion – Globe

+0

@Globe avez-vous changé les noms de vos mesures ?! ou sont-ils intentionnellement récursifs? – whytheq

+0

original mdx possède des noms uniques de mesures calculées, qui diffèrent de ceux du Qube – Globe