dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值
文章写起来真的也挺麻烦的。坚持坚持!加油加油!
本次分享的需求描述如下:
在Power BI中创建一个页面,页面显示一个Table和两个Slicer。其中Slicer的内容也列在Table里。Table里需要一个计算值,这个计算值要求对Table中的一个非Slicer里的字段做汇总计算。
转换成显示页面如图所示。
熟悉的Product数据表。
两个Slicer分别是Brand和Color。同时Brand和Color还显示在Table里面。计算的数值内容是统计不同的Manufacturer生产多少种Product,即针对且只针对Manufacturer做分组(group by)计算Product。当选择不同的Brand和Color时,数值也要根据实际显示的Product再计算对Manufacturer做汇总。
DAX分享9效果图https://www.zhihu.com/video/1110165158554456064
其实这种需求还是很常见的。不知道大家有没有什么好的方法。目前来说我觉得最简单的方法就是定义变量了。先把最简单的方法说一下,然后再把如果不用变量会遇到的问题分享一下。
var test =
VAR manu = MAX('Product'[Manufacturer])
RETURN
COUNTROWS(
FILTER(ALLSELECTED('Product'),'Product'[Manufacturer] <= manu))
就这么定义一下就ok了。so easy!
下面我们聊一聊如果不用变量可能出现的问题。
不考虑变量的话,首先对于针对其中一个字段做group by分组计算的话,这样改写filter context的行为,我们首先可以想到的是用CALCULATE函数。因为只针对Manufacturer,所以想到用ALLEXCEPT函数可以得到如下数据值列:
count per manufacturer = CALCULATE(COUNT('Product'[Product Name]),ALLEXCEPT('Product','Product'[Manufacturer]) )
er,这样做当然是不全面的。因为两个在Table里但是也显示在Slicer字段,如果选择了不同的Slicer数据时,count per manufacturer数据值是不会发生变化的。
比如,选择了Color的Azure,在Table里面显示了14条Product Name的的数据,并且都是在一个Manufacturer下面,所以,数据字段我期望的显示应该是14而不是132.
这个count per manufacturer就像是Manufacturer的属性一样了,第一次计算好了之后,就不会变化了。现在我们开始考虑怎么在数据表里面接受外来filter的影响。首先想到的函数是ALLSELECTED()。但是,ALLEXCEPT函数是不能内嵌ALLSELECTED函数的。ALLSELECTED可以考虑到外部的筛选,但是如何做group by分组计算呢?此路不通。然后我想到了万能的CALCULATE+FILTER,FILTER里面可以有ALLSELECTED函数,但是后面的参数这么实现动态的Manufacturer的抓取呢?
如果看过我之前分享的HASONEVALUE的同学,会不会想到用这个HASONEVALUE呢?我通过HASONEVALUE去抓取Slicer是否被选择,然后再分情况计算,就像之前DAX分享8里面的做法那样呢?嘿嘿,挺不错的吖~~不过,也不对。这里重点说一下!HASONEVALUE或者HASONEFILTER说,如果数据字段被筛选了,就是TRUE,没有被筛选就是FALSE。什么要被筛选了呢?在Slicer里面选择算是,在Table里面作为字段也算是~~~也就是说,对于这里的Brand和Color,HASONEVALUE的返回值永远都是TRUE。是不是很酸爽很好玩。
er,如果按照SQL逻辑来说,我比较期望,让我的查询结果,先和Brand,Color做关联,然后再去计算group by的分组计算。想法是好的,但在实现的时候,报表其实做的是一个over partition的开窗计算,先计算好结果,然后又成为了一个属性。
好吧,现在你明白了吧。有的时候,比如动态查询的时候,就是非变量不行的时候了。记住!敲黑板!针对动态的filter context的时候,首选变量表达式。so easy!
欢迎关注DAX Share!
dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值相关推荐
- dax 筛选 包含某个字_Power BI 利器——DAX
定义 数据分析表达式(DAX)是一种函数和运算符库,它和Excel的公式非常类似,可以在 Excel 中的 Power BI Desktop.Azure Analysis Services.SQL S ...
- dax 筛选 包含某个字_筛选状态(ALL与REMOVEFILTERS)
这一章比较绕,但是帮助我们理清切片器的筛选状态以及主要函数对于公式筛选上下文的改变. 1.切片器的筛选状态 切片器的全选与全不选的状态的区别,我们可以看下图: 全不选 全选 多个点击筛选 逐个点击至全 ...
- 【华为云技术分享】实战案例丨代码优化:如何去除context中的warning?
在一个java语言群里面,有人抛了这么一段代码出来,问题是出现了下下图中的warning,问有什么好的方法消除 这种强转都是因为类型链条断掉了,写入的时候擦除了类型,读出来的时候也就只能强转了,那个i ...
- 【使用指南】Excel筛选包含指定文本所在的整行
使用Excel筛选包含指定文本所在的整行 最近遇到了需要收集到的信息进行筛选的问题,但苦于对excel一窍不通,赶紧学习一波. 现在记录与分享一个excel的小技巧,利用excel对信息进行筛选.小明 ...
- excel如果包含某个字就显示_Excel公式基础知识
批量输入公式 选取要输入的区域,在编辑栏中输入公式,按CTRL+ENTER即可批量填充公式. 2批量修改公式 如果是修改公式中的相同部分,可以直接用替换功能即可. 3快速查找公式 选取表格区域 - 按 ...
- 4000字干货分享|一文学会搭建炫酷可视化大屏
在一次浏览网页的过程中,小编偶然间发现一款国产的BI工具永洪Desktop,它完美地解决了上述Excel制作可视化大屏的弊端.这一期内容,小编会以星巴克在中国地区的咖啡销量数据为例,利用永洪Deskt ...
- 正则_验证文本框输入的姓名是否规范(包含生僻字,不包含中文符号与其他字符)...
1.可用于检查 文本框 输入的姓名 是否规范. 2.包含生僻字 3. 不包含 各种中文符号与其他符号(最后有详细的字符介绍). 最终正则(只能是中文.字母.英文符号 .`· ) ^(?!.*?[\u3 ...
- 判断 ttf 字体文件是否包含某个字
在Unity中,如果指定的字体不包含某个字,Unity就会从 自带的 Arial 中读取字形来创建这个字,本意是好的,但是总是会有问题. 在我们游戏中就有这样的问题,自己制作的微软雅黑字库不包含繁体字 ...
- 正则_验证文本框输入的姓名是否规范(包含生僻字,不包含中文符号与其他字符)
1.可用于检查 文本框 输入的姓名 是否规范. 2.包含生僻字 3. 不包含 各种中文符号与其他符号(最后有详细的字符介绍). 最终正则(只能是中文.字母.英文符号 .`· ) ^(?!.*?[\u3 ...
最新文章
- Linux终端关闭屏幕显示,使用命令行关闭监视器
- maven配置默认jdk版本
- 最近用unity5弄的一些渲染
- 一个Spring入门小案例
- 国际经验和政策-国际农民丰收节贸易会:面对现代大农业
- 开源微服务运行时 Dapr 1.0 版本
- 查询复旦大学往年的考研成绩
- CodeForce 2A —— Winner
- 信息学奥赛一本通(1406:单词替换)
- c语言趣味小程序,一个有趣的小程序
- [雪峰磁针石博客]2018最佳人工智能数据采集(爬虫)工具书下载
- Java之品优购课程讲义_day05(4)
- STC学习:导航按键与数字按键综合控制数码管
- js如何实现扫描身份证识别_JS调用阿里云OCR身份证识别
- 树莓派能否替代linux开发板,12 个可替代树莓派的单板机 | Linux 中国
- PDF文件打印设置,看这篇就够了
- ddr走线教程_DDR3 Fly By走线精讲
- signature=5a537e48de3abe15561f136edabc54dc,Visual Signatures in Video Visualization
- 怎么用显卡计算_会议租车价格多少钱,上海会议租车费用怎么计算?
- 解读2017之容器篇:后Kubernetes时代
热门文章
- 【剑指offer】面试题15:二进制中1的个数(Java)
- Leetcode--17.电话号码的字母组合
- c#调用c++的dll接口
- 设置线程堆栈大小_哇擦,传说中的堆栈溢出和快速排序
- python from __future__ import division
- C++编程(一):匈牙利命名法
- MFC中如何给对话框添加背景图片
- PCA对特征点描述子降维
- RecyclerView拖拽排序和滑动删除实现
- android oreo 源码,android – Oreo:如何在源代码中找到所有受限制的系统调用?