【DAX圣經(jīng)】第四章:理解計(jì)算上下文(1)

到本書(shū)的這一章時(shí)养葵,您已經(jīng)學(xué)習(xí)了DAX語(yǔ)言的基礎(chǔ)知識(shí)蜒什。您知道如何創(chuàng)建計(jì)算列和度量值拇泛,并且您已經(jīng)很好地理解了DAX中的通用函數(shù)荣倾。在這一章中悯搔,你將進(jìn)入該語(yǔ)言的下一階段:在學(xué)習(xí)了DAX語(yǔ)言堅(jiān)實(shí)的理論背景之后,你將能夠成為一個(gè)真正的DAX選手舌仍。

到目前為止妒貌,您已經(jīng)獲得了一些知識(shí),您可以創(chuàng)建許多有趣的報(bào)告铸豁,為了能創(chuàng)建更復(fù)雜的報(bào)告灌曙,你還需要學(xué)習(xí)計(jì)算上下文。計(jì)算上下文是DAX所有高級(jí)特性的基礎(chǔ)节芥。

我們想對(duì)我們的讀者說(shuō)幾句話(huà):計(jì)算上下文的概念很簡(jiǎn)單在刺,你很快就會(huì)學(xué)習(xí)和理解它。然而头镊,您需要徹底地理解一些底層的細(xì)枝末節(jié)蚣驼;否則,在你的DAX學(xué)習(xí)路徑中相艇,你會(huì)感到迷失颖杏。我們?cè)诠埠退饺苏n程中教許多用戶(hù)。我們知道這是絕對(duì)正常的坛芽。在某一時(shí)刻留储,你會(huì)覺(jué)得公式像魔術(shù)一樣工作,因?yàn)樗鼈兪怯行У牧悴幻靼诪槭裁椿窕洹e擔(dān)心:許多人也有同樣的問(wèn)題。大多數(shù)DAX的學(xué)生在學(xué)習(xí)時(shí)能理解活喊,而其他許多學(xué)生將來(lái)也會(huì)理解赔嚎。這僅僅意味著計(jì)算上下文對(duì)他們來(lái)說(shuō)不夠清晰。在這一點(diǎn)上胧弛,解決方案很簡(jiǎn)單:回到這一章,再讀一遍侠畔,你可能會(huì)發(fā)現(xiàn)一些新的東西结缚,這是你在第一次讀到的時(shí)候漏掉了。

此外软棺,計(jì)算上下文在CALCULATE函數(shù)的使用中起著重要的作用红竭。CALCULATE可能是DAX中最強(qiáng)大、最難以學(xué)習(xí)的函數(shù),我們將在第5章“理解 CALCULATE和CALCULATETABLE”中介紹CALCULATE茵宪,然后在書(shū)的其余部分中使用它最冰。在沒(méi)有堅(jiān)實(shí)的計(jì)算上下文背景的情況下,理解CALCULATE是有問(wèn)題的稀火。另一方面暖哨,在不嘗試使用CALCULATE的情況下,理解計(jì)算上下文的重要性幾乎是不可能的凰狞。因此篇裁,這一章和隨后的一章根據(jù)我們之前的經(jīng)驗(yàn),總是會(huì)被標(biāo)記并反復(fù)查閱赡若。

介紹計(jì)算上下文

讓我們先了解一下計(jì)算上下文是什么达布。任何DAX表達(dá)式都是在上下文中求值的。上下文是計(jì)算公式的“環(huán)境”逾冬。例如黍聂,考慮一個(gè)非常簡(jiǎn)單的公式:

[Sales Amount] := SUMX ( Sales, Sales[Quantity] * Sales[UnitPrice] )

您已經(jīng)知道這個(gè)公式計(jì)算的是什么:數(shù)量乘以?xún)r(jià)格的總和。您可以將這個(gè)度量值放在一個(gè)透視表中身腻,并查看結(jié)果产还,如圖4-1所示。

圖4-1 沒(méi)有篩選條件的銷(xiāo)售金額度量值霸株,顯示了銷(xiāo)售總額

