首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

阅读圣经丨筛选上下文与行上下文

在圣经中曾提到过,DAX计算逻辑有两种上下文: 行上下文与筛选上下文。 什么叫行上下文? [1240] 图片上原始数据,一行接着一行排列,这个就叫行上下文关系。说白了就是原始数据中存放位置。...[1240] 在这个图片中,TOPN显示受到切片器筛选影响,排名大于11不显示,这个就是筛选上下文,因为有一部分数据不符合筛选要求被踢出去了。...TOPN这个虚拟表提供了一些值,本身不符合筛选逻辑值,直接就被PASS掉了。这里已经进行上下文转换了。 最后,SUMX只对总计生效。它只计算可见项目的可计算值。...像是一些排名符合要求组合,SUMMARIZE它提供环境,TOPN提供值,由SUMX进行二者汇总。...这样的话,三者就完成了: 行上下文转换筛选上下文→提供筛选计算值→汇总计算 有时候写DAX经常因为上下文考虑不周到,导致计算结果出问题,没有太好解决办法,只能说经历多了,写DAX多了,才会慢慢让上下文这个概念长存于心

1.2K20

Extreme DAX-第4章 上下文和筛选

定义计算 DAX 公式在表中一行分别计算一次。计算结果通常特定于对应行。原因是,同一表中其他列中值被用在计算中,而这些值在每行中一般是不同。...我们希望能够将每个产品销售额与产品 373 销售额进行比较。您可以将其视为产品373是我们公司最具战略意义产品,我们希望将每个产品销售额表示产品373销售额百分比。...使用这些函数一般复杂性在于,它们结果就是一个表。这意味着没有可用于查看结果标准输出机制,这一点与度量值不同,我们可以创建一个 Power BI 视觉对象以查看 DAX 度量值结果是否符合要求。...函数第二个参数是一个表表达式,该表达式针对第一个参数中表中一行进行计算。如果此表达式恰好特定行返回空表,则该行不会包含在结果中。...然而,在 GENERATE 函数中,我们却希望每个城市重新确定产品列表,因此结果必然是错误

5.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

Thinking in DAX with PowerBI - 逻辑框架 - 数据结构

这里常用一个 DAX 函数有:VALUES,这用来从一个表中提取一列(会自动非重复化),例如: ? 这里请注意两点: 1、度量值定义是正确; 2、度量值使用结果也是符合预期。...注意 这里对于[KPI]计算,会在迭代'Product'[Product]时候,发生上下文转换。即:正在计算的当前产品所在行,会转换为对某个产品筛选作用于整个数据模型进行对[KPI]计算。...可以直观地想象成:在迭代每个产品时,在当前产品,向下捞取对应订单计算。...因此,上下文转换本质其实正是:宏观迭代到微观筛选转换。在数据模型中,很多计算的确是要建立在不同层面之间,那么这种宏观迭代到微观筛选转换便是在不同层面取数核心逻辑。...结合算法结构,我们不难看出: 计算方法,依赖于数据结构 计算方法,构建出数据结构 数据结构,支撑计算方法 数据结构,由计算方法给出 他们之间有紧密共生关系,这希望大家可以在实践中加以体会理解。

1.6K32

一个简单现实案例挑战 PowerBI 水平测试 - 深度解析

问题来自于真实业务场景,而且非常自然,如下: 某大型连锁企业(可能拥有1000个门店),运营层级分为: - 大区 - 城市群/运营 - 门店 每个门店由店长管理,店长管理被评价得到KPI。...答题要求:非常简单: 不改变数据模型,按业务预期图,直接写度量值即可。 答案请严格对比: ? 不考虑 TOPX % 下也可以达到排名。...在 Table AU 中,可以在其视图层构建计算。例如: ? 以及: ? 以及: ? 我们暂且不用纠结这里原理,但很明显,这是符合“所见即所得”原则。...我还记得在一年前,他很认真地和我交流 DAX 计算问题,对很多 DAX 核心概念做深入思考,现在可以这么快做出这类计算,真的可能是基于有很扎实 DAX 基础了。...2、设我们要定义度量值叫做 M,M 在发生计算时,会受到上述 1 所说筛选环境影响。我们现在思路是,在 M 定义中克隆一个视图层筛选现场环境来,我们称为:视图筛选环境克隆。

2.6K31

DAX 2 - 第一章 什么是 DAX

