跳至主要內容
Adaptive Planning
上次更新時間 :2023-06-23
參照︰公式函數

參照︰公式函數

公式函數分為四類︰數學、邏輯、字串和日期。本主題定義了每個函數和簡短說明。
為求簡化,表格中的說明均使用逗號做為公式的分隔符號。有些瀏覽器設定會要求您以分號做為分隔符號。語法欄會同時顯示兩個版本。

數學函數

數學函數以按鈕的形式提供。例如加號 (+)、減號 (-) 和乘號 (*)。可從
函數 > 數學
取得其他選擇。
請參閱「」 參照︰數學公式函數

邏輯函數

包含在
If
陳述式、基本邏輯函數和比較功能均以按鈕的形式提供。例如,邏輯與 (
AND
)、邏輯或 (
OR
) 和邏輯否定 (
NOT
)。比較包括等於 (
=
)、大於 (
>
)、小於 (
<
),或不等於 (
!=
)。您也可以使用 (
<>
) 表示不相等。
可從
函數 > 邏輯
取得其他選擇︰
語法
說明
Blank()
傳回
Blank
值此值顯示為空白 (而不是零),但就公式而言,評估結果同樣為零。與零不同的是,它會導致
IsBlank()
要傳回的函數
TRUE
,但與零類似,當在工作表或報告上啟用「隱藏空白列」時,可以將其隱藏。
Error ()
造成執行階段評估錯誤。
範例︰
IF(ACCT.EffectiveHeadcount < 0, Error(), ACCT.EffectiveHeadcount+ACCT.AddlHeadcount)
如果有效人員編制小於 0,則傳回錯誤以協助追蹤潛在問題。
If (EXPR, T, F)
If (EXPR; T; F)
傳回數值 (
T
) if 布林運算式 (
EXPR
) 為 True,否則傳回數值 (
F
)。您可以使用布林值和比較運算子來建構布林運算式。
Iff (EXPR, T, F)
Iff (EXPR; T; F)
的「快速」或捷徑
If
函數傳回相同的值
If
。但是,如果條件為 True,則不會評估函數的第三個引數。同樣地,如果條件為 False,則不會評估第二個引數。這表示第二個或第三個引數可能包含錯誤,但結果
Iff
仍有效,因為未評估包含錯誤的引數。
範例︰
  • IFF (this.Version.isActuals, ACCT.TravelExp, ACCT.Personnel.EstimatedTravel)
  • IFF (this.Qtr.PositionOf (this.Month) = 2, 100000, 0)