這個(gè)數(shù)字本身看起來(lái)一點(diǎn)都不有趣雕沉,是嗎?但是去件,如果你仔細(xì)想想坡椒,這個(gè)公式計(jì)算出它應(yīng)該計(jì)算的東西:所有銷(xiāo)售金額的總和,這是一個(gè)沒(méi)有多少含義的大數(shù)字。當(dāng)我們使用一些列來(lái)分開(kāi)查看這個(gè)結(jié)果時(shí)诉濒,這個(gè)透視表變得就有趣了兼贡。例如,您可以使用產(chǎn)品顏色丈攒,將其放在透視表行中,這時(shí)透視表突然就顯示了一些有趣的業(yè)務(wù)見(jiàn)解授霸,如圖4-2所示

圖4-2 按color分割銷(xiāo)售額巡验,看起來(lái)更有趣

總數(shù)仍然在那里,但現(xiàn)在它是小數(shù)字的總和碘耳,每個(gè)值显设,連同所有其他的值,都有意義辛辨。但是捕捂,如果你再仔細(xì)想想瑟枫,你應(yīng)該注意到這里發(fā)生了一些奇怪的事情:這個(gè)公式并不是計(jì)算我們所要求的。

我們認(rèn)為這個(gè)公式的意思是“所有銷(xiāo)售金額的總和”指攒。但在透視表的每個(gè)單元格中慷妙,公式并不是計(jì)算所有銷(xiāo)售的總和,而是計(jì)算具有特定顏色的產(chǎn)品的銷(xiāo)售總額允悦。然而膝擂,我們從未指定計(jì)算必須在數(shù)據(jù)模型的一個(gè)子集上工作。換句話(huà)說(shuō)澡屡,這個(gè)公式并沒(méi)有指定它可以在數(shù)據(jù)子集上工作猿挚。

為什么在不同的單元格中,公式計(jì)算不同的值驶鹉?答案是非常簡(jiǎn)單的:因?yàn)樵谶@個(gè)計(jì)算上下文下绩蜻,DAX計(jì)算公式。你可以把一個(gè)公式的計(jì)算上下文想象成圍繞在單元格周?chē)梢杂?jì)算DAX公式的區(qū)域室埋。

因?yàn)楫a(chǎn)品的顏色在各行中办绝,透視表中的每一行都可以看到,在整個(gè)數(shù)據(jù)庫(kù)中姚淆,只有特定顏色的產(chǎn)品的子集孕蝉。這是公式的周?chē)鷧^(qū)域,也就是在公式計(jì)算之前應(yīng)用到數(shù)據(jù)庫(kù)的一組過(guò)濾器腌逢。當(dāng)公式計(jì)算所有銷(xiāo)售金額的總和時(shí)降淮,它不會(huì)在整個(gè)數(shù)據(jù)庫(kù)中計(jì)算它,因?yàn)樗鼰o(wú)法選擇全部行搏讶。當(dāng)DAX計(jì)算出與行值為白色的公式時(shí)佳鳖,只有白色的產(chǎn)品是可見(jiàn)的,因此媒惕,它只考慮與白色產(chǎn)品相關(guān)的銷(xiāo)售系吩。因此,當(dāng)計(jì)算僅顯示白色產(chǎn)品的透視表中的一行時(shí)妒蔚,銷(xiāo)售金額的總和就變成了所有白色產(chǎn)品的銷(xiāo)售額之和穿挨。

任何DAX公式都確定了一個(gè)計(jì)算,但是DAX在一個(gè)上下文執(zhí)行計(jì)算肴盏,它定義了計(jì)算的最終值科盛。公式雖然是一樣的,但是值是不同的因?yàn)镈AX根據(jù)不同的數(shù)據(jù)子集對(duì)它進(jìn)行計(jì)算菜皂。

現(xiàn)在讓我們把年份放在列上土涝,使透視表更有趣。現(xiàn)在的報(bào)告如圖4-3所示幌墓。

圖4-3 銷(xiāo)售額現(xiàn)在被顏色和年份分割

計(jì)算的規(guī)則在這一點(diǎn)上應(yīng)該是清楚的:每個(gè)單元格現(xiàn)在都有不同的值但壮,即使公式總是相同的,因?yàn)橥敢暠淼男泻土羞x擇都定義了上下文常侣。事實(shí)上蜡饵,2008年的白色產(chǎn)品銷(xiāo)售與2007年的白色產(chǎn)品銷(xiāo)售不同。而且胳施,因?yàn)槟梢栽谛泻土兄蟹胖枚鄠€(gè)字段溯祸,所以最好說(shuō)行上的字段集和列上的字段集定義上下文。圖4-4使這個(gè)更加明顯

圖4-4 上下文是由行和列上的字段集定義的

