回忆是一座桥
却是通往寂寞的牢

PowerBI DAX语言能力测试—答案解析

第一题

计算列中引用度量值,需要注意行上下文转换。一般来说每一行都是不一样的,因此行上下文转换而来的筛选上下文也只包含一行数据,但题目中已经提醒:订单记录有可能重复,那么由行上下文转换而来的筛选上下文就不一定只包含一行数据了,因此答案为第二个选项。

第二题

该题中的度量值使用了订单表作为内部筛选器参数,此外,另有一个内部筛选器筛选订单表的产品名称列,那么由于内部筛选器参数之间是相交行为,导致很多人会选择最后一个选项。

但实际上,由于上级表的扩展表不包含下级表的任意列,所以下级表上的筛选器均无法筛选上级表。因此,订单表上的筛选器无法筛选客户表。然后,由于订单表为基础表,那么由订单表转化而来的筛选器元组中包含了订单表的扩展表上的所有列,即包含了客户表的所有列,因此只有订单表的扩展表上属于客户表的列上的筛选器才能筛选到客户表,所以从语义上来说就是筛选出有购买记录的客户。

第三题

该题中的度量值包含了两个内部筛选器,这两个内部筛选器分别来自客户表与日期表,那么订单表将被这两个内部筛选器筛选,筛选后剩下的产品将顺着关系箭头的指向去筛选采购表,此外, 日期表上的筛选器也能直接筛选采购表,因此从语义上来说就是计算张三在2020年购买过的产品在2020年的总采购数量。

第四题

在计算列里使用CALCULATE函数,需要注意行上下文转换。由于行上下文转换,所以外部具有日期、客户名称、金额三个筛选器,筛选的内容即为当前行的对应内容,然后CALCULATE的内部筛选器再去修改外部的三个筛选器,最后CALCULATE第一参数在修改后的计值环境里计值。

那么,想要按客户分类累计,则必须要筛选出日期小于等于当前行的日期,且客户等于当前行的客户的数据,即需要两个筛选器。由于第1、3、4个选项中,内部筛选器均不足三个,且没有移除外部多余的筛选器,因此与外部的三个筛选器交互后所得到的计值环境必定包含三个筛选器,因此这三个选项排除。而第2个选项中,由CALCULATE的内部筛选器提供日期的筛选,然后再移除了外部的日期、金额的筛选器,只保留客户名称的筛选器,那么最终CALCULATE第一参数的计值环境就只剩下日期与客户名称的筛选器,恰好是我们需要的计值环境,因此正确答案为第二个选项。

第五题

销售表与日期表的关系为多对多,因此两个表互为下级表,所以两个表的扩展表都只包含自身表上的列。然后,ALL函数在这里是用作筛选调节器,将移除参数所指定表的扩展表上的所有筛选器。由于订单表的扩展表不包含日期表的任意列,所以行标签提供的筛选器没有被移除,因此正确答案为第一个选项。

第六题

该题考察行上下文嵌套时的行上下文转换,计值流程比较复杂,但只需要把握住最大销量这一个关键点,即可快速找出正确答案。该关键点主要在于MAXX函数的第一参数的表所拥有的列,为了在行上下文转换发生后仍能正确计算最大值,那么MAXX的第一参数的表必须包含”足够“的列,当行上下文转换后所得到的筛选器才能完美覆盖其它筛选器,而不影响最大销量的计算,因此只有第四个选项符合要求。

第七题

内层CALCULATETABLE的两个内部筛选器均使用了KEEPFILTERS函数,这一点需要注意。假如两个KEEPFILTERS函数均不存在,那么正确的计值流程就是内层CALCULATETABLE的两个内部筛选器相交后再覆盖外层CALCULATETABLE的内部筛选器。但实际上这个假设不成立,所以需要考虑KEEPFILTERS函数的作用。

KEEPFILTERS函数的作用是更改其参数所指定的筛选器与不包含KEEPFILTERS的自身筛选器的交互方式为相交,然后,在该题的查询中,内层CALCULATETABLE的两个内部筛选器均使用了KEEPFILTERS,因此两个KEEPFILTERS函数的作用都没有触发,内层CALCULATETABLE的两个内部筛选器按正常计值流程进行相交。然后,下一步应该就是覆盖外层CALCULATETABLE的内部筛选器,但由于外层CALCULATETABLE的内部筛选器不包含KEEPFILTERS,因此内层CALCULATETABLE里的KEEPFILTERS发挥作用,将覆盖行为强制更改为相交行为,故正确答案为第三个选项。

第八题

该题与第七题类似,区别在于内层CALCULATETABLE的两个内部筛选器只使用了单个KEEPFILTERS,因此内层CALCULATETABLE的两个内部筛选器在进行交互时KEEPFILTERS发挥作用,强制两个内部筛选器的交互方式为相交。虽然原本就是相交,KEEPFILTERS再强制相交好像有点多余。但这不是重点,重点是KEEPFILTERS已经触发,因此在与外层CALCULATETABLE的内部筛选器交互时已经不存在KEEPFILTERS,因此按原本的计值流程计算,即覆盖行为,故正确答案为第四个选项。

第九题

首先,存在两个切片器,即两个筛选器,这两个筛选器是相交行为,产生的筛选器组合用伪代码表示成如下:

姓名 = "张三" && 性别 = "男" ||
姓名 = "李四" && 性别 = "男" ||
姓名 = "张三" && 性别 = "女" ||
姓名 = "李四" && 性别 = "女"

然后,这两个筛选器属于同一个表,因此Auto-Exist机制发挥作用,将剔除掉那些无效的筛选器组合,因此上述筛选器组合变成:

姓名 = "张三" && 性别 = "男" ||
姓名 = "李四" && 性别 = "男"

最后,CALCULATE把姓名筛选器移除,因此只剩下性别筛选器,筛选的内容为:男

故,正确答案为第一个选项。

第十题

首先,ADDCOLUMNS函数添加的派生列计算的是销售额,因此第3、4个选项排除,然后,SUMMARIZE第二参数返回的是产品名称,所以正确答案为第二个选项。

未经允许不得转载:夕枫 » PowerBI DAX语言能力测试—答案解析
订阅评论
提醒
guest
2 评论
最新
最久 最赞
内联反馈
查看所有评论