一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

何時(shí)使用SUM()與SUMX()

 鄭學(xué)甫360 2019-07-20

概述

SUM()是一個(gè)聚合函數(shù)。在應(yīng)用將影響公式的所有過濾器后,它會(huì)將您指定的單個(gè)列中的所有值相加。SUM()不知道行的存在(它不能逐行求值) - 它所能做的就是在應(yīng)用過濾器之后將所有內(nèi)容添加到它所呈現(xiàn)的單列中。

SUMX()是一個(gè)迭代器函數(shù)。它應(yīng)用于一個(gè)表,一行一行地應(yīng)用所有過濾器后完成求值。  SUMX()具有表中行的感知,因此可以引用每行與表中任何列的交集。SUMX()可以在單個(gè)列上運(yùn)行,但也可以在多個(gè)列上運(yùn)行 - 因?yàn)樗哂兄鹦泄ぷ鞯哪芰Α?/p>

綜上所述

·SUM()在單個(gè)列上運(yùn)行,并且不知道列中的各個(gè)行(沒有逐行求值)。

·SUMX()可以對(duì)表中的多個(gè)列進(jìn)行操作,并且可以在這些列中完成逐行求值。

這兩個(gè)功能可以最終給你同樣的結(jié)果(也許是,也許不是)。它們通常在矩陣給出相同的結(jié)果,但通常在視覺的子總數(shù)和總計(jì)部分中給出不同的結(jié)果。

SUM()函數(shù)

語(yǔ)法:= SUM(<列名>)

示例:總銷售額= SUM(銷售表[銷售額])

SUM()函數(shù)在單個(gè)數(shù)據(jù)列上運(yùn)行,以聚合該單個(gè)列中的所有數(shù)據(jù)并應(yīng)用當(dāng)前過濾器 - 首先過濾,然后評(píng)估第二個(gè)。

SUMX()函數(shù)

語(yǔ)法:= SUMX(<Table>,<expression>)

示例:總銷售額SUMX = SUMX(銷售表,銷售表[數(shù)量] *銷售表[單位價(jià)格])

SUMX()將迭代第一個(gè)參數(shù)中指定的表,一次一行,并完成第二個(gè)參數(shù)中指定的計(jì)算,例如數(shù)量x單位價(jià)格,如上例所示,當(dāng)前過濾器已應(yīng)用(即仍然首先過濾,求值第二)。一旦它對(duì)指定表中的每一行(在應(yīng)用當(dāng)前過濾器之后)完成此操作,它就會(huì)累計(jì)所有逐行計(jì)算的總和以獲得總計(jì)。結(jié)果返回此總數(shù)。

那么我應(yīng)該使用哪一個(gè)呢?

您使用哪種方式取決于您的個(gè)人偏好和數(shù)據(jù)結(jié)構(gòu)。我們來看幾個(gè)例子。

1數(shù)量和每單位價(jià)格

2延期金額

3總計(jì)不要加起來

1.數(shù)量和價(jià)格

如果您的銷售表包含數(shù)量列和“單價(jià)”的另一列(如上所示),那么您必須將“數(shù)量”乘以“單價(jià)”以便獲得總銷售額。將總量SUM(數(shù)量)加起來并將其乘以平均單價(jià)是不合適的,因?yàn)檫@將給出錯(cuò)誤的答案。

如果您的數(shù)據(jù)以這種方式構(gòu)建(如上圖所示),那么您只需要使用SUMX() - 這就是迭代器函數(shù)的設(shè)計(jì)目的。這是公式的樣子。

總銷售額1 = SUMX(銷售表,銷售表[數(shù)量] *銷售表[單價(jià)])

2.延期金額

如果您的數(shù)據(jù)包含具有該行項(xiàng)目的擴(kuò)展總銷售額的單個(gè)列(即,它沒有每單位的數(shù)量和價(jià)格),則可以使用 SUM()來累加值。

 

總銷售額2 = SUM(銷售表[銷售額])

在此示例中不需要迭代器,因?yàn)樵谶@種情況下,它只是跨單個(gè)列的簡(jiǎn)單計(jì)算,并且不需要逐行執(zhí)行。但請(qǐng)注意,你仍然可以使用SUMX()(如下所示),它會(huì)給你相同的答案。

總銷售額2替代= SUMX(銷售表,銷售表[銷售額])

并且使用SUMX()的替代公式在性能和效率上與SUM()是相同的.

3.總計(jì)不要加起來