每個(gè)單元格有不同的值舞肆,因?yàn)樵谛薪垢ā㈩伾推放泼Q(chēng)上有兩個(gè)字段。行和列完整的字段集合定義了上下文椿胯。例如筷登,圖4-4中突出顯示的單元格的上下文對(duì)應(yīng)黑色、品牌Contoso和日歷年哩盲。

注意
字段是否在行或列上(或在切片器和/或頁(yè)面過(guò)濾器上前方,或者在任何其他您可以用查詢(xún)創(chuàng)建的類(lèi)型過(guò)濾器中)并不重要。所有這些過(guò)濾器共同定義單個(gè)上下文廉油,而DAX利用這個(gè)上下文來(lái)計(jì)算公式惠险。在行或列上放置一個(gè)字段會(huì)產(chǎn)生一些美觀上的影響,但是在DAX計(jì)算值的方式上沒(méi)有任何變化抒线。

現(xiàn)在讓我們看完整的場(chǎng)景班巩。在圖4-5中,我們?cè)谇衅魃咸砑恿水a(chǎn)品類(lèi)別嘶炭,并在過(guò)濾器上添加了月份抱慌,我們選擇了12月。

圖4-5 在一個(gè)典型的報(bào)告中旱物,上下文定義在很多方式遥缕,包括切片器和過(guò)濾器

在這一點(diǎn)上,很明顯宵呛,每個(gè)單元計(jì)算的值都有一個(gè)由行单匣、列、切片器和過(guò)濾器定義的上下文宝穗。所有這些過(guò)濾器共同定義一個(gè)上下文户秤,并且在公式計(jì)算之前,DAX將該上下文應(yīng)用于數(shù)據(jù)模型上逮矛。此外鸡号,重要的是要知道,并非所有的單元格都具有相同的過(guò)濾器集须鼎,不僅在值方面鲸伴,而且在字段方面也是如此府蔗。例如,列上的grand total只包含類(lèi)別汞窗、月份和年份的過(guò)濾器姓赤,但是它不包含顏色和品牌的過(guò)濾器。顏色和品牌的字段在行中仲吏,它們不會(huì)過(guò)濾總數(shù)不铆。這同樣適用于透視表中顏色的子總數(shù):對(duì)于那些單元,制造商沒(méi)有過(guò)濾器裹唆,來(lái)自行的唯一有效的過(guò)濾器是顏色

我們把這個(gè)上下文稱(chēng)為篩選上下文誓斥,正如它的名字所暗示的那樣,它是一個(gè)篩選表的上下文许帐。您所編寫(xiě)的任何公式都有不同的值劳坑,這取決于執(zhí)行計(jì)算的DAX語(yǔ)句上的篩選上下文。這種行為舞吭,雖然非常直觀泡垃,但需要被充分理解。

現(xiàn)在您已經(jīng)了解了篩選上下文是什么羡鸥,您知道下面的DAX表達(dá)式應(yīng)該被理解為“在當(dāng)前篩選上下文中可見(jiàn)的所有銷(xiāo)售金額的總和”:

[Sales Amount] := SUMX ( Sales, Sales[Quantity] * Sales[UnitPrice] )

稍后您將學(xué)習(xí)如何閱讀蔑穴、修改和清除篩選上下文。到目前為止惧浴,我們已經(jīng)足夠深入地了解了這個(gè)事實(shí)存和,即篩選上下文總是存在于透視表的任何單元格或報(bào)告/查詢(xún)中的任何值。你總是需要考慮篩選上下文來(lái)理解DAX是如何計(jì)算公式的衷旅。

理解行上下文

篩選上下文是DAX中存在的兩個(gè)上下文之一捐腿。它的搭檔是行上下文,在本節(jié)中柿顶,您將了解它是什么以及它是如何工作的茄袖。

這一次,我們使用了一個(gè)不同的公式來(lái)考慮:

Sales[GrossMargin] = Sales[SalesAmount] - Sales[TotalCost]

您可能會(huì)在一個(gè)計(jì)算列中寫(xiě)出這樣的表達(dá)式嘁锯,以便計(jì)算毛利潤(rùn)宪祥。一旦您在計(jì)算列中定義了這個(gè)公式,您就會(huì)得到結(jié)果表家乘,如圖4-6所示蝗羊。

圖4-6

