2017-07-27 4 views
0

Le [Coût Prévisionnel Conditionnel] est généré en suivant les Déclarations SCOPE basées sur des mesures appelées "Coût" et "Prévision". Coût".Comment optimiser MDX qui doit décider de façon conditionnelle entre deux Mesures basées sur la demi-année choisie (impliquant SCOPE, Déclarations Descendants)

Ces instructions fonctionnent correctement, mais elles sont trop lentes. Surtout si toute l'ANNÉE est choisie dans le rapport (ou même plusieurs années). Le temps d'attente peut être supérieur à 5 minutes. Une idée pour optimiser ce MDX?

SCOPE ([Measures].[Conditional Forecast Cost]);   
THIS = (IIF([DIM Date].[Half Year].&[1],[Measures].[Cost], [Measures].[Forecast Cost])); 
END SCOPE; 

SCOPE ([DIM Date].[Iso Month].[All].children, [Measures].[Forecast Costs]);   
    THIS =  SUM(
        Descendants(
           [DIM Date].[Iso Month].CurrentMember, 
           [DIM Date].[Iso Month] 
          ), 
        [Measures].[Conditional Forecast Cost] 
        ); 
END SCOPE; 

Informations générales:

première déclaration représente la logique de base.

  • Si le premier semestre est choisi, la mesure "Coût" doit être appliquée.
  • Pour le deuxième semestre, la mesure «Coût prévisionnel» doit être appliquée.

Cela fonctionne bien tant que nous rapportons sur un niveau mensuel.

  • Si l'année devrait être agrégée la première déclaration n'est pas assez parce que le moteur ne sera pas aggrate la façon dont nous avons défini avec « IIF ([DIM Date]. [Semestriels]. & [1 ], [mesures]. [coût] ... ».

Ainsi, la deuxième Instruction SCOPE avec la fonction Descendants force le moteur à faire l'agrégation du bas niveau mensuel. qui fonctionne jusqu'à présent, mais il est très lent

Informations complémentaires:

  • Pour l'instant nous préférons mettre en œuvre cette logique de la couche semnatic avec MDX et non dans l'ETL.
  • La mesure "Coût" est également une mesure calculée dans le MDX.
  • La DIM DIM dimension a une hiérarchie juste avec "YEAR-Month" (de bien sûr des attributs supplémentaires).

Répondre

1
  1. Afficher s'il vous plaît MDX-Script de MESURES. [Coût].
  2. Votre IIF décrit deux sous-cubes => le travail SCOPE. Transformer à une telle forme (simplifié):

    MEASURES.[Conditional Forecast Cost] = [Measures].[Forecast Cost] 
    SCOPE([DIM Date].[Half Year].&[1]) 
        MEASURES.[Conditional Forecast Cost] = [Measures].[Cost]; 
    END SCOPE; 
    
  3. Vous avez récursion (très mauvais!): [Coût prévisionnel conditionnel] appelle [Coût prévu], puis appelle [Coût prévisionnel] [Coût Prévision conditionnelle]! Vous devez le réécrire sans récursion!

yabele.blogspot.com, www.xing.com/profile/Yuri_Abele

+0

Merci beaucoup. MDX-Script pour MESURES.[Coût] est: 'SCOPE (IIF (ISERROR ([Mesures]. [Coût]), {}, {[Mesures]. [Coût]})); THIS = [Mesures]. [Coûts 0] + [Mesures]. [Coûts de la marque]; FIN CHAMP D'APPLICATION –