當(dāng)你必須使用不那么明顯的SUMX()時(shí),還有另一個(gè)用例。當(dāng)您遇到總計(jì)不按需要/期望加起來的問題時(shí),您將需要使用像SUMX這樣的迭代器來糾正問題。我已經(jīng)創(chuàng)建了一個(gè)小樣本數(shù)據(jù)表來解釋。

 

上表顯示了4位客戶,他們每次購(gòu)物時(shí)平均花費(fèi)的金額以及他們購(gòu)物的次數(shù)。如果我將這些數(shù)據(jù)加載到Power BI中,然后嘗試使用聚合器函數(shù)來查找所有客戶的平均支出以及花費(fèi)的總金額,我會(huì)在總行中得到錯(cuò)誤的答案(如下所示)。

 

以下是上述措施:

總訪問次數(shù)= SUM(購(gòu)物表[訪問次數(shù)]) - 該公式的總數(shù)是正確的。

每次訪問平均花費(fèi)=AVERAGE(購(gòu)物表 [每次訪問花費(fèi)]) - 這里的總數(shù)是錯(cuò)誤的。

總支出= [每次訪問費(fèi)用] * [訪問總次數(shù)] - 這里的總數(shù)也是錯(cuò)誤的。

第一個(gè)度量[訪問總數(shù)]是正確的,因?yàn)閿?shù)據(jù)是加性的,但其他2個(gè)度量給出了錯(cuò)誤的結(jié)果。這是一個(gè)典型的情況,你無法在總體水平上對(duì)平均值進(jìn)行乘法運(yùn)算。鑒于我開始使用的樣本數(shù)據(jù),計(jì)算正確答案的唯一方法是為表中的每個(gè)客戶完成逐行評(píng)估,如下所示。

 

在上面的第二個(gè)表中,我編寫了一個(gè)SUMX()來首先創(chuàng)建Total Spent SUMX(逐行)。只有這樣我才能計(jì)算每次訪問的平均花費(fèi)作為最終公式。

總訪問次數(shù)= SUM(購(gòu)物表[訪問次數(shù)])

總花費(fèi)= SUMX(購(gòu)物表,購(gòu)物表 [每次訪問花費(fèi)] *購(gòu)物表[訪問次數(shù)])

每次訪問平均花費(fèi)= DIVIDE([總花費(fèi)SUMX], [總訪問量])

在第二種情況下,SUMX正在一次一行地處理數(shù)據(jù)表并正確計(jì)算結(jié)果,即使對(duì)于表底部的總行也是如此。

性能影響存儲(chǔ)引擎

我要談的最后一件事是使用SUM與SUMX的性能影響。鑒于SUMX是一個(gè)迭代器,您可能認(rèn)為SUMX本質(zhì)上是低效的。一般來說,這不是真的,因?yàn)檐浖呀?jīng)過優(yōu)化以有效地處理場(chǎng)景。話雖如此,糟糕的DAX肯定會(huì)導(dǎo)致SUMX效率低下。

Power Pivot有2個(gè)計(jì)算引擎,存儲(chǔ)引擎(SE)和公式引擎(FE)。SE更快,多線程和緩存。FE速度較慢,單線程且未緩存。這本身就是一個(gè)復(fù)雜的主題,我將只討論表面,但其含義是您應(yīng)該編寫公式以盡可能利用SE。當(dāng)然,如果您不確切知道如何做到這一點(diǎn),這可能很難,但有一些簡(jiǎn)單的提示可以幫助您。

1.SUM()總是使用SE進(jìn)行計(jì)算,因此無需擔(dān)心。

2.對(duì)于大多數(shù)簡(jiǎn)單的計(jì)算(如Sales [數(shù)量] *銷售[單位價(jià)格]),SUMX()也將使用SE,所以那里都很好。

3.在某些情況下,SUMX()可以使用FE執(zhí)行部分或全部計(jì)算,特別是如果公式中有復(fù)雜的比較語(yǔ)句。如果SUMX需要使用FE,那么性能可能會(huì)很慢 - 有時(shí)非常慢。

關(guān)于第3點(diǎn),最好建議是避免在SUMX函數(shù)中編寫復(fù)雜的條件語(yǔ)句,如“IF語(yǔ)句”。考慮以下兩個(gè)公式:

物品總銷售額超過100美元

      = SUMX(銷售,

          IF(銷售[ExtendedAmount]> 100,銷售[ExtendedAmount])

         )

物品總銷售額超過100美元