DAX對(duì)表中所有行進(jìn)行公式計(jì)算,對(duì)于每一行仁锯,它都按照預(yù)期計(jì)算出了不同的值耀找。為了理解行上下文,我們需要有點(diǎn)學(xué)究式的閱讀公式:我們要求減去兩列业崖,但是我們從哪里告訴DAX從哪一行來(lái)得到列的值呢野芒?您可能會(huì)說(shuō)蓄愁,要使用的行是隱式的。因?yàn)樗且粋€(gè)計(jì)算列狞悲,所以DAX計(jì)算它一行一行涝登,對(duì)于每一行,它都會(huì)計(jì)算一個(gè)不同的結(jié)果效诅。這是正確的,但是趟济,從DAX表達(dá)式的角度來(lái)看乱投,要使用哪一行的信息仍然缺失。

實(shí)際上顷编,用于執(zhí)行計(jì)算的行并沒(méi)有存儲(chǔ)在公式中戚炫。它是由另一種上下文定義的:行上下文。當(dāng)你定義計(jì)算的列時(shí)媳纬,DAX從表的第一行開(kāi)始了一個(gè)迭代;它創(chuàng)建了包含該行的行上下文并對(duì)表達(dá)式求值双肤。然后它移到第二行,再次求出表達(dá)式钮惠。這發(fā)生在表格中所有的行中茅糜,如果你有100萬(wàn)行,你可以認(rèn)為DAX創(chuàng)建了100萬(wàn)行上下文來(lái)評(píng)估這個(gè)公式100萬(wàn)次素挽。顯然蔑赘,為了優(yōu)化計(jì)算,這并不是發(fā)生的事情;否則预明,DAX將是一種非常緩慢的語(yǔ)言缩赛。不管怎樣,從邏輯的角度來(lái)看撰糠,這就是它的工作原理酥馍。

讓我們?cè)囍_一點(diǎn)。行上下文是一個(gè)總是包含一行的上下文阅酪,DAX在計(jì)算列的創(chuàng)建過(guò)程中自動(dòng)定義它旨袒。您可以使用其他技術(shù)創(chuàng)建行上下文,這將在本章后面討論遮斥,但是解釋行上下文的最簡(jiǎn)單方法是查看計(jì)算過(guò)的列峦失,其中引擎總是自動(dòng)創(chuàng)建它。

總是有兩種上下文
到目前為止术吗,您已經(jīng)了解了行上下文和篩選上下文是什么尉辑,它們是DAX中僅有的上下文類(lèi)型。因此较屿,它們是修改公式結(jié)果的唯一方法隧魄。任何公式都將在這兩個(gè)不同的上下文中進(jìn)行計(jì)算:行上下文和篩選上下文卓练。

我們將這兩種上下文稱(chēng)為“計(jì)算上下文”,因?yàn)樗鼈兪歉淖児接?jì)算方式的上下文购啄,為相同的公式提供不同的結(jié)果襟企。

這是一個(gè)非常重要的點(diǎn),在開(kāi)始時(shí)很難集中注意力:總是有兩個(gè)上下文狮含,一個(gè)公式的結(jié)果取決于兩者顽悼。在你的DAX學(xué)習(xí)路徑的這一點(diǎn)上,你可能會(huì)認(rèn)為這是顯而易見(jiàn)的几迄,而且是很自然的蔚龙。你也許是對(duì)的。然而映胁,在書(shū)的后面木羹,如果你不記得這兩個(gè)上下文的共存,你會(huì)發(fā)現(xiàn)一些公式是很難理解的解孙,每一個(gè)都可以改變公式的結(jié)果坑填。

測(cè)試你的計(jì)算上下文理解

在我們繼續(xù)進(jìn)行關(guān)于計(jì)算上下文的更復(fù)雜的討論之前,我們希望通過(guò)幾個(gè)示例來(lái)測(cè)試您對(duì)上下文的理解弛姜。請(qǐng)不要立即看這個(gè)解釋;在這個(gè)問(wèn)題之后停下來(lái)脐瑰,試著回答這個(gè)問(wèn)題。然后閱讀解釋?zhuān)⒃囍ダ斫馑?/p>

在計(jì)算列中使用SUM

第一個(gè)測(cè)試是非常簡(jiǎn)單的娱据。如果您在銷(xiāo)售表中定義了一個(gè)計(jì)算列蚪黑,那么會(huì)發(fā)生什么呢?

Sales[SumOfSalesAmount] = SUM ( Sales[SalesAmount] )

