銷售需求丨活動月環(huán)比(修訂)

在實際的生活中,我們使用最頻繁的一個概念就是環(huán)比,日環(huán)比、周環(huán)比、月環(huán)比等等。但是在實際需求中,還有一些特殊的環(huán)比需求:

BOSS:那個誰,對,就是你,給我做一個任意月份的環(huán)比。

白茶:啥??什么叫任意月份?

BOSS:就你這智商,可別放棄治療!我要看六月份和九月份的環(huán)比,同時能隨意切換對比月份的!能不能做!

白茶:......(#¥%&%#@???)能!

...
...
...

先來看本期的示例文件:

一份產(chǎn)品表。

一份分店表(雖然這期沒用上)。

一份銷售表。這些就是本期采用的示例源文件。

將其導(dǎo)入到PowerBI中,輸入如下代碼,生成日期表:

日期表 =
GENERATE (
    CALENDAR ( MIN ( '銷售明細(xì)'[銷售日期] ), //注意:這里需要替換成你自己的數(shù)據(jù)
        MAX ( '銷售明細(xì)'[銷售日期] ) ),
    //注意:這里需要替換成你自己的數(shù)據(jù)
    VAR DA = [Date]
    VAR YEAR =
        YEAR ( DA )
    VAR QUARTER =
        "季度" & FORMAT ( DA, "Q" )
    VAR MONTE =
        FORMAT ( DA, "MM" ) & "月"
    VAR DAY =
        DAY ( DA )
    VAR WEEKID =
        WEEKDAY ( DA, 2 )
    RETURN
        ROW (
            "年度", YEAR,
            "季度", QUARTER,
            "月份", MONTE,
            "日", DAY,
            "年度季度", YEAR & QUARTER,
            "年度月份", YEAR & MONTE,
            "星期", WEEKID
        )
)

結(jié)果如下:

編寫基本的代碼,求出每日的銷售金額:

銷售金額 =
SUMX ( '銷售明細(xì)', '銷售明細(xì)'[銷售數(shù)量] * RELATED ( '產(chǎn)品表'[銷售價] ) )

結(jié)果如下:

到這里,我們的準(zhǔn)備工作告一段落。

思考一下代碼的編寫:

首先呢,需要有一個可以任意切換的維度,可以隨意切換月份。

其次,要保證呈現(xiàn)的結(jié)果隨著維度范圍的切換,結(jié)果也跟著變化。

添加一個觀測的日期維度:

維度表 =
GENERATE (
    CALENDAR ( MIN ( '銷售明細(xì)'[銷售日期] ), //注意:這里需要替換成你自己的數(shù)據(jù)
        MAX ( '銷售明細(xì)'[銷售日期] ) ),
    //注意:這里需要替換成你自己的數(shù)據(jù)
    VAR DA = [Date]
    VAR YEAR =
        YEAR ( DA )
    VAR MONTE =
        FORMAT ( DA, "MM" ) & "月"
    RETURN
        ROW ( "年度", YEAR, "月份", MONTE, "年度月份", YEAR & MONTE )
)

這個表不要與其他表建立模型關(guān)系,結(jié)果如下:

編寫如下代碼:

本期 =
VAR SQ =
    MAX ( '維度表'[年度月份] )
VAR DQ =
    CALCULATE ( MAX ( '維度表'[年度月份] ), '維度表'[年度月份] = SQ, ALLSELECTED ( '維度表' ) )
RETURN
    CALCULATE ( [銷售金額], '日期表'[年度月份] = DQ )

放在矩陣中查看:

可以看得出來,大體上結(jié)果是沒啥問題的,但是這里不太需要這個小計和總計,因為沒有啥意義啊。優(yōu)化代碼如下:

本期 =
VAR SQ =
    MAX ( '維度表'[年度月份] )
VAR DQ =
    CALCULATE ( MAX ( '維度表'[年度月份] ), '維度表'[年度月份] = SQ, ALLSELECTED ( '維度表' ) )
RETURN
    IF (
        AND ( HASONEFILTER ( '維度表'[年度] ), HASONEFILTER ( '維度表'[月份] ) ),
        CALCULATE ( [銷售金額], '日期表'[年度月份] = DQ ),
        BLANK ()
    )

結(jié)果:

這次去掉總計的顯示了,完美!解釋一下代碼含義:

SQ是利用VAR將最大的[年度月份]定義為一個可以被比較的常量。

DQ外圍的CALCULATE是將行上下文轉(zhuǎn)換為篩選上下文;利用MAX匹配上下文計算環(huán)境,同時受限于ALLSELECTED函數(shù),計算范圍始終都處于切片器的篩選環(huán)境下。

IF+AND進行判斷去掉總計,CALCULATE計算符合當(dāng)前篩選上下文的[銷售金額]。

那么本期寫完了,編寫上期代碼:

上期 =
VAR SQ =
    MAX ( '維度表'[年度月份] )
VAR DQ =
    CALCULATE (
        MAX ( '維度表'[年度月份] ),
        FILTER ( ALLSELECTED ( '維度表' ), '維度表'[年度月份] < SQ )
    )
RETURN
    IF (
        AND ( HASONEFILTER ( '維度表'[年度] ), HASONEFILTER ( '維度表'[月份] ) ),
        CALCULATE ( [銷售金額], '日期表'[年度月份] = DQ ),
        BLANK ()
    )

將結(jié)果放在矩陣中對比:

結(jié)果顯示的沒有任何問題,第二個DQ利用CALCULATE限定范圍為小于當(dāng)前篩選[年度月份]的上一期,同時上一期也屬于篩選范圍。

最后,編寫環(huán)比代碼:

環(huán)比 =
DIVIDE ( [本期] - [上期], [上期] )

最終結(jié)果如下:

小伙伴們?GET了么?

白茶會不定期的分享一些函數(shù)卡片

(文件在知識星球[PowerBI丨需求圈])

這里是白茶,一個PowerBI的初學(xué)者。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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