2024-06-15 EARLIER

DAX中的EARLIER函數(shù),它是一個(gè)在迭代或嵌套計(jì)算中非常重要的工具,特別是在處理需要引用外層迭代或計(jì)算上下文中的值的場景時(shí)。EARLIER函數(shù)允許您“回溯”到外部作用域中的某個(gè)值,即EARLIER使用外層上下文檢索值,這在創(chuàng)建復(fù)雜的計(jì)算列、度量值或報(bào)表時(shí)特別有用。

一、基本理解

  • 作用EARLIER函數(shù)用于在DAX表達(dá)式中引用外部作用域(如更外層的迭代或計(jì)算)中某個(gè)列的值。
  • 應(yīng)用場景:當(dāng)您需要在內(nèi)部作用域中基于外部作用域中的值進(jìn)行計(jì)算時(shí),EARLIER函數(shù)非常有用。

二、語法

EARLIER(<column_expression>[, <number>])
  • <column_expression>:需要引用的列表達(dá)式。
  • <number>(可選):指定回溯到哪個(gè)外部作用域。默認(rèn)為1,表示直接外部作用域。如果需要回溯到更外層的作用域,可以增加這個(gè)值。

三、使用示例

假設(shè)您有一個(gè)銷售數(shù)據(jù)表,其中包含產(chǎn)品、日期和銷售額等信息,您想要計(jì)算每個(gè)產(chǎn)品在每個(gè)月的累計(jì)銷售額。在這種情況下,您可以使用EARLIER函數(shù)結(jié)合SUMXFILTER函數(shù)來實(shí)現(xiàn)。

但是,請注意,對于累計(jì)銷售額這樣的計(jì)算,通常不需要直接使用EARLIER函數(shù),因?yàn)镈AX的迭代函數(shù)(如SUMX)已經(jīng)能夠處理這種累積計(jì)算。不過,為了說明EARLIER的用法,我們可以考慮一個(gè)稍微不同的場景,比如計(jì)算每個(gè)產(chǎn)品在當(dāng)前月份之前所有月份的最大銷售額。

// 假設(shè)這不是最直接的用法,但用于說明EARLIER的概念
PreviousMonthsMaxSales = 
VAR CurrentMonth = MONTH('Sales'[Date])
VAR CurrentProduct = 'Sales'[Product]
VAR MaxSalesSoFar = 
    CALCULATE(
        MAX('Sales'[SalesAmount]),
        FILTER(
            ALL('Sales'[Date]),
            YEAR('Sales'[Date]) = YEAR(EARLIER('Sales'[Date])) &&
            MONTH('Sales'[Date]) < EARLIER(CurrentMonth) &&
            'Sales'[Product] = EARLIER(CurrentProduct)
        )
    )
RETURN
    MaxSalesSoFar

注意:上面的公式可能不是計(jì)算每個(gè)產(chǎn)品在當(dāng)前月份之前所有月份的最大銷售額的最直接或最高效方式。在實(shí)際應(yīng)用中,您可能會(huì)使用不同的方法來達(dá)到這個(gè)目的。這里只是為了展示EARLIER函數(shù)在嵌套計(jì)算中的用法。

四、注意事項(xiàng)

  • EARLIER函數(shù)在復(fù)雜的嵌套計(jì)算中非常有用,但也可能導(dǎo)致性能問題,因?yàn)樗枰狣AX引擎在多個(gè)作用域之間傳遞和解析值。
  • 在使用EARLIER函數(shù)時(shí),請確保您完全理解DAX的作用域規(guī)則和迭代行為,以避免產(chǎn)生意外的結(jié)果。
  • 在可能的情況下,嘗試尋找更簡潔、更高效的替代方案,以減少對EARLIER函數(shù)的依賴。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容