因?yàn)樗且粋€(gè)計(jì)算列中剩,它將被逐行計(jì)算忌穿,對(duì)于每一行,您將獲得一個(gè)結(jié)果结啼。你希望看到什么數(shù)字掠剑?從這些選項(xiàng)中選擇一個(gè):

  • 這一行的銷(xiāo)售額的值,同時(shí)也就是每一行的不同值郊愧。

  • 所有行的總銷(xiāo)售額朴译,也就是說(shuō),所有行的值都是一樣的属铁。

  • 一個(gè)錯(cuò)誤;你不能在計(jì)算的列中使用求和眠寿。

請(qǐng)停止閱讀,當(dāng)我們等待你的有根據(jù)的猜測(cè)之后再繼續(xù)焦蘑。

現(xiàn)在盯拱,讓我們?cè)敿?xì)說(shuō)明當(dāng)DAX計(jì)算公式時(shí)發(fā)生了什么。您已經(jīng)了解了公式的含義:“在當(dāng)前篩選上下文中看到的所有銷(xiāo)售金額的總和〗品辏“因?yàn)樵谝粋€(gè)計(jì)算列中宁舰,DAX會(huì)逐行計(jì)算公式。因此奢浑,它為第一行創(chuàng)建一行上下文蛮艰,然后調(diào)用公式計(jì)算,并對(duì)整個(gè)表進(jìn)行迭代雀彼。這個(gè)公式計(jì)算當(dāng)前篩選上下文中所有銷(xiāo)售金額的總和壤蚜,所以真正的問(wèn)題是“當(dāng)前的篩選上下文是什么?”答案:它是完整的數(shù)據(jù)庫(kù)徊哑,因?yàn)镈AX計(jì)算這個(gè)公式在任何透視表或任何其他類(lèi)型的篩選條件之外仍律。實(shí)際上,當(dāng)沒(méi)有篩選條件激活時(shí)实柠,DAX將它作為計(jì)算列定義的一部分進(jìn)行處理。

即使有行上下文善涨,SUM也會(huì)忽略它窒盐。相反,它使用篩選上下文钢拧,現(xiàn)在的篩選上下文是完整的數(shù)據(jù)庫(kù)蟹漓。因此,第二種選擇是正確的:您將獲得總銷(xiāo)售額源内,與所有銷(xiāo)售行相同的值葡粒,如圖4-7所示。

圖4-7 SUM ( Sales[SalesAmount] )在一個(gè)計(jì)算列中膜钓,是根據(jù)完整的數(shù)據(jù)庫(kù)計(jì)算的

這個(gè)例子說(shuō)明了這兩個(gè)上下文共存嗽交。他們共同在公式的結(jié)果上工作,但是用不同的方式颂斜。計(jì)算列中使用的SUM夫壁、MIN和MAX等聚合函數(shù)只使用過(guò)濾上下文,忽略行上下文沃疮,DAX只使用它來(lái)確定列值盒让。如果你選擇了第一個(gè)答案,就像許多學(xué)生通常做的那樣司蔬,這是完全正常的邑茄。關(guān)鍵是,您還沒(méi)有想到這兩個(gè)上下文正在一起工作俊啼,以不同的方式改變公式結(jié)果肺缕。當(dāng)使用直觀的邏輯時(shí),第一個(gè)答案是最常見(jiàn)的,但它是錯(cuò)誤的搓谆,現(xiàn)在你知道為什么了炒辉。

在度量值中使用列

我們想和你們做的第二個(gè)測(cè)試有點(diǎn)不同。假設(shè)你想要在一個(gè)度量中定義毛利潤(rùn)的公式泉手,而不是在一個(gè)計(jì)算的列中黔寇。你有一個(gè)帶有銷(xiāo)售金額的列,另一個(gè)用于產(chǎn)品成本的列斩萌,你可以寫(xiě)下面的表達(dá)式:

[GrossMargin] := Sales[SalesAmount] - Sales[ProductCost]

如果你試圖定義這樣一個(gè)度量值缝裤,你應(yīng)該期待什么結(jié)果?

  • 1颊郎、這個(gè)表達(dá)式工作正常憋飞,我們需要在報(bào)告中測(cè)試結(jié)果。

  • 2姆吭、一個(gè)錯(cuò)誤榛做,你甚至不能寫(xiě)這個(gè)公式

  • 3。你可以定義這個(gè)公式内狸,但是當(dāng)它在透視表或查詢(xún)中使用時(shí)检眯,它會(huì)給出一個(gè)錯(cuò)誤

