指標(biāo)管理靈魂提問(wèn)-原子指標(biāo)要支持開窗函數(shù)嗎?
當(dāng)你面對(duì)“原子指標(biāo)需要支持開窗函數(shù)嗎”這個(gè)問(wèn)題時(shí),你會(huì)如何回答?這篇文章里,作者結(jié)合案例和過(guò)往經(jīng)驗(yàn),對(duì)開窗、指標(biāo)管理、原子指標(biāo)等概念及相關(guān)問(wèn)題做了解讀,不妨來(lái)看一下。
開局一個(gè)靈魂提問(wèn):原子指標(biāo)需要支持開窗函數(shù)嗎?
假如,你服務(wù)的企業(yè)在做數(shù)倉(cāng)重構(gòu),給你機(jī)會(huì)嘗試One Data指標(biāo)管理的落地。你還是參照競(jìng)品,設(shè)計(jì)了指標(biāo)管理,能對(duì)指標(biāo)進(jìn)行各種計(jì)算邏輯的定義。 提問(wèn):原子指標(biāo)的口徑定義里,能不能也支持支持開窗函數(shù)。
這個(gè)問(wèn)題,你又怎么看?來(lái),思考3秒,3…2…1,給出你的答案。你是不是又開始想,「什么是原子指標(biāo)」這個(gè)問(wèn)題了?如果對(duì)技術(shù)不熟悉,可能還會(huì)問(wèn),什么是開窗函數(shù)?接下來(lái)的內(nèi)容,將會(huì)圍繞這主題展開。
- 問(wèn)題起源什么是開窗?
- 為什么要開窗?
- 回看:到底要不要支持開窗
- 問(wèn)題的本質(zhì):理解指標(biāo)、表、以及指標(biāo)和表的關(guān)系
本文將會(huì)結(jié)合生動(dòng)的案例和深入的自我思考,帶你從一個(gè)小問(wèn)題深入理解指標(biāo)管理,希望你能看到最后~
一、問(wèn)題起源
當(dāng)時(shí)公司在做數(shù)倉(cāng)重構(gòu),正好給我機(jī)會(huì)機(jī)嘗試One Data的落地。但我也沒(méi)經(jīng)驗(yàn),于是參考了很多資料和競(jìng)品,然后對(duì)照著競(jìng)品照貓畫虎弄了指標(biāo)管理的設(shè)計(jì),就像華為 DataArtsStudio 的指標(biāo)管理這樣:
數(shù)倉(cāng)開發(fā)同事看了這個(gè)原子指標(biāo)管理的界面,然后問(wèn)了上文提到的問(wèn)題:原子指標(biāo)能不能支持開窗函數(shù)。我反問(wèn)了下,為啥要支持開窗?同事當(dāng)時(shí)說(shuō)的原話我不太記得了,大概說(shuō)的是:某些指標(biāo)是要開窗統(tǒng)計(jì)排名。比如(假設(shè)),教育場(chǎng)景里,某個(gè)報(bào)表里有這兩個(gè)指標(biāo)。
銷售金額TOP1課程,很像是用來(lái)修飾指標(biāo)的前綴(修飾詞),但又是基于對(duì)指標(biāo)的排序而來(lái)的。
已知,原子指標(biāo)要定義指標(biāo)取數(shù)的邏輯,開窗函數(shù)是一種計(jì)算方式,那么,原子指標(biāo)的定義里面,是否要囊括對(duì)開窗函數(shù)的定義呢?我轉(zhuǎn)身看競(jìng)品(DataArts Studio_新建原子指標(biāo))找答案,但是競(jìng)品沒(méi)支持。
不僅僅華為不支持,其他好幾個(gè)大廠競(jìng)品都沒(méi)涉及到這點(diǎn)。完蛋,我好像進(jìn)入一個(gè)沒(méi)人涉足的無(wú)人區(qū)了,咋搞?當(dāng)然,我可以很簡(jiǎn)單做個(gè)決策:相信大廠,照抄。并且以此說(shuō)服同事,我可以說(shuō),大廠的好多的競(jìng)品沒(méi)做,肯定是有道理。但是到底為什么競(jìng)品不支持開窗呢?我始終不明白。
我了解了實(shí)際情況,管理、推薦的場(chǎng)景里,確實(shí)有些指標(biāo)是排名性質(zhì)的,看似這個(gè)訴求也合理。而且,排名方面,還可以繼續(xù)演化,以直播場(chǎng)景為例。比如按照多個(gè)指標(biāo)排名后,最終分出來(lái)主播的級(jí)別,然后日常要看S、A、B級(jí)主播帶貨金額占總體GMV的比例。
在企業(yè)里,你可能會(huì)看到兩種狀態(tài)的表格,描述的業(yè)務(wù)結(jié)果是一樣的,但是表頭、行數(shù)、列數(shù)有一些差異(差異就在于,修飾詞是否單獨(dú)列出來(lái)作為維度,以后有機(jī)會(huì)再講)到底要不要支持呢?要不要探究下呢?理解開窗,才能知道到底要不要。
二、什么是開窗,為什么要開窗?
我們?nèi)搜鬯吹降膬?nèi)容,都是光照到物體上的反射,打開窗戶,外面的光才能照進(jìn)來(lái)。
開窗的大小,決定了進(jìn)入到窗內(nèi)的光的多少,也影響了窗內(nèi)人獲取信息的量。
人所看到的內(nèi)容,取決于看的視角,從不同的角度看,信息也不同。
還記得小學(xué)課文里的楊桃嗎?有的角度看楊桃,像個(gè)五角星。再比如,蘇軾在《題西林壁》中寫道:橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同。不識(shí)廬山真面目,只緣身在此山中”。
假如,我們待在一個(gè)房間內(nèi),我們認(rèn)為窗是相對(duì)靜止的。調(diào)整我們的視角,能看到不同的內(nèi)容,可以理解為從不同的角度(維度)去分析事物。除此以外,也有移動(dòng)的窗。
就如圖片所示,當(dāng)我們坐在火車上,視角固定,窗戶常開,雖然你人不動(dòng),但是你會(huì)看到不斷變化的內(nèi)容,不同物體的光會(huì)透過(guò)窗戶(信息)不斷映入你的眼睛。有了這個(gè)基礎(chǔ),我們?cè)偃ダ斫鈹?shù)據(jù)世界的開窗函數(shù)。
開窗函數(shù)是一種在數(shù)據(jù)庫(kù)查詢中使用的強(qiáng)大工具,它能夠在一個(gè)數(shù)據(jù)集上進(jìn)行復(fù)雜的序列比較和計(jì)算。
在SQL中,開窗函數(shù)可以用于各種計(jì)算,包括聚合運(yùn)算、排名、移動(dòng)平均等,而不改變返回行的數(shù)量。以下是一個(gè)簡(jiǎn)單的例子:假設(shè)我們有一張名為sales的表格,其中包含了每天的銷售數(shù)據(jù),該表具有以下結(jié)構(gòu):
- sale_date:銷售日期
- amount:當(dāng)日銷售金額
如果我們想計(jì)算過(guò)去7天的滾動(dòng)平均銷售額,則可以用如下SQL查詢:
SELECT sale_date, amount, AVG(amount) OVER (ORDER BY sale_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS rolling_avg_sales FROM sales;
這個(gè)查詢中的關(guān)鍵部分是開窗函數(shù)AVG(amount) OVER (…):
- OVER子句定義了窗口的規(guī)則。
- ORDER BY sale_date表示窗口以sale_date進(jìn)行排序。
- ROWS BETWEEN 6 PRECEDING AND CURRENT ROW指定了窗口的范圍是當(dāng)前行以及之前的6行,總共覆蓋了7天的數(shù)據(jù)。
執(zhí)行這個(gè)查詢后,每一行都會(huì)新增一個(gè)rolling_avg_sales字段,表示從當(dāng)前行開始往前數(shù)7天內(nèi)(包括當(dāng)前行)的平均銷售額。備注:
不同的SQL數(shù)據(jù)庫(kù)管理系統(tǒng)在處理邊界情況(例如,當(dāng)沒(méi)有足夠的數(shù)據(jù)計(jì)算七天平均時(shí))的默認(rèn)行為可能略有不同。
然后,我們結(jié)合案例來(lái)看看開窗函數(shù)定義的指標(biāo)。
假如,我們是一家網(wǎng)店的店主,本月新上了一個(gè)品類,然后系統(tǒng)記錄了該品類1-20號(hào)的當(dāng)天銷售金額,也統(tǒng)計(jì)了環(huán)比昨天的指標(biāo)。如下左邊。我們也基于這兩個(gè)指標(biāo)制作對(duì)應(yīng)的業(yè)績(jī)變化圖。
而當(dāng)我們感受到2次比較大的業(yè)績(jī)下滑,在第3次業(yè)績(jī)下滑的時(shí)候,要不要進(jìn)行調(diào)整銷售策略呢?調(diào)整的依據(jù)是什么呢?尤其14號(hào)的業(yè)績(jī)剛剛有突破,而15號(hào)又猛烈下滑。
這個(gè)時(shí)候,我們就可以用開窗函數(shù)來(lái)看平均的銷售情況,而不是被某一天或兩天的異常高低銷售額所影響,我們可以使用7天滾動(dòng)平均銷售金額這個(gè)指標(biāo)(如下圖)
結(jié)合7天滾動(dòng)平均銷售金額來(lái)看,雖然業(yè)績(jī)有起伏波動(dòng),尤其是紅色框中的部分,滾動(dòng)平均銷售金額的波動(dòng)并沒(méi)有那么大,且在小幅下降后便逐步上升如果在原子指標(biāo)定義中需要考慮時(shí)間序列分析、累積計(jì)算或者比較不同時(shí)期的數(shù)據(jù),那么開窗函數(shù)就非常有必要。
當(dāng)然,在真實(shí)的應(yīng)用場(chǎng)景中,我們還需要考慮到特殊情況,比如業(yè)務(wù)調(diào)整、節(jié)假日或者其他非營(yíng)業(yè)日沒(méi)有銷售數(shù)據(jù)的情況。
三、回看,到底要不要支持開窗?
開窗有意義嗎?有。那系統(tǒng)層面能支持開窗嗎?能。要支持開窗嗎?等等,再想想,其實(shí)還有一個(gè)問(wèn)題。
為什么看到很多競(jìng)品系統(tǒng),在定義原子指標(biāo)計(jì)算邏輯時(shí),都要求先指定對(duì)應(yīng)的來(lái)源表呢?而且一般都是事實(shí)表,這當(dāng)中有什么關(guān)系嗎?
正好,在上篇文章里講到過(guò)這個(gè)問(wèn)題:數(shù)倉(cāng)分層后,原子指標(biāo)如何指定來(lái)源事實(shí)表。
當(dāng)中說(shuō)道:我們的目標(biāo)重點(diǎn)是保持清晰的指標(biāo)定義和一致的取數(shù)口徑,即使在不同的聚合層級(jí)之間,銷售金額指標(biāo)的計(jì)算規(guī)則也應(yīng)該是一致的。
等等,如果有兩個(gè)表,一個(gè)原始表,一個(gè)開窗的結(jié)果表,那是不是可以基于開窗處理后的結(jié)果表來(lái)定義指標(biāo)呢?嗯,把這種開窗的計(jì)算邏輯前置到表的ETL腳本里去,原子指標(biāo)這層,屏蔽掉這個(gè)邏輯。
我們?cè)倏纯撮_窗函數(shù),到底是在做什么操作?
在上面的案例里,你也看到了,在某些日期內(nèi)做開窗計(jì)算,是沒(méi)有結(jié)果的。
當(dāng)數(shù)據(jù)缺漏時(shí),就像開的窗戶對(duì)著一塊黑洞。
因?yàn)榇皯粼O(shè)定的范圍很大,但是數(shù)據(jù)的范圍沒(méi)那么大(就好像,開的窗戶里有一部分對(duì)著黑洞,光壓根從黑洞里跑不出來(lái),那肯定看不到。
而且,案例中開窗是要按照設(shè)定的窗口范圍取一些歷史數(shù)據(jù)計(jì)算的,無(wú)意間就利用時(shí)間修飾了指標(biāo)。時(shí)間是什么?可以理解是維度,比如日期,也可以理解是時(shí)間周期,近1天、近7天。
其實(shí)環(huán)比昨日也涉及到了時(shí)間周期。還記得之前文章指標(biāo)管理必知的真相:訂單事實(shí)表里沒(méi)有原子指標(biāo)引用的公式嗎?派生指標(biāo) = 原子指標(biāo) + 時(shí)間周期 + 修飾詞
再問(wèn)問(wèn)自己:開窗函數(shù)定義的指標(biāo)是原子指標(biāo)嗎?誒,好像不是。
這時(shí)候,我們?cè)倩乜炊x,在指標(biāo)管理中,原子指標(biāo)通常指的是最基本、不可再分的數(shù)據(jù)點(diǎn),這些數(shù)據(jù)點(diǎn)用來(lái)構(gòu)建更復(fù)雜的計(jì)算指標(biāo)或衍生指標(biāo)。
例如,日銷售額、用戶訪問(wèn)量等都可以被看作是原子指標(biāo)。開窗的指標(biāo),相當(dāng)于是借用有時(shí)間含義的指標(biāo)進(jìn)行了口徑定義,且只能是在時(shí)間往前推移的情況下(也就是有了時(shí)間周期的情況下),才能有正確的計(jì)算結(jié)果。
故而,開窗函數(shù)修飾的指標(biāo),不是原子指標(biāo)。原子指標(biāo),不應(yīng)該支持開窗函數(shù)。
四、問(wèn)題的本質(zhì):理解指標(biāo)、表、以及指標(biāo)和表的關(guān)系
1)深入理解不可再分
“不可再分”的原子指標(biāo),指的是在特定的業(yè)務(wù)情境下,該指標(biāo)已經(jīng)是最簡(jiǎn)單、最基礎(chǔ)的數(shù)據(jù)度量,無(wú)法被進(jìn)一步分解為更小的單位或子指標(biāo)。窗口這個(gè)詞,其實(shí)不能完全表達(dá)含義,時(shí)間列車在滾滾向前,我們哪怕只從固定的視角看數(shù)據(jù),但是這個(gè)數(shù)據(jù)也一直在變化。
例如,在銷售分析中,“日銷售金額”可以看作是一個(gè)原子指標(biāo)。它由當(dāng)天所有銷售交易的金額總和組成,自身并不會(huì)進(jìn)一步分解為更細(xì)的指標(biāo)。當(dāng)然,“日銷售金額”可能來(lái)源于多個(gè)“單筆交易金額”,但在日銷售額這個(gè)層面上,我們通常把它視為一個(gè)整體,作為分析的基點(diǎn)。
2)深入理解粒度
分析的基點(diǎn),這就是為什么數(shù)據(jù)倉(cāng)庫(kù)在選定業(yè)務(wù)過(guò)程后,接下來(lái)就是聲明粒度的原因??梢曰乜催@篇文章:數(shù)倉(cāng)避坑-整明白懂粒度如果一個(gè)公司想要分析產(chǎn)品銷售數(shù)據(jù),那么“單個(gè)產(chǎn)品的銷售數(shù)量”也可以被認(rèn)為是一個(gè)原子指標(biāo),因?yàn)樗砹俗罨镜匿N售單位計(jì)數(shù),不涉及到更深層次的拆分。
這樣的原子指標(biāo)有助于建立一個(gè)清晰、簡(jiǎn)潔的數(shù)據(jù)體系,它們是構(gòu)建復(fù)雜報(bào)告、儀表板和高級(jí)分析(如預(yù)測(cè)模型)所依賴的基石。通過(guò)對(duì)多個(gè)原子指標(biāo)進(jìn)行組合和運(yùn)算,可以創(chuàng)建復(fù)雜的衍生指標(biāo),如銷售增長(zhǎng)率、用戶留存率等。
3)脫離具體的表談?wù)撝笜?biāo),是沒(méi)有意義的
指標(biāo)是為了衡量、跟蹤或比較特定現(xiàn)象或結(jié)果而設(shè)定的具體數(shù)值或標(biāo)準(zhǔn)。離開具體的表定義指標(biāo)和取數(shù)口徑,一個(gè)指標(biāo)可能就會(huì)失去其原有的明確含義和測(cè)量?jī)r(jià)值。
如果沒(méi)有了明確的定義和取數(shù)口徑,就很難保證數(shù)據(jù)的一致性和準(zhǔn)確性,進(jìn)而影響數(shù)據(jù)分析和決策的有效性。
4)指標(biāo)定義的問(wèn)題,可以通過(guò)增加分層表來(lái)解決
當(dāng)我們要依賴其他指標(biāo)進(jìn)行計(jì)算,我們可以先定義好事實(shí)表,加工好對(duì)應(yīng)的指標(biāo),然后從定義好的事實(shí)表里面取值。
這樣也有個(gè)好處:利用表對(duì)指標(biāo)的依賴邏輯進(jìn)行一個(gè)解耦。不至于讓指標(biāo)的計(jì)算口徑定義太過(guò)于復(fù)雜,比如,我們看某個(gè)指標(biāo),能知道這個(gè)指標(biāo)是從某個(gè)表的某個(gè)字段基于什么方式進(jìn)行計(jì)算,就可以了。至于說(shuō),依賴的表是怎么加工出來(lái),數(shù)據(jù)是否準(zhǔn)確,那是上一層定義的事情了。
5)表分層之后數(shù)據(jù)的一致性問(wèn)題,需要質(zhì)量監(jiān)測(cè)來(lái)解決
緊接問(wèn)題4,開窗是要開的,我們?cè)谥笜?biāo)所依賴的表的ETL里定義好,算好即可。如果粒度有很多,最粗粒度的指標(biāo)肯定是有多種方式來(lái)匯聚出來(lái)的。比如,年度收入,可以從小時(shí)收入、天收入、周收入、月收入?yún)R總出來(lái)。
以終為始來(lái)看,咱也不管是咋匯聚的了,咱就只要求:最終出來(lái)的結(jié)果是對(duì)的,多種方式產(chǎn)出的結(jié)果是一致的(都對(duì)?。?。這,就是數(shù)據(jù)質(zhì)量里的準(zhǔn)確性、一致性。
以上,感謝閱讀~
專欄作家
Lee,公眾號(hào):數(shù)據(jù)產(chǎn)品小lee,人人都是產(chǎn)品經(jīng)理專欄作家。關(guān)注直播、短視頻和文娛領(lǐng)域、擅長(zhǎng)數(shù)據(jù)架構(gòu)、CDP及數(shù)據(jù)治理相關(guān)工作。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自 Unsplash,基于 CC0 協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
- 目前還沒(méi)評(píng)論,等你發(fā)揮!