DAX基础4:DAX入门,浅谈DAX中的上下文

浏览: 2208

​这里写的DAX,就是随便写着玩的。但自从有很多人突然关注了,我有点忐忑。心怀敬畏。只能说我尽力去写了,大家随便看看,有个印象,也许哪天用的上,最大不了也可以算个谈资。如果跟着学习的,请也一定放心。肯定都是正确的东西,也一定都是毫无保留的分享。有意见的可以私信,需要样例的也可以私信。就大家一起共同进步吧

什么是DAX呢?DAX是Data Analysis Expressions的缩写。如果你用

Power BI Desktop,Azure Analysis Services,SQL Server Analysis Services或者Power Pivot in Excel这些工具,然后要根据需求,新建字段或者数据值,对字段进行操作和函数作用的语法就定义在DAX这个函数,运算符和常量的集合里面。所以三点:1,用在特定的工具里;2,DAX是一个函数,运算符和常量的集合,3,DAX作用在新建字段,计算值或者查询数据(query)。

It is simple but not easy.

学习DAX,经验上来讲,两个网站就够了。

一是微软的官方文档

https://docs.microsoft.com/en-us/dax/data-analysis-expressions-dax-reference

二是两个意大利人的牛叉叉学习网站,不只有DAX内容

https://www.sqlbi.com/

插播广告下,学DAX一般都知道下面这两个意大利人,还有他们的SQLBI。基本上你搜索DAX关键字,很多都会拐到他们网站上去。这个网站不只是分享DAX还有很多其他的内容,有空可以看看。网站上还有一个DAX基础学习的免费培训。讲得挺不错的。我后来看到微软官网上的那个视频也是Alberto做的。这个同学对我的影响蛮深的,哈哈哈~~

er...怎么学还有资源都告诉你们了,就这些了。DAX Share怎么分享DAX基础呢?DAX基础不会是完全翻译复制微软的官方文档,也不会完全翻译复制SQLBI上的入门培训。这样有点不太行...我这水平的英语去翻译,估计很难看,而且我懒,太麻烦的不行~~不过DAX Share的DAX基础,基本上也是参考这两个网站的东西,只是外加些实例和自己的经验总结什么的。你让我凭空造一个DAX的内容,我也做不出来啊。

DAX基础分享的计划是先介绍Evaluation context,然后用例子说明Calculate Column和Measure的区别,再然后就是介绍函数。介绍函数呢,会先设定一个需求主题,然后在这个主题里面重点介绍应用在这个主题的函数。然后对相关的函数来个对比研究啥的。函数说完了,然后说建模型,以及模型相关的DAX函数,然后是query里面的用法。大概就是这样了。现在微信还没有开放这个公众号的留言功能,可以私信。

今天就随便聊聊Evaluation context吧。就是那个很多人觉得有点困难的上下文。不确定能不能真的说明白,先大概说下,然后在后面的实例中多强调几次,估计也就理解了。

Context翻译过来是上下文,这个翻译的挺有意思的。小时候学语文的时候,我们经常说要根据上下文的内容来分析。在此DAX中的Evaluation contexts就是根据你看到的,显示在表中的所有数据的来进行的数据分析。他包括并且只包括两种上下文,一个是Filter Context,一个是Row Context。两种上下文是结合使用来体现Evaluation Context。Filter context就是不考虑迭代计算的时候,注意到行,列,报表的过滤筛选对数据的影响,row context就是考虑迭代计算的时候,逐条计算,然后相加。就是这么简单。举个例子更直观一些。

就直接拿DAX基础3的样例,直接拖拉了如下字段。没有设置filter,没有slicer。就一个单独的category。

然后在显示的这个表里面,我先要数一数每个category 的数量。DAX定义如下:

num of category = COUNT('Product'[Category])

得到结果如下。在写这个公式的时候,其实就是应用到了filter context.

在当前的你可以看到的数据范围内(这个是Evaluation context的前提,当然也是思考filter Context和row context的前提了。),例子简单的,只有一列Category,然后不是迭代表中计算,所以不用想row context,那就是filter context。然后因为只有列的内容,所以filter context只考虑列的影响,按照每一列来分组计算。就是这样。

当你写DAX表达式的时候,你可以先想想,你要逐行计算吗?要,就是迭代函数,然后想想Row Context,是一行一行的计算然后汇总。然后再想想迭代函数之外,是否要考虑对某些字段出现在不同行列或者筛选情况下控制,这个就是filter context。也许你不是很明白这个上下文,其实没有关系。可能概念不是很懂,但是你在实际书写中已经在融入这些内容和概念了。当然,我也会在接下来的内容里面,随便唠叨唠叨吧。so easy!

欢迎关注分享DAX Share


推荐 0
本文由 懒胖子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

DAX,感觉好难:(
为什么有这样的感觉呢?

要回复文章请先登录注册