Berechnet den relativen Wechselkurs zwischen einem übergeordneten und einem untergeordneten Element und gibt den Wert als Multiplikator zurück.
Rückgabewert
Diese Funktion gibt einen Wert zurück, der als Bestandteil einer HS.EXP-Funktion verwendet werden soll, in der Regel im Umrechnungsabschnitt.
Syntax
Rate (ExchangeRate, TriangulationCurrency)
Tabelle 12-13 Syntax der Funktion Rate
Parameter | Gültige Werte |
---|---|
ExchangeRate |
Ein Hauptkonto vom Typ "CurrencyRate", das als Kontozeichenfolge ohne Verweise auf benutzerdefinierte Dimensionen oder Intercompany-Dimensionen angegeben ist, wie z.B. "A#EOP_RATE" |
TriangulationCurrency |
Entweder ein gültiges Währungslabel als Zeichenfolge oder doppelte Anführungszeichen (" "). Beim Angeben einer Währung ist es nicht erforderlich, auf eine benutzerdefinierte Dimension zu verweisen. |
Detaillierte Beschreibung
Diese Funktion berechnet den relativen Wechselkurs zwischen einem übergeordneten und einem untergeordneten Element und gibt einen Wert als Multiplikator zurück. Der Wert wird anhand des Parameters TriangulationCurrency berechnet.
Wenn der Parameter TriangulationCurrency ein gültiges Währungslabel ist, basiert der Kreuzkurs auf dieser Währung.
Wenn der Parameter TriangulationCurrency leer ist (" "), sucht die Funktion zunächst nach einem gültigen direkten Kurs. Wird keiner gefunden, verwendet sie die Triangulation für die Anwendungswährung.
Wenn keine Kurswerte gefunden werden, gibt die Funktion 1 zurück.
In diesen Tabellen sind die Methoden zum Suchen der Daten aufgeführt. Außerdem ist die Reihenfolge angegeben, in der die Suche erfolgt. Die Reihenfolge wird durch eine Zahl in Klammern dargestellt, z.B. (1). In jedem Fall erfolgt die Suche zunächst in der untergeordneten Entity. Werden hier keine Daten gefunden, wird die Suche in der Entity "[None]" fortgesetzt.
In der folgenden Tabelle ist die Währung des untergeordneten Elements oder des übergeordneten Elements mit der Triangulationswährung identisch. Falls für Triangulation kein Wert angegeben ist, ist die Währung mit der Anwendungswährung identisch.
Tabelle 12-14 Kursbeispiel — Triangulationswährung identisch
Kurse der Custom 2-Dimension | Kurse der Custom 1-Dimension | ||
---|---|---|---|
Child |
Parent |
||
Kurse der Custom 2-Dimension |
Child |
(2) |
|
Parent |
(1) |
In der folgenden Tabelle wurde die Triangulation angegeben und ist nicht mit der Währung des unter- oder übergeordneten Elements identisch.
Tabelle 12-15 Kursbeispiel — Triangulationswährung unterschiedlich
Kurse der Custom 2-Dimension | Kurse der Custom 1-Dimension | |||
---|---|---|---|---|
Child |
Parent |
Triangulation |
||
Kurse der Custom 2-Dimension |
Child |
(2) |
||
Parent |
||||
Triangulation |
(1) |
In der folgenden Tabelle wurde die Triangulation nicht angegeben, und die Anwendungswährung unterscheidet sich von der Währung des unter- und übergeordneten Elements.
Tabelle 12-16 Kursbeispiel — Triangulation nicht angegeben
Kurse der Custom 2-Dimension | Kurse der Custom 1-Dimension | |||
---|---|---|---|---|
Child |
Parent |
Anwendung |
||
Kurse der Custom 2-Dimension |
Child |
(2) |
(4) |
|
Parent |
(1) |
|||
Anwendung |
(3) |
Beispiel
Die Anwendungswährung ist Euro, und Sie müssen eine untergeordnete französische Entity in eine übergeordnete US-Entity umrechnen. Dazu verwenden Sie die in der Entity [None] für C2#EURO eingegebenen Kurse:
Tabelle 12-17 Beispiel für die Funktion Rate
Rate | Eröffnungskurs | Schlusskurs |
---|---|---|
C1#FFR |
0.16000 |
0.16500 |
C1#USD |
1.15862 |
1.15785 |
Die folgende Funktion multipliziert das Anfangsbestandskonto mit der Differenz aus der relativen End- und Anfangsrate. Dies ist beim Berechnen von Verschiebungsanalysen hilfreich, wenn die Umrechnung zwischen der lokalen Währung und der Anwendungswährung nicht konsistent ist.
HS.EXP "A#FXO = A#OPEN * (" & RATE("A#EOP_RATE"," ") & "-" & RATE("A#OPE_RATE"," ") &")"
Wenn der Wert im vorherigen Beispiel im Konto OPEN für das untergeordnete Element FFR 10,000,000 beträgt, ist der Wert im übergeordneten US-Konto FXO USD 44,102 [10,000,000 * (0.165 /1.15785 - 0.16 /1.15862)].
Beispielskript
' sample statement written in the calling routine
SUB TRANSLATE()
HS.TRANS "A#FXO","A#FXO","A#EOP_RATE","" HS.EXP "A#FXO = A#OPEN * (" & RATE("A#EOP_RATE"," ") & "-" & RATE("A#OPE_RATE"," ") &")"
END SUB
' programming of the RATE function
FUNCTION RATE(sRATE,sTRI)
DIM sCCUR, sPCUR, sACUR, bRET, retValue, s3rdCUR DIM i
sRATE = UCASE(sRATE) sTRI = UCASE(sTRI) sCCUR = UCASE(HS.ENTITY.DEFCURRENCY("")) sPCUR = UCASE(HS.VALUE.CURRENCY) sACUR = UCASE(HS.APPSETTINGS.CURRENCY) retValue = 0
' check whether there is a triangulation specified, or if triangulation or application currencies are the same as either parent or child and set up the select case
IF sTRI = sCCUR OR sTRI = sPCUR OR (sTRI = " " AND (sACUR = sCCUR OR sACUR = sPCUR)) THEN
i = 1
ELSEIF sTRI <> " " THEN
i = 2
ELSE
i = 3
END IF
SELECT CASE i
CASE 1
' bRET is a boolean that returns true if data is found. First search the child... ' ...then search the [None] entity
bRET = GETVALUECP(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR)
IF NOT bRET THEN
bRET = GETVALUECP(".E#[None]",retValue,sRATE,sCCUR,sPCUR)
END IF
CASE 2
' use a dynamic parameter name for ease of writing the triangulation checks
s3rdCUR = sTRI
bRET = GETVALUE3(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR,s3rdCUR)
IF NOT bRET THEN
bRET = GETVALUE3(".E#[None]",retValue,sRATE, sCCUR,sPCUR,s3rdCUR)
END IF
CASE 3
' this case is used when the 2nd parameter is blank and is the most complex.
' first check direct rates in the child…
' … then check triangulation against application currency in the child
' then check direct rates in [None].
'… finally check triangulation in [None]
s3rdCUR = sACUR
bRET = GETVALUECP(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR)
IF NOT bRET THEN
bRET = GETVALUE3(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR,s3rdCUR)
IF NOT bRET THEN
bRET = GETVALUECP(".E#[None]",retValue,sRATE,sCCUR,sPCUR)
IF NOT bRET THEN
bRET = GETVALUE3(".E#[None]",retValue, sRATE,sCCUR,sPCUR,s3rdCUR)
END IF
END IF
END IF
END SELECT
IF bRET THEN
RATE = retValue
ELSE
RATE = 1
END IF
END FUNCTION
FUNCTION GETVALUECP(sENTITY,sVALUE,sRATE,sCCUR,sPCUR)
' this sub-function is used when comparing direct rates between child and parent
GETVALUECP = FALSE
' check if data exists for direct rate child to parent. If it does return it. ' if no direct child to parent rate check for indirect parent to child rate... ' return the inverse of the indirect rate.
IF HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & sPCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & sPCUR & sENTITY))
GETVALUECP = TRUE
ELSEIF HS.GETCELL(sRATE & ".C1#" & sPCUR & ".C2#" & sCCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(1 / HS.GETCELL(sRATE & ".C1#" & sPCUR & ".C2#" & sCCUR & sENTITY))
GETVALUECP = TRUE
END IF
END FUNCTION
FUNCTION GETVALUE3(sENTITY,sVALUE,sRATE,sCCUR,sPCUR,s3rdCUR)
' this sub-function is used when triangulating ' check if data exists for direct rate child to triangulation… ' … if it does return the direct relative rate child to parent… ' if no direct child to triangulation rate check for indirect triangulation to child rate… ' … return the inverse of the indirect relative rates.
GETVALUE3 = FALSE
IF HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & s3rdCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & s3rdCUR & sENTITY) / HS.GETCELL(sRATE & ".C1#" & sPCUR & ".C2#" & s3rdCUR & sENTITY))
GETVALUE3 = TRUE
ELSEIF HS.GETCELL(sRATE & ".C1#" & s3rdCUR & ".C2#" & sCCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(HS.GETCELL(sRATE & ".C1#" & s3rdCUR & ".C2#" & sPCUR & sENTITY) / HS.GETCELL(sRATE & ".C1#" & s3rdCUR & ".C2#" & sCCUR & sENTITY))
GETVALUE3 = TRUE
END IF
END FUNCTION