和以前一樣,停止閱讀昆淡,思考答案锰瘸,然后閱讀下面的解釋

在這個(gè)公式中,我們使用了Sales[SalesAmount]昂灵,這是一個(gè)列名避凝,也就是銷(xiāo)售表中銷(xiāo)售金額的值。這個(gè)定義缺少什么嗎眨补?您應(yīng)該回憶一下管削,從以前的觀點(diǎn)來(lái)看,這里缺少的信息是從哪里獲取當(dāng)前銷(xiāo)售額的值撑螺。當(dāng)您在計(jì)算列中編寫(xiě)這段代碼時(shí)佩谣,DAX知道在計(jì)算表達(dá)式時(shí)要使用的行,這要?dú)w功于行上下文实蓬。然而茸俭,這個(gè)度量值會(huì)發(fā)生什么呢?沒(méi)有迭代安皱,也沒(méi)有當(dāng)前行调鬓,也就是說(shuō),沒(méi)有行上下文酌伊。

因此腾窝,第二個(gè)答案是正確的缀踪,你甚至不能寫(xiě)公式;它在語(yǔ)法上是錯(cuò)誤的虹脯。當(dāng)你試圖輸入它的時(shí)候驴娃,你會(huì)收到一個(gè)錯(cuò)誤

記住,列本身沒(méi)有值循集。相反唇敞,它對(duì)于表格的每一行都有不同的值。因此咒彤,如果你想要一個(gè)單獨(dú)的值疆柔,你需要指定要使用的行。指定要使用的行的惟一方法是行上下文镶柱。因?yàn)樵谶@個(gè)度量中沒(méi)有行上下文旷档,公式是不正確的,從而DAX會(huì)拒絕它歇拆。

在一個(gè)度量值中指定這個(gè)計(jì)算的正確方法是使用聚合函數(shù)鞋屈,如下所列

[GrossMargin] := SUM ( Sales[SalesAmount] ) - SUM ( Sales[ProductCost] )

使用這個(gè)公式時(shí),您現(xiàn)在要求通過(guò)SUM進(jìn)行聚合故觅。因此谐区,后一個(gè)公式并不依賴(lài)于行上下文;它只需要一個(gè)篩選上下文,同時(shí)提供了正確的結(jié)果逻卖。

利用迭代器創(chuàng)造一個(gè)行上下文

您了解到DAX在定義一個(gè)計(jì)算列時(shí)自動(dòng)創(chuàng)建行上下文。在這種情況下昭抒,引擎會(huì)逐行計(jì)算DAX的表達(dá)式∑酪玻現(xiàn)在,是時(shí)候?qū)W習(xí)如何使用迭代器在DAX表達(dá)式中創(chuàng)建行上下文了

您可能還記得灭返,在第2章“引入DAX”中盗迟,所有以x結(jié)尾的函數(shù)都是迭代器,也就是說(shuō)熙含,它們遍歷表罚缕,并對(duì)每一行進(jìn)行評(píng)估,最后用不同的算法聚合結(jié)果怎静。例如邮弹,看看下面的DAX表達(dá)式:

[IncreasedSales] := SUMX ( Sales, Sales[SalesAmount] * 1.1 )

SUMX是一個(gè)迭代器,它迭代銷(xiāo)售表蚓聘,對(duì)于表的每一行腌乡,它計(jì)算銷(xiāo)售額增加10%到它的值,最后返回所有這些值的總和夜牡。為了計(jì)算每一行的表達(dá)式与纽,SUMX在Sales表上創(chuàng)建行上下文,并在迭代期間使用它。DAX在包含當(dāng)前迭代行的行上下文中計(jì)算內(nèi)部表達(dá)式(SUMX的第二個(gè)參數(shù))

需要注意的是急迂,在完整的計(jì)算流程中影所,SUMX的不同參數(shù)使用不同的上下文。讓我們更仔細(xì)地看一下相同的表達(dá)式

= SUMX (
 Sales, ← 外部上下文
 Sales[SalesAmount] * 1.1 ← 外部上下文 + 新的行上下文
)