=CALCULATE

           SUMX(銷售,銷售[ExtendedAmount]),

           銷售[ExtendedAmount]> 100

        )

第一個(gè)公式(Bad)在SUMX中有一個(gè)IF語(yǔ)句。此IF語(yǔ)句強(qiáng)制存儲(chǔ)引擎將求值任務(wù)傳遞給公式引擎以進(jìn)行比較檢查,以確定每個(gè)單獨(dú)的行是否大于100,然后再?zèng)Q定是否將其包括在計(jì)算中。因此,公式引擎必須一次完成一行任務(wù),使評(píng)估變得緩慢且低效。

第二個(gè)公式(Good)首先使用CALCULATE()修改來自visual的初始過濾器,以在Sales [ExtendedAmount]> 100上添加額外的過濾器。這個(gè)新過濾器由存儲(chǔ)引擎非常有效地應(yīng)用。在CALCULATE()修改過濾器之后,SUMX()可以完成其工作,即使用存儲(chǔ)引擎(而不是公式引擎)應(yīng)用新的過濾器集合來添加剩余的行。結(jié)果,這第二個(gè)公式非常有效。在我完成的一些簡(jiǎn)單測(cè)試中,第一個(gè)(壞)公式比第二個(gè)(好)公式慢了5倍。在其他情況下,它可能會(huì)慢100或甚至1000倍,所以這顯然可能是一個(gè)問題。

壓縮對(duì)性能的影響

可影響性能的第二個(gè)領(lǐng)域是整體數(shù)據(jù)模型壓縮。數(shù)據(jù)模型中的列中存在的唯一值越多,數(shù)據(jù)的壓縮程度就越低。數(shù)據(jù)壓縮得越少,所需的內(nèi)存就越多,計(jì)算速度就越慢。讓我們?cè)倏匆幌卤疚那懊娴谋砀瘛?/p>

示例表1

 

示例表1[Total Sales]數(shù)據(jù)列具有所有唯一值。此列不能很好地壓縮。

示例表2

在此表中,Qty列中還有重復(fù)值,還有每單位價(jià)格列。列中的唯一值越少,壓縮越好。

當(dāng)然,這兩個(gè)樣本表當(dāng)然非常小,但想象一下這個(gè)概念對(duì)非常大的表(例如具有數(shù)百萬行數(shù)據(jù)的表)的影響。對(duì)于非常大的表,示例表1中的唯一值的數(shù)量可能遠(yuǎn)遠(yuǎn)大于示例表2中的列中的唯一值的數(shù)量。因此,如示例2中所述的加載數(shù)據(jù)可能具有對(duì)總表大小產(chǎn)生積極影響,從而影響數(shù)據(jù)模型的性能。做出改變當(dāng)然可能意味著你必須交換你的措施:

SUM(銷售[總銷售額])

SUMX(銷售,銷售[數(shù)量] *銷售[單位價(jià)格])

SUMX比起SUM的這種用法非常精細(xì)并且有更高的性能。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    熟妇人妻av中文字幕老熟妇| 国产三级黄片在线免费看| 成年人视频日本大香蕉久久| 成人午夜爽爽爽免费视频| 欧美一区日韩二区亚洲三区| 高清免费在线不卡视频| 久久久免费精品人妻一区二区三区| 精品女同在线一区二区| 黑丝袜美女老师的小逼逼| 精产国品一二三区麻豆| 日本精品免费在线观看| 亚洲三级视频在线观看免费| 欧美成人一区二区三区在线 | 亚洲成人免费天堂诱惑| 日木乱偷人妻中文字幕在线| 高中女厕偷拍一区二区三区 | 一区二区三区精品人妻| 极品熟女一区二区三区| 99国产高清不卡视频| 日本 一区二区 在线| 国产日产欧美精品视频| 亚洲av日韩av高潮无打码| 美女黄片大全在线观看| 欧美成人一区二区三区在线 | 日本大学生精油按摩在线观看| 日本中文在线不卡视频| 99在线视频精品免费播放| 加勒比日本欧美在线观看| 欧美精品久久99九九| 成人免费在线视频大香蕉| 日韩不卡一区二区在线| 国产精品午夜一区二区三区 | 亚洲中文字幕免费人妻| 国产综合一区二区三区av| 日韩中文字幕视频在线高清版| 好吊视频一区二区在线| 国产内射在线激情一区| 欧美一级不卡视频在线观看| 国产av一二三区在线观看| 国产欧美日韩精品一区二区| 国产肥女老熟女激情视频一区|