理解数据模型 数据模型,是若干个由关系连接表构成。 我们都知道表是怎样,即包含数据若干行,每一行都被分成若干列。每一列都符合一种数据类型,并包含一个信息。我们通常将表中一行称为记录。...当一列中一行都有一个唯一值时,它被称为表键(不管你有没有用它来创建关系)。 关系可以形成链条。每个产品都有一个子类,每个子类都有一个类别。因此,每个产品都有一个类别。...理解关系方向 每个关系都可以有一个单向或双向交叉筛选筛选总是从关系一端进行到多端。如果交叉筛选是双向,也就是说,如果它有两个箭头,筛选也发生在从多端到一端。 一个例子会帮助理解这种行为。...因此,尽管销售表已经被筛选,单向关系类型导致该筛选不能传递至 Date 表。 如果我们将日期表和销售表之间关系调整双向关系,结果图如 1-4 所示: ?...每个 Tabular 模型里表,既不是度量也不是维度,它是一个可以计算值,扫描,筛选,对里面的值进行求和表。DAX 一切都基于两个简单概念:表和关系。

4.5K30

Extreme DAX-第5章 基于DAX安全性

有待大家根据自己实际业务场景,实现更加符合要求安全性要求。 全文目前已经翻译完成,目前正在进行校稿完善阶段。 后续本公众号会按照节奏公布相关文章,感谢大家支持。...DAX 安全筛选器确定此安全角色中用户将在表中看到哪些行。你可以将 DAX 安全筛选器理解,在表中添加一列,然后判断每一行“真”(TRUE)或“假”(FALSE)。...因此,Employee表与fHours表有两种关系,其中有一非活动关系。在本示例中,fHours和Employee两个表之间关系被设置非活动状态。 那么,如何计算此模型中直接工时呢?...实现这一要求 DAX 公式如下。...这意味着并不是你能想到每个安全策略都可以实现。例如,你用户可以要求按个人查看销售信息,但只能按团队查看销售利润。由于这两个度量值计算都来自同一事实表数据,因此无法满足此需求。

4.8K30

DAX基础表函数

