2010-02-17 3 views
0

Je configure un nouveau cube dans Analysis Services et j'ai utilisé l'assistant de Business Intelligence pour résoudre les problèmes de conversion de devise. Maintenant tout cela fonctionne parfaitement, l'argent est converti au niveau feuille et résumé pour l'affichage dans le choix de l'utilisateur de la monnaie de reporting.Comment remplacer la conversion de devise de Business Intelligence SSAS pour le calcul du passif

Mon problème maintenant est le calcul de la responsabilité. Pour la responsabilité, je dois résumer l'argent dans chaque devise, puis le convertir en utilisant le plus récent «taux de fin de journée». J'ai « Fin de la journée Taux » comme mesure LastNonEmpty, mais je ne vois pas comment éviter la conversion de niveau feuille comme indiqué ci-dessous:

// This is the Many to One section 
// All currency conversion formulas are calculated for the pivot currency and at leaf of the time dimension 
Scope ({ Measures.[Money] }); 
    Scope(Leaves([Date]) ,[Reporting Currency].[GBP], Leaves([Currency])); 

    // Convert Local value into Pivot currency for selected Measures that must be   converted with Measure rate [End Of Day Rate] 
     Scope({ Measures.[Money] }) 
      This = [Reporting Currency].[Local] * Measures.[End Of Day Rate]; 
     End Scope; 
    End Scope;  

    // This is the One to Many section 
    // All currency conversion formulas are calculated for the non pivot currency and at leaf of the time dimension 
    Scope(Leaves([Date]) , Except([Reporting Currency].[Currency].[Currency].Members, {[Reporting Currency].[Currency].[Currency].[GBP], [Reporting Currency].[Currency].[Currency].[Local]})); 

    // This section overrides the local values with the Converted value for each selected measures needing to be converted with Measure rate [End Of Day Rate]… 
    // LinkMember is used to reference the currency from the source currency dimension in the rate cube. 
    Scope({ Measures.[Money] }); 
     This = [Reporting Currency].[Currency].[GBP]/(Measures.[End Of Day Rate], LinkMember([Reporting Currency].[Currency].CurrentMember, [Currency].[Currency])); 
    End Scope; 

    End Scope; // Leaves of time, all reporting currencies but local and pivot currency 
End Scope; // Measures 

Le [l'argent] mesure est versée dans des devises différentes, et chaque devise est indexée sur une devise et un taux de fin de journée.

Quel est mon meilleur plan pour calculer la responsabilité? J'envisage de répliquer la mesure [Money], mais il semble inutile d'avoir des mesures supplémentaires pour éviter la conversion des devises - De plus, dans le cube réel, il y a plusieurs autres mesures qui nécessitent le calcul, donc ce ne sera pas seulement un.

Quelqu'un d'autre a-t-il fait face à quelque chose de similaire?

Répondre

1

OK donc j'ai fini par créer une [mesures] invisibles [argent - responsabilité] qui était par le code ci-dessus ne converti automatiquement, et j'ai fini avec le calcul suivant dans le script.

[Measures].[Liability] = 
(
    SUM 
    ([Currency].[Currency].[Currency], 
     SUM 
     ( 
      { NULL : [Date].[Date Key].CurrentMember }, 
      ( 
       [Money - Liability] 
      ) 
    ) 
    /[Measures].[End Of Day Rate] 
    ) 
    * (Measures.[End Of Day Rate], LinkMember([Reporting Currency].[Currency].CurrentMember, [Currency].[Currency])) 
); 
Questions connexes