IsBlank (N)
如果引數為空白或是空的則傳回 True,否則傳回 False。只能用於運算式引數 (
EXPR
) 改為
If
函數
範例︰
If(IsBlank(Row.StartDate),0,1)
Switch (Orig_EXPR, Case1, Case2, ..., Default)
Switch (Orig_EXPR; Case1; Case2; ...; Default)
提供編寫精簡運算式的方法,取代複雜的內嵌式運算式
If
陳述式
  • 第一個引數 (
    Orig_EXPR
    ) 是最先評估的原始運算式 (有時稱為
    控制運算式
    )。
  • 後續引數為
    Cases
    (值和對應的運算式) 可依據與原始運算式的值相符的大小寫而啟用。
  • 您可以定義一或多個個案。每個個案都包含一個值 (
    N
    ) 和運算式 (
    EXPR
    ) (以逗號分隔)。展開的語法如下所示︰
    Switch (Orig_EXPR, N1, EXPR1, N2, EXPR2, ..., Default)
  • 例如,如果原始運算式的值與中定義的值相符。
    Case1
    ,與相關聯的運算式
    Case1
    已傳回。但是,如果原始運算式的值符合
    Case2
    ,與相關聯的運算式
    Case2
    則傳回,依此類推。
  • 如果沒有符合項目,
    Switch
    傳回
    Default
    運算式
  • 所有運算式 (
    EXPR
    ) 中
    Switch
    陳述式的資料類型必須相同 (字串、日期、數字等)。如果運算式的資料類型不同,則會出現以下錯誤︰
    Inconsistent
    切換傳回類型
  • 而不是單一值 (
    N
    ) 為每個個案,您可以指定
    Range(L,U)
    的值,其中
    L
    是范圍的下限,且
    U
    是范圍的上限。例如,某個範圍可能包含若干年
    Range(2014,2017)
    而當原始運算式的值落在該範圍 (含) 時,與該範圍相關聯的運算式便會啟用。
  • 範圍的每個引數都必須是相同的資料類型 (例如,像 7 這樣的數字,像
    Engineering
    或使用現有的建置日期常數
    Date()
    可解析為適當資料類型的函數或運算式 (例如
    this.Version.Name
    ACCT.Rent
    )。
範例︰
  • Switch (ROW.DAY,1,"Sunday",2,"Monday",3,"Tuesday","No match")
    如果
    ROW.DAY
    是 2,則 Monday 是值 2 對應的運算式,因此
    Switch
    結果為星期一。
  • Switch (ToNumber (ROW.CaseQty), Range (0,11), 0, Range (12,24), 1, Range (24,48), 4, 0)
    這第二個範例會傳回0、1 或4,具體取決於
    CaseQty
    選取器

日期和時間函數

日期函數通常與模型工作表
日期
欄結合使用。日期函數僅顯示在模型工作表計算科目中。
日期函數適用於具有「月 > 季 > 年」配置的行事歷。如果您的行事歷使用不同的結構,其中許多函數都會傳回錯誤。請考慮改用此函數︰this.version.positionOf(D.strata)。將 D 取代為採用以下格式的行事曆日期︰yyyy,mm,dd,並將級別取代為您在行事歷中使用的級別。範例︰this.version.positionOf(2024,01,02.week) 傳回 2024 年的第一周。
語法
說明
D.Month.NumberOfDays
傳回日期所在月份的天數
D
發生
.
D.Year.PositionOf(D.Month).
傳回日期所在會計年度的月份
D
發生。
D.Year.PositionOf(D.Qtr)
傳回日期所在會計年度的季度
D
發生。
(Date).
stratum_code
傳回
Timeperiod
要求的級別類型,其包含 (single, Gregorian) 日期。任何日期都可做為級別代碼的基礎。
範例︰
ToDate
(2016,8,5).Qtr
傳回包含 2016 年 8 月 5 日的會計歷季度。
Day (D)
傳回 date (
D
)。
DaysInMonth (D)
傳回日期 D 發生月份的天數。可能會傳回自訂行事曆的錯誤或不正確的值。使用
D.Month.NumberOfDays
FiscalMonth (D)
傳回日期 (
D
)。可能會傳回自訂行事曆的錯誤。使用
D.Year.PositionOf(D.Month).
FiscalQuarter (D)
傳回日期 (
D
)。可能會傳回自訂行事曆的錯誤。使用
D.Year.PositionOf(D.Qtr).
FiscalYear (D)
傳回日期 (
D
)。可能會傳回自訂行事曆的錯誤。嘗試使用與年份完全相符的數字來編碼您的年份,並使用
ToNumber
(D.Year.code).
Month (D)
傳回日期 (
D
)。
Quarter (D)
傳回日期 (
D
)。這可能與您公司的會計季度不同 (見下文)。
this.Version.PositionOf(D.Month)
傳回數字,該數字表示日期 D 發生的版本月份 (第一個月 =
0
)。如果日期 D 較版本開始時間早,則此數字可以為負數。
this.Version.PositionOf(D.Year)
傳回數字,該數字表示日期 D 發生的版本年份 (第一年 =
0
)。如果日期 D 較版本開始時間早,則此數字可以為負數。
TimeFraction (D1, D2, D, Dx)
TimeFraction (D1; D2; D; Dx)
傳回目前月份中介於開始日期 (
D1
) 和結束日期 (
D2
)。如果是選填日期 (
D
) 已指定,使用月份
D
發生,而不是目前的月份。如果選填固定天數參數 (
Dx
),則覆寫中的時段
D
與數值。
已配置但未配置自訂行事歷的實例可使用
MonthFraction
而不是
TimeFraction
ToDate (Y, M, D)
ToDate (Y; M; D)
傳回給定年份指定的日期 (
Y
)、月份 (
M
) 和天 (
D
)。如果
D
已省略,
15
已使用。傳回的值可在其他採用日期的函數中做為引數。
VersionMonth (D)
傳回數字,該數字表示日期 (
D
) 發生時 (第一個月 =
0
)。如果日期 (
D
) 早於版本的開始時間。
可能會傳回自訂行事曆的錯誤。使用
this.Version.PositionOf(D.Month).
Version.PositionOf (timeperiod)
傳回提供的時段在該版本整個跨度內的相對順序。版本中的第一個時段從 1 開始,如果時段較版本開始時間早,則順序數字可以為負數。此函數也適用於版本結束時間後的時段。
VersionYear (D)
傳回一個數字,該數字表示日期 (
D
) 發生時 (第一年 =
0
)。如果日期 (
D
) 早於版本的開始時間。
可能會傳回自訂行事曆的錯誤。使用
this.Version.PositionOf(D.Year)
Year (D)
傳回日期 (
D
) 與是否使用自訂行事歷無關。

字串函數

語法
說明
Concat (text1, text2, ...)
Concat (text1; text2; ...)
藉由聯結兩個或多個文字字串,傳回串連字串。
範例︰
Concat ("hello", "world")
傳回 "
helloworld"
Length (text)
傳回文字字串中的字元數。
範例︰
Length ("Now, is the winter of our discontent. Made glorious summer by this son or York.")
退貨
79
Search (source_text, search_text)
Search (source_text; search_text)
傳回的開始位置
search_text
source_text
。退貨
0
如果
search_text
找不到。搜尋不區分大小寫。
範例︰
Search ("Now is the winter of our discontent.", "Winter")
退貨
12
Search ("Now is the winter of our discontent.", "Summer")
退貨
0.
Substring (source_text, start_position, length)
Substring (source_text; start_position; length)
傳回包含在中找到的字元的文字字串
source_text
開始於
start_position
(位置
1
是文字字串的第一個字元),且適用於
length
(或直到文字字串的結尾,以先到者為準)。
選取一個
start_position
0
或以下將視為職位
1
。選取的長度為
0
小於或等於以下的長度會被視為
0
並傳回空字串。選取一個
start_position
晚於
source_text
傳回空字串。
ToNumber (text)
將表示數字的文字字串轉換成其數值。將轉換字串的前置部分,直到找到非數字字元為止。如果第一個字元不是數字,則會產生錯誤。
範例︰
ToNumber ("7")
退貨
7
ToNumber ("2017-12-31")
傳回 2017 (數字)。
ToNumber ("Sample")
傳回錯誤。

範例

以下是人員模型工作表中的人員編制公式。這是函數組合方式的絕佳範例。此公式會傳回二進位結果︰
1
0
If(this.Version.PositionOf(this.Month) >= this.Version.PositionOf(ROW.StartDate.Month) # if this month is after the person's start date and (isblank(ROW.EndDate) # and either they have no termination date or this.Version.PositionOf(this.Month) <= Version.PositionOf(ROW.EndDate.Month)), # or the current month is before termination date 1, # return 1 for their headcount in this month 0) # otherwise, return 0