发布:2024/11/14 12:29:15作者:管理员 来源:本站 浏览次数:298
一、HASONEVALUE函数
《火力全开》笔记16.进阶条件判断函数 我们对今天要讲的两个函数已经进行了案例讲解,今天来讲原理。
HASONEVALUE函数最常用的功能:让总计/小计显示为空
表名:Sheet1
【度量值】计算季初至今
行标题和值设置图
2021年合计和总计显示的是2021年最后一个季度的值,这是正确的
如果你想将其变成2021年全年总和与整表总合,详见《DAX神功》第2卷第4回
如果你想让他变成空,就可以使用我们学过的If+HASONEVALUE 组合
【新建列】月 = MONTH('Sheet1'[日期])
【度量值】QTD改 = if(HASONEVALUE('Sheet1'[月]),[QTD])
行标题和值设置图
套公式大家都会,但是今天我们讲原理,以上面的案例为依据,我们解读一下:
【度量值】Values = COUNTROWS ( VALUES ('Sheet1'[月]) ) = 1
【度量值】DISTINCT = COUNTROWS ( DISTINCT('Sheet1'[月])) = 1
【度量值】HASONEVALUE = HASONEVALUE(Sheet1[月])
以上三个公式等价(人为制造障碍除外,比如一端表没有的主键,在多端表外键中出现了,这属于不懂数据库基本常识,即便是人为失误,也应该在数据清洗环节处理干净)
原理学会了,我们拓展一下思路:假设只有一个月份就返回这个月份应该怎么做?
【度量值】拓展思路 = if(HASONEVALUE(Sheet1[月]),DISTINCT('Sheet1'[月]))
// 《DAX神功》第1卷第10回 将表用作标量值
上面的案例,我们使用IF+HASONEVALUE组合,我们返回的是:如果月份去重后只有一行,我们就返回这个月份,否则返回Blank()。如果我想返回「二哈到底哈不哈」怎么办?
【度量值】拓展思路 = if(HASONEVALUE(Sheet1[月]),DISTINCT('Sheet1'[月]),"「二哈到底哈不哈」")
二、SELECTEDVALUE函数
上面的案例我们使用了,
IF(HASONEVALUE(字段名), VALUES(字段名),否则返回什么)
或
IF(HASONEVALUE(字段名), DISTINCT(字段名),否则返回什么)
在这种情况下我们也可以使用SELECTEDVALUE函数代替IF+HASONEVALUE组合
注意:只限在这种情况下
如果某字段去重后只有一行,就以标量值返回生成的表,否则返回空,如果注明了否则返回什么就返回什么,例如「二哈到底哈不哈」
IF(HASONEVALUE(字段名), VALUES(字段名),否则返回什么)
或
IF(HASONEVALUE(字段名), DISTINCT(字段名),否则返回什么)
等价于
SELECTEDVALUE(字段名,否则返回什么)
【度量值】拓展思路1 = SELECTEDVALUE(Sheet1[月],"「二哈到底哈不哈」")
三、SELECTEDVALUE函数应用
讲这个应用之前我们先复习一下:Switch
DAX中的Switch比任天堂的Switch要厉害多了,我为了找到二者区别,在2021年1月买了一台任天堂的Switch做对比,发现任天堂的Switch太LOW了,他只能在掌机和主机模式下切换。相比DAX下的Switch,任天堂还需努力哦:)
如上图所示,如果Switch第1参数返回的是1,就返回"一月";以此类推
我们看一下《火力全开》中的案例:
表名:Sheet2
【新建列】参数表 = {"销售数量","销售金额","毛利额"}
详见《DAX神功》第1卷第3回 表名规范与表构造函数
我们将参数表的Value字段放到切片器上:
并且在设置中将切片器单选:
我们每次是不是只能选一个?
【度量值】SELECTEDVALUE = SELECTEDVALUE('参数表'[Value])
再对比我们的Switch函数:
切换 =
switch(SELECTEDVALUE('参数表'[Value]),
"销售数量",sum('Sheet2'[销售数量]),
"销售金额",sum('Sheet2'[销售金额]),
"毛利额",sum('Sheet2'[毛利额])
)
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4