Как переопределить SSAS Business Intelligence «Конвертация валют» для расчета ответственности - PullRequest
0 голосов
/ 17 февраля 2010

Я настраиваю новый куб в службах Analysis Services и использую мастер Business Intelligence для решения проблем с конвертацией валюты. Теперь все это работает отлично, деньги конвертируются на уровне листа и суммируются для отображения в выбранной пользователем валюте отчетности.

Моя проблема сейчас заключается в расчете ответственности. Что касается ответственности, мне нужно суммировать деньги в каждой валюте, а затем конвертировать их по последнему курсу на конец дня. В качестве меры LastNonEmpty у меня есть показатель «Конец дня», но я не вижу, как избежать преобразования на уровне листа, как показано ниже:

// 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

Мера [Деньги] выплачивается в разных валютах, и каждая валюта привязывается к измерению валюты и курсу на конец дня.

Какой мой лучший план для расчета ответственности? Я подумываю повторить меру [Деньги], но, кажется, расточительно иметь дополнительные меры только для того, чтобы избежать конвертации валюты. Плюс в реальном кубе есть еще несколько мер, которые требуют вычисления, поэтому это не будут просто дополнительные один.

Кто-нибудь еще сталкивался с чем-то подобным?

1 Ответ

1 голос
/ 19 февраля 2010

ОК, поэтому я в итоге создал невидимые [Меры]. [Деньги - Ответственность], которые не были автоматически преобразованы с помощью вышеуказанного кода, и я закончил со следующими вычислениями в сценарии:

[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]))
);
...