此外,在《DAX权威指南》第2章中提到过,可以将变量定义DAX表达式一部分。当时,我们使用变量来存储标量值。但是,变量也可以存储表。...通常,我们不能将表函数返回结果作为度量值或计算值。度量值和计算列都要求结果标量值。但是,我们可以将表表达式结果分配给新建表(Calculated Table)。...在这种情况下,DAX提供了一为此目的而设计函数:ALL、ALLEXCEPT、ALLCROSSFILTERED、ALLNOBLANKROW和ALLSELECTED。...VALUES函数返回在当前筛选器中计算不同值。如果在计算列或计算表中使用VALUES或DISTINCT函数,则它们与ALL函数行为相同,因为没有生效筛选器。...图19  使用ALLSELECTED函数,在基于销售额计算百分比时只考虑外部筛选器 总计恢复100%,报表数字反映是占可见总计(Visible Total,即只考虑除当前视觉对象之外所有筛选

2.5K10

Power BI: 对事件进行排序

文章背景:最近在学习DAX权威指南第16章,DAX高级计算。其中提到了一种相当常见计算模式:对事件序列进行编号,以便查找第一个、最后一个和上一个事件。...计算实例:我们需要在Contoso数据库中分客户对每个订单进行编号,目的是得到一个新计算列,其中1代表客户第一个订单,2代表第二个订单,依次类推。每个客户各自第一个订单编号都是1。...需要呈现结果如下图所示: 图1 在同一个客户所有订单中,Order Position包含每个订单相对位置 1 计算订单号小于或等于当前订单号所有订单数量 订单号是唯一,它值会随着订单增加而增加...在CALCULATE中,它使用订单号和由计算列生成上下文转换作为筛选器。对于Sales表一行,引擎必须筛选Sales表本身。因此,它复杂度就是Sales表行数平方值。...首先,CustomerKey和Order Number唯一合数量2.6万,而不是10万。此外,通过避免上下文转换,优化器可以生成更好执行计划。 这个公式复杂度还是很高

27810

Power BI 计算理解(一)

但有一个问题,该度量值显示格式只能设置单一样式(如利润率想设置百分比,其他设置逗号分隔整数样式),如果使用DAX中format函数分别指定样式,其结果又变成了文本,无法参与后续计算,在视觉对象中呈现会有许多限制...并将收入计算项定义度量值 [收入]、利润计算项定义度量值[利润]、利润率计算项定义度量值[利润率] 上表中每一行对应一个计算项,每一个计算项可以定义值及值显示格式,与使用辅助表类似,也需要将上述...正因为计算会影响当前页面所有受[Name]列筛选度量值,因此,原使用辅助表构造值也会发现变化,如下: ?...如表1中度量值虽然是通过辅助表与DAX重写了,但是由于计算表[Name]列中“收入”是选定状态,在交互筛选作用下,表1表2中度量值都会传入计算,然后返回收入计算项定义值(表达式),也就是显示...列“收入”项所指向定义表达式(即度量值[收入])所替换,也就是说上面两个度量值最终都被替换成了[收入] 可以将计算项理解 特殊自定义函数 ,其输入参数度量值(取决于该度量值是否受计算表列筛选影响

2.3K20

学习CALCULATE函数(一)

[1240] 有位大佬曾经告诉过我,如果你深入理解了CALCULATE,那么你就相当于理解了DAX函数基础,因为它是DAX函数中最灵活多变,也是适应性最强函数之一。...第一参数是计算表达式,可以进行各种聚合运算 从第二参开始,是一系列筛选条件,可以为空,如果是多个筛选条件的话,用半角逗号分隔开 返回结果筛选出所有筛选条件交集,并根据第一参表达式计算出相对应结果...[strip] 编写如下代码: 数量= SUM('表'[列])//这里我替换成了示例文件 如下图: [1240] [1240] 呈现结果如图,很明显,我们想要是分别计算销售和退货,这样才符合我们对销售数量计算...VAR是将变量转换为常量,方便根据外部筛选计算,同时可以节省代码空间;SQ在这里公式意义是聚合在表中销售方式“销售”数量,HQ是聚合“退货”数量,并且还有在最后进行总数量计算。...在这里就是运用了CALCULATE第二参筛选,使其符合我们心中预期计算。(注释:CALCULATE中参数也可以是常量,常量是不需要嵌套FILTER,只有是变量才需要嵌套。)

1.1K30

DAX进阶指南》-第6章 动态可视化

6.2.1基本KPI度量值 首先,我们 KPI 创建三个基本 DAX 函数。 1.每月销售额将由 DAX 表函数 SUMX 计算,代码如下。...如果你需要有关 DAX 筛选器函数更多信息,请参见第4章。在此过程中,我们将根据我们特定需求调整此基本计算,代码如下。...可以使用DAX公式将辅助表创建计算表。...图6.8 辅助轴表 在创建此计算公式中,定义了三个DAX变量,每个变量创建辅助表一部分。以下是第一个变量。...由于DAX公式结构方式,对于标签类型每个选项,都会创建与另一个表(城市、客户或产品)虚拟关系。这些表上真实关系将筛选器传播到模型中其他表上。

5.6K50

Power BI: 理解上下文转换

换句话说,行上下文转换就是把行上下文转换成一筛选器,这些筛选器再进行交互,然后产生筛选上下文,因此行上下文转换产物就是筛选上下文。...那下面就通过一个简单例子来介绍下,具体如下图所示: 对于计算列SumOfValue,由于在计算初始计值环境里不存在任何筛选器,所以筛选上下文里数据所有数据,故导致每一行结果都是总计值。...由于上面这个例子中一行都不重复,所以行上下文转换后所得到筛选筛选出来可见数据就只有一行,即当前行数据,故SUM函数汇总后值与当前行值一致。...,结果如下图所示: 在计算列里引用度量值,会使行上下文发生转换,变成筛选上下文;引用度量值会使行上下文发生转换原因是DAX引擎自动添加CALCULATE函数。...但只要按照行上下文转换顺序,依次地处理每个筛选交互即可保证不出错。

57871

Extreme DAX-第3章 DAX 用法

举个简单例子:通过将销售产品数(Quantity)乘以每个产品价格(Price)来计算销售额(Amount)。注意,在 DAX 中列名要写在方括号内。...或许,可以计算每个产品平均价格?答案是否定:平均价格应按销售产品数量加权,因此 [Price] 列直接平均值是不正确。...在实际业务场景中,大部分所需见解都需要通过复杂聚合运算来实现,基本聚合运算完全无法满足要求。...Customer[Region] = "Europe" 特定安全角色设置时,此 DAX 安全筛选器将使该角色中用户只能查看欧洲区域中客户以及与这些客户相关数据。...由于 DAX 时间智能函数存在,日期表在模型中具有特殊地位(有关于这些函数详细信息,请查看第 4 章“上下文和筛选”)。 日期表必须包含要分析日期区间中所有日期,并且每个日期占用一行

7.1K20

Power BI:在DAX中转移筛选

文章背景: 最近在学习DAX权威指南第15章,高级关系。在某些情况下,我们很难在两个实体之间创建物理关系。可喜是,DAX表达式有多种方式模拟这种关系。...在图1中,你可以看到该表摘录信息。 图1 该表中包含每月、每个品牌推广记录 需要注意是,表中每月具备唯一值列。因此,这个表不能位于关系一端。...我们可以逐行迭代Sales表,在每一行上检查正在销售产品品牌是否在该月进行过广告宣传。下面的度量值可以作为解决方案,但它不是最好。...4 使用FILTER函数转移筛选DAX开发人员还有第四种选择:使用FLILTER和CONTAINS。...5 性能比较 借助DAX Studio,我们可以计算四个度量值各自运行时间,从而更直观地比较四种解决方案性能。

33621

一个度量,是怎样炼成? | DAX重要思路

每个表里都有哪些数据? 哪些表跟哪些表之间是1对多关系? 表和表之间筛选关系是怎样? 一般来说,对于自己日常工作中数据模型,应该要做到烂熟于胸,在这种情况下,自然直接跳过这一步。...二、人为调整筛选计算 对于占比来说,涉及到所有产品总金额问题,也就是说,在结果表一行里,都要计算所有产品总金额,然而,在结果表一行里,自动筛选出来数据却只是当前行产品下数据,并不足以支持所有产品总金额计算...在DAX里,大量表函数、调节器函数,就是为了配合CALCULATE函数,从而实现模型无法自动化筛选情况下筛选器调整(增加、修改、删除……)和计算。...显然,如果我们“删除”了图表中“产品名称”筛选影响,这样,在图表每一行筛选数据将是所有产品数据。而要删除筛选影响,很简单,通过ALL函数即可。...后面,我将结合更多案例,紧紧围绕“筛选-计算核心思想,把写度量具体思考过程写出来,希望大家学习DAX提供一些参考。

62110

PowerBI DAX 新函数 OFFSET

从中挑选产品类别为 “办公用品” 。 对上述结果依次在 T 中向下移动一行,取出这个子集。 这么复杂逻辑可以对起来,绝非偶然,这应该就是这个函数运行逻辑。...) 这里 OFFSET 使用了 0,结果: 将这里 OFFSET 使用了 1,结果: 如果对照上述列表,符合上述总结规律。...运行规律 OFFSET 在筛选上下文中取出一个表,同时对表中元素实现偏移。其过程: 有一个筛选上下文,记作 F。 在 F 下计算 OFFSET 第二个参数,得到一个表,记作 T。...对 T 按照 F 再次筛选,对符合筛选元素分别进行位移,按 OFFSET 第一个参数进行。 返回 3 结果构成表。...这里需要注意一个细节是: OFFSET 第二个参数会先在外部筛选上下文中计算,得到 T。 得到 T 会再次在外部筛选上下文中计算。 也就是说外部筛选上下文会使用两次。

1.9K20

​再谈 Power BI 分组真实案例

文本叶云老师提供,并附有示例文件。...2000 3000 3000 ~ 4000 3000 4000 4000 ~ 5000 4000 5000 大于等于5000 5000 朋友解决方案 不难看出,事实表一行均为一张订单,所以先要得到一张中间表每个产品...朋友困扰 但是老板需求要是这么简单就好了,老板希望可以根据订单日期进行筛选,但是现在这个方法,订单日期筛选完全无效。...解法 看过我之前博文战友应该能有些思路,这类问题,就应该使用 DAX 来解决,我们不做计算列,不做中间表,全都应该依靠 DAX 模型能力。...= SELECTEDVALUE ( '分组表'[组别] ) 然后确定了组别,就需要确定这一左值和右值,一边后面用于计算 VAR LeftValue = CALCULATE ( MIN

2.2K03

DAX - 正确地提出好问题 - 你真的理解SUM吗

超越你看到所有书籍,你量身定制回答。...2、在计算 SUM 时候,FILTER 会创建自己迭代环境,针对仅有的一行客户,计算:SUM (' 订单 '[数量] ) > 20000 3、在 2 中计算 SUM (' 订单 '[数量] ),由于在筛选上下文中...4、用 TABLE1 作为筛选器再去计算 [合同数量],凡是 3 中可以返回 1 行客户都会计算出来,否则计算结果空。...特别强调:济南 A 是矩阵一行,但它本身是筛选上下文。...第二要事:DAX 不是程序员设计,而是分析师设计。只不过不妨碍程序员也成为分析师,也可以深度使用 DAX。 第三要事:DAX 是全球范围唯一模型驱动自助商业智能分析工具。

1K30

函数周期表丨筛选丨表丨CALCULATETABLE

感兴趣小伙伴可以看看白茶之前写文章《精品丨CALCULATE函数进价知识》,里面有系统介绍。 用途:构建新上下文环境,生成一个符合我们需求表。...语法 DAX= CALCULATETABLE(,,,…) 参数 表达式:必须项,可以是一个表,也可以是表表达式。 筛选器:可选项可重复,用来过滤条件使用。...返回结果 根据筛选器生成上下文对表达式进行计算,返回一张表。 例子 模拟数据: [1240] 这是白茶随机模拟数据。...COUNTROWS ( '例子' ) ), '例子'[颜色] = "白" ) 结果: [1240] 计算结果次数3。...逻辑2中,ADDCOLUMNS函数本身没有进行上下文转换,所以每一行数据其实都是21,即总计行数。

1.1K00
领券