PowerBI之DAX神功番外篇28. 换了个表格一样的问题
网友提问:

PowerBI中有两种语言,一个是M函数,一个是DAX函数,我们分别使用两种语言处理
我个人感觉,他提到PBI应该是让我用DAX函数实现,但是出于礼貌,我就都做出来了。
速度问题我不管,我的工作不是卖软件,我是使用软件的人。对我来说,每次需求都是随机的,且是一次性的。我要快速的得到答案,而不是研究怎么优化代码,这与每个人的工作性质不同而决定。
比我是鹅厂,我们马总30分钟后要开新闻发布会。马总虽然是创始人,但是他不能什么事都自己做,如果都他自己做还要我们这些人干嘛?有一个临时需求,马总秘书找我,我说不行,我是专业的,你这个需要我要做项目,秘书说我就要结果快点时间来不及了,我说不行,我要考虑代码是不是在最短时间内跑完。你们知道我的结果是什么?
高手代码1秒运行完毕,孙兴华代码跑了10分钟,但是高手思考那1秒运行的代码需要1小时,孙兴华写这跑了10分钟的代码只需要3分钟。小学生也能算出来哪个快。
如果你是卖软件的,给人家做项目的,那你一定要考虑优化,听说过A卡战未来吗?
当我的显卡能盖住这款游戏时,我是不会跟着B站UP主学参数设置优化的,什么时候我自己配置盖不住了,我又不想换电脑,这时我才会去研究。因为我的配置能盖住我自己的需求,而且我的需求都是一次性的。
不同的工作性质有不同的路,大家不一定都走相同的路。你去上班,总不能做电脑前面发呆呀。网上说某懿看到某亮在城楼上弹琴,他转身走了,他知道自己的作用。某信就不懂,故事结局大家也知道。
一、M函数
1、使用PowerBI导入数据

2、转置表

返回结果

3、选中Clolumn1这列,逆透视其它列

返回结果:

4、删除属性列
返回结果:

5、关键的一步
对【值】这列分组,对数据列每个Table二次分组,组内计数
并转置数据列的每个Table, 再对其升标题
返回结果:

6、展开
需要动态列自己写,前面多次讲过,这里不再重复。

返回结果:

7、替换
选中要将null替换成0的列

返回结果:

二、DAX方法(不考虑总计)
今天网友的问题与上一期网友提问完全一样,只是他把表改了
1、导入数据

2、我们需要: 北京、上海、广东 这样三个去重后的值
套路开始了,《DAX神功》第3卷第7回讲了Union函数


我们对上面这张tb1先去重,再筛选非空,再取指定列

代码如下:
3、写另外三个度量值
我以【火车1】这个度量值为列,再说一下他的运算顺序
我们有两张无关系的表
第一行:SELECTEDVALUE('新建表'[城市]) 是:{"北京","上海","广东"}

当我们把左表城市列放到矩阵行标题上

上面我们筛选出来的:北京、广东、上海 用VAR保存成变量x,传递到第2行替换x
第二行:CALCULATE(count('表1'[火车]), FILTER('表1',SEARCH(x,'表1'[火车],,BLANK())))

因为原表中火车列没有广东,但是矩阵行标题上有,所以返回blank()

这时我们需要判断,当第二句为blank时 返回0 ,所以就有了第三句话

最后一句就是让总计为空,这个不解释了,PowerBI课程中经常会用到。其它两个度量值也是一样的
放到矩阵中返回结果:

如果想让城市排序,我们也讲过《火力全开》倒数第2集,讲过中文排序
三、DAX方法(考虑总计)
上一回我们讲过了
https://www.bilibili.com/read/cv19439186/?from=readlist

我的方法不一定快,不一定好,我相信每个人都比我聪明,他们会有更好的方法,但是有一个道德问题,高中老师永远不会因为小学1+2+3... 而高中用等差数列,就说小学老师误人子弟,从1949到现在也没听说过。

PowerBI学习顺序:
【1】Access基础篇,学习s01开头的集数,理解表格数据规范和表关系
https://www.bilibili.com/video/BV1tf4y117Sh
【2】PowerBI火力全开,学习函数语法,与应用场景
https://www.bilibili.com/video/BV1qa4y1H7wp
【3】DAX神功,学习DAX函数原理
https://www.bilibili.com/read/readlist/rl442274
【4】PowerBI可视化图表