第一個(gè)參數(shù)僚碎,Sales猴娩,是使用來(lái)自調(diào)用者的上下文來(lái)計(jì)算的(例如,它可能是一個(gè)透視表單元格听盖,另一個(gè)度量值胀溺,或者查詢(xún)的一部分),而第二個(gè)參數(shù)(表達(dá)式)是使用外部上下文加上新創(chuàng)建的行上下文來(lái)計(jì)算的皆看。

所有迭代器的行為都是一樣的:

1仓坞、為作為第一個(gè)參數(shù)接收的表的每一行創(chuàng)建一個(gè)新的行上下文

2、在新創(chuàng)建的行上下文中(加上在迭代開(kāi)始之前存在的任何其他上下文)腰吟,對(duì)表的每一行進(jìn)行評(píng)估无埃。

3、聚合在步驟2中計(jì)算的值毛雇。

重要的是要記住嫉称,原始上下文在表達(dá)式中仍然有效:迭代器只添加新的行上下文;它們不會(huì)以任何方式修改現(xiàn)有的。這條規(guī)則通常是有效的灵疮,但是有一個(gè)重要的例外:如果前面的上下文已經(jīng)包含了同一個(gè)表的行上下文织阅,那么新創(chuàng)建的行會(huì)上下文隱藏了先前存在的行上下文。我們將在下一節(jié)中更詳細(xì)地討論這個(gè)問(wèn)題震捣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荔棉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒿赢,更是在濱河造成了極大的恐慌润樱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡棵,死亡現(xiàn)場(chǎng)離奇詭異壹若,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)皂冰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)店展,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人秃流,你說(shuō)我怎么就攤上這事壁查。” “怎么了剔应?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵睡腿,是天一觀的道長(zhǎng)语御。 經(jīng)常有香客問(wèn)我,道長(zhǎng)席怪,這世上最難降的妖魔是什么应闯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮挂捻,結(jié)果婚禮上碉纺,老公的妹妹穿的比我還像新娘。我一直安慰自己刻撒,他們只是感情好骨田,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著声怔,像睡著了一般态贤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醋火,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天悠汽,我揣著相機(jī)與錄音,去河邊找鬼芥驳。 笑死柿冲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兆旬。 我是一名探鬼主播假抄,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丽猬!你這毒婦竟也來(lái)了宿饱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宝鼓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后巴刻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體愚铡,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年胡陪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沥寥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柠座,死狀恐怖邑雅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妈经,我是刑警寧澤淮野,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布捧书,位于F島的核電站,受9級(jí)特大地震影響骤星,放射性物質(zhì)發(fā)生泄漏经瓷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一洞难、第九天 我趴在偏房一處隱蔽的房頂上張望舆吮。 院中可真熱鬧,春花似錦队贱、人聲如沸色冀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锋恬。三九已至,卻和暖如春慎式,著一層夾襖步出監(jiān)牢的瞬間伶氢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工瘪吏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留癣防,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓掌眠,卻偏偏與公主長(zhǎng)得像蕾盯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蓝丙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 在快速介紹前一章之后级遭,現(xiàn)在是時(shí)候開(kāi)始討論DAX語(yǔ)言了。在這一章中渺尘,您將學(xué)習(xí)語(yǔ)言的語(yǔ)法挫鸽、計(jì)算列和度量值(在Excel...
    daxbi閱讀 3,644評(píng)論 0 11
  • DAX是微軟SQL Server分析服務(wù)(SSAS)和Microsoft Power Pivot for Exce...
    daxbi閱讀 15,401評(píng)論 4 31
  • 在這一章中丢郊,您將了解DAX中標(biāo)量函數(shù)和表函數(shù)之間的區(qū)別。表函數(shù)對(duì)于DAX的內(nèi)部計(jì)算非常重要医咨,當(dāng)您編寫(xiě)DAX查詢(xún)而不...
    daxbi閱讀 3,964評(píng)論 0 12
  • 常見(jiàn)的DAX函數(shù) 現(xiàn)在您已經(jīng)了解了DAX的基本原理以及如何處理錯(cuò)誤條件枫匾,接下來(lái)是對(duì)DAX最常用的函數(shù)和表達(dá)式的簡(jiǎn)要...
    daxbi閱讀 3,565評(píng)論 2 14
  • 我打小生活在富順,所以特別習(xí)慣生活在這里拟淮,在去外地回到這里總會(huì)散發(fā)這一種熟悉的味道——輕松干茉、自由、不受規(guī)則限制很泊。...
    F小悟空閱讀 612評(píng)論 0 1