分享

DAX中的Calcualte函数虽然复杂,但是还是有章可循的 - Power Excel

 ExcelEasy 2023-09-18 发布于北京


上次我们初步介绍了Calculate函数,

这应该是DAX中最重要的函数了:Calculate - Power Excel

其中遗留了一个问题,那就是我们如此创建的两个度量值:

D1

Contoso Sales Amount = CALCULATE(  Sales[Sales Amount],  'Product'[BrandName] = "Contoso")

D3

Conto Sales Amount 3 =  CALCULATE(   [Sales Amount],   FILTER(     'Product',     'Product'[BrandName] = "Contoso"   ) )

是否一样。

从文本上分析看,这两个度量值的似乎是差不多的。

因为,如果我们考虑第一个度量值的另外一个写法,D2

Conto Sales Amount 2 =  CALCULATE(   [Sales Amount],   FILTER(     ALL('Product'[BrandName]),     'Product'[BrandName] = "Contoso"   ) )

你会发现一个是对产品表的筛选,一个是对产品表BrandName列的筛选。

但是二者的结果却完全不同:

第二列是使用D1写法的度量值,第三列是使用D2写法的度量值,这二者是完全一样的,所以结果相同。第四列是使用D3写法的度量值,与前二者完全不同。

在这个写法中,可以看到,外部筛选器上下文起作用了,并没有被内部筛选器上下文覆盖掉。

分析D3写法中的语法,我们发现,Filter使用的表是Product,而Product是会首先被外部筛选器上下文筛选的,这样在第一行,BrandName为A. Datum中,首先将Product筛选,只包含那些BrandName为A. Datum的行,然后再接受内部筛选器的筛选,结果为空表。

所以该行的度量值为空!

很是奇怪,我们之前介绍过Calculate的规则:

如果作用在相同的列上,内部筛选器上下文会覆盖外部筛选器上下文。

为什么在这里不起作用了?

其实,仔细看一下这三者的语法上的区别,会发现,那个规则之所以起作用,完全是因为其中的ALL函数。

在D2写法中(D1写法实质就是D2写法的简写):

Conto Sales Amount 2 =  CALCULATE(   [Sales Amount],   FILTER(     ALL('Product'[BrandName]),     'Product'[BrandName] = "Contoso"   ) )

ALL函数导致了对外部筛选器的忽略。

如果我们将ALL函数施加到D3写法中Product表中,仍然得到相同的结果,

Conto Sales Amount 3 =  CALCULATE(   [Sales Amount],   FILTER(     ALL('Product'),     'Product'[BrandName] = "Contoso"   ) )
更好的方式

当然,很多场景中我们希望保持外部筛选器上下文,而不让它们被覆盖。所以很多人经常使用上面的写法。

不过这并不是一个很好的方式,因为会带来性能方面的严重下降(具体原因我们后面的文章会详细分析)。

更好的方式是使用modifiers函数:keepfilters,

Contoso Sales Amount = CALCULATE(  Sales[Sales Amount],  KEEPFILTER('Product'[BrandName] = "Contoso"))

这个函数的作用是告诉DAX引擎,在评估括号里的内部筛选器上下文时,不要覆盖外部筛选器上下文。

这样,我们就得到了与期望相同的结果:

DAX中的modifiers函数还有很多,像这里提到的all,此外还有allexcept,allnoblankrow,allselected,removefilters等等,大家可以研究一下这些函数,对深入理解DAX有非常大的帮助。


本文涉及的DAX函数及其他DAX函数,在E学会课程中有详细介绍!

详情咨询客服(底部菜单-知识库-客服)

Excel+Power Query+Power Pivot+Power BI


Power Excel 知识库    按照以下方式进入知识库学习
Excel函数   底部菜单:知识库->Excel函数

自定义函数  底部菜单:知识库->自定义函数

Excel如何做  底部菜单:知识库->Excel如何做

面授培训  底部菜单:培训学习->面授培训

Excel企业应用  底部菜单:企业应用

也可以在历史文章中学习Excel,Power Query,Power Pivot,Power BI,Power Automate各种技巧。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章