专栏首页公众号PowerBI大师上下文系列小讲堂(二)

上下文系列小讲堂(二)

初识行上下文

在介绍两种上下文过程中,我会尽量列举它们在计算列和度量值中的不同表现,来增强大家的感性认识。(本系列所用示例,来自微软官方样本数据库AdventureWorks)

“行上下文”是怎么来的?

1. 创建计算列 2. 使用迭代器(以X结尾的函数)

先来看计算列

上表中,“利润”和“销售额”均为计算列

销售额 = [销量] * [单价]

利润 = [销量] * ([单价] – [成本])

对初学者来说,上述公式能得到正确结果,是天经地义,再正常不过了。因为EXCEL里的列计算就是这样,加减乘除结果怎么可能会错

上面这句话,只说对了一半 错在哪里?错就错在,我们把EXCEL的思维方式套在了DAX身上

在EXCEL里,对于列的计算,我们都是在首行单元格输入公式,通过下拉填充,得出全列结果。每个单元格的公式,除了运算符号不变,单元格引用都不同。该列的每一行,只使用当前行单元格来参与运算

而DAX是以列运算为主,整列就一个公式,怎样确保参与运算的都是当前行,而不会出现第三行销量第五行单价第八行成本算到一块儿去?

之所以整列计算结果都正确,恰恰因为“行上下文”的存在并起了关键作用

只要创建计算列,就会自动创建行上下文,无需手工干预。行上下文就是如来手掌,计算列的运算无论如何也跳不出去

就拿上面两个公式来说,计算列一旦创建,DAX立刻就从第一行开始迭代,同时也创建了一个包含当前行的行上下文并开始计算。计算动作发生之前,行上下文已锁定当前行,因此整列计算才不会出错

那要如何通过度量值来建立“行上下文”?

迭代器

迭代器其实就是迭代函数,末尾带字母X的函数都自备迭代功能,诸如SUMX,AVERAGEX,COUNTX,MAXX,MINX等

上图中,SUMX函数作为迭代器,将创建了一个“行上下文”,并对SUMX第一个参数“销售表”进行迭代,在行上下文中,执行SUMX的第二个参数(单价乘销量的表达式)。因此,在迭代过程中,每行表达式都明确知道自己应该用哪一行的销量和单价来运算

再重复一次: 为什么同样的表达式,在计算列里就能正确执行,而到了度量值里却不行?

因为计算列会自动创建行上下文,而度量值却不会

如果想在度量值内逐行计算该表达式,必须通过迭代函数来人为创建行上下文

还有一点需要注意,“行上下文”里的“行”,是针对数据模型里的表而言(后面会提到虚拟表的概念,虚拟表中也可以使用行上下文),而不是可视化元素下的表格和矩阵。前者是模型原表,后者是聚合后再被筛选过的数据容器。DAX无法直接引用后者的行或列,避免矫枉过正

行上下文入门小结: 1. 计算列和迭代函数都可以创建行上下文 2. 执行计算的行没有储存在公式内部,而是由行上下文定义 3. 行上下文只包含一行(基于行号,永远不会重复),并且在被创建时自动定义 4. 行上下文只用来决定引用目标列的哪个值(即确定计算发生在哪一行) 5. 表格的列并没有某个确定的值,列在表格每一行都有一个值,如果你想让列取得某个值,需要确定这个值所在的行,而确定行的唯一方式是使用行上下文 6. 要使用“行上下文”,要么通过计算列、要么通过迭代函数

(未完待续)

本文分享自微信公众号 - PowerBI大师(PowerBIMaster),作者:东军

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 上下文系列小讲堂(四)

    很多人下意识地的在脑子里把客户ID和订单日期排序,再手工添加个递增填充列就完事——典型的Excel思路

    公众号PowerBI大师
  • 上下文系列小讲堂(一)

    “度量值”和“计算列”的区别,令很多初学新人纠结不已。毕竟大部份人是从EXCEL里绕过来的,遇到问题,习惯拉起公式添加列,操作近乎条件反射,毕竟添加的计算列实实...

    公众号PowerBI大师
  • 上下文系列小讲堂(三)

    先来建个度量值“总销量 = SUM ( '销售表'[销量] )”,把它扔进“条形图”

    公众号PowerBI大师
  • 上下文系列小讲堂(回顾1)

    创建行上下文 1. 计算列:引用原有列,通过计算生成新列 2. 迭代函数 1) 聚合函数+X结尾:SumX,AverageX,CountX,Counta...

    公众号PowerBI大师
  • webservices系列(二)——JAX-WS文件上传下载

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    逝兮诚
  • 开源技术 * IBM 微讲堂 | Kubeflow 系列(观看回放 | 下载讲义)

    本文转载自 开源技术 * IBM 微讲堂 | Kubeflow 系列(观看回放 | 下载讲义) 学习和掌握 Kubernetes 上的机器学习工具集...

    ccf19881030
  • Flask 扫盲系列-Flask 上下文

    上一次我们做了一个简单的在线股票走势网站,今天我们来继续完善下网站功能,并学习些新的 Flask 知识点。

    周萝卜
  • 一文上手最新TensorFlow2.0系列(二)

    【磐创AI导读】:本系列文章介绍了与tensorflow的相关知识,包括其介绍、安装及使用等。本篇文章将接着上篇文章继续介绍它的安装及部分使用。查看上篇:文末福...

    磐创AI
  • 明日开讲 | 腾讯文旅云端大讲堂第二期“智慧”来袭!

    ? 随着国内疫情基本得到控制和好转,文旅产业逐渐进入了疫后复苏阶段。同时,近期国家相关部门多次提出要大力推进包括5G、大数据中心、人工智能在内的“新基建”建设...

    腾讯文旅
  • 怎样从优秀教师变成超级主播?本文全都告诉你

    ? 为了控制疫情,全国各大中小学都推迟了开学时间。教育部门希望各个学校根据自身情况,开展停课不停学的工作。可是,许多在讲台上经验丰富的老师,变成主播之后瞬间各...

    鹅老师
  • 传统企业站开发 - 模块开发

    这几周我们接连讲解了如何实现一个页面的搭建,从最初的各种分析,标签选择,一直到可以实现页面的整体布局。这一系列的知识点讲解中,我们熟知了对一个网页PSD图的处理...

    HTML5学堂
  • JS学习系列 05 - 执行上下文

    在我们前面理解了作用域之后,“作用域链”这个概念就产生了。那么作用域链是什么意思,它又是怎么形成的,跟哪些概念有关系,这就是我接下来几章想和大家探讨的内容:执行...

    leocoder
  • 推导式和Lambda表达式

    的一种独有特性。推导式最主要的特点就是可以从一个数据序列构建另一个新的数据序列。在Python 中目前常用的推导式有

    若尘_
  • 不会画画的开发不是好敏捷教练

    CODING 携手优普丰为大家准备的 6 节“敏捷实战系列直播课程“已经进行了一半,本次系列课程我们请来了中国敏捷圈的“半壁江山”,大佬们都自带光环而且幽默,直...

    CODING
  • 小程序成地表最热门专业,这 3 家在线培训课堂哪家强?

    知晓君
  • 郭卓惺:互动课堂的搭建实例及相关领域应用

    随着在线教育覆盖面的增加,互动课堂授课方式正在向多样化发展,为了适应新形式的发展,腾讯视频云推出了全平台覆盖的互动课堂解决方案。为客户打通了直播、实时音视频、点...

    云加社区技术沙龙
  • 周锦民:腾讯在线教育视频互动直播间技术实践

    今天分享的主题分三个部分。第一部分,跟大家介绍一下腾讯课堂和企鹅辅导这两款产品。第二,讲一下课堂直播系统,和腾讯云这边的具体实践案例。第三,谈一下在线教育的房间...

    云加社区技术沙龙
  • 【迪B课堂】数据库修炼青铜篇のMySQL概览

    点击上方蓝字每天学习数据库 【迪B课堂】为腾讯云数据库产品经理迪B哥开设的面向数据库开发者、数据库运维人员、云端运维人员的系列培训课程,旨在帮助大家从入门到精...

    腾讯云数据库 TencentDB
  • 关于其他选择器以及选择器优先级详解

    上周我们讲解了页面浮动之后产生的问题,以及针对这个问题所采取的措施——清浮动,同时罗列了好几种清浮动的方法。那本周我们再来继续上次给大家分享的如何找标签的问题,...

    HTML5学堂

扫码关注云+社区

领取腾讯云代金券