合集-Power BI
摘要:DAX是一种专门用于计算数据模型的业务公式的语言,本文以Power BI的关系来学习数据模型。 一,理解数据模型 数据模型是由一组表和关系构成的结构,表和表之间由关系链接,如下图所示的产品数据模型: 表格是组织数据的二维结构,由行和列构成,其本身是一个最简单的数据模型。当要描述更复杂的数据模型时,就
阅读全文
摘要:计算上下文是DAX表达式求值的环境,任何DAX表达式都是在上下文中求值的。行上下文和筛选上下文是DAX中仅有的上下文类型,把这两种上下文称为计算上下文。计算上下文用于限定公式计算的环境,当上下文变化时,相同的公式会计算出不同的结果。 在PowerBI中创建的计算列是在行上下文中执行计算,创建的度量(
阅读全文
摘要:Visual上的任何一行或一列都是一个过滤上下文,切片器也是一个过滤上下文,或者报表上其他类型的过滤器,甚至Visual之间的交互,这些过滤上下文共同构成了一个单元格的过滤上下文。总的来说,报表的每个元素都可以创建过滤上下文,并且报表的每个单元格都有不同的过滤上下文。总结来说,筛选上下文是在报表中创
阅读全文
摘要:行上下文标识当前行,仅仅用于迭代,不会筛选任何数据,也不会自动利用关系。在当前的行上下文中,可以通过RELATED 和 RELATEDTABLE函数利用关系,以获取相关联表中得数据。行上下文存在于计算列或迭代函数中,没有其他方法可以创建行上下文,计算列和迭代函数会自动创建行上下文。 一,迭代函数执行
阅读全文
摘要:CALCULATE()函数是DAX中最重要和最复杂的函数,用于计算处在筛选上下文中的表达式的值。 CALCULATE(<expression>,<filter1>,<filter2> … ) 第一个参数是用于计值的表达式,在计值之前,CALCULATE将首先计算<filter>参数,并与现有的外部筛
阅读全文
摘要:关于计值上下文的规则: 筛选上下文用于筛选数据。 行上下文用于迭代,其中的筛选上下文为空,除非遇到CALCULATE函数。 一,CALCULATE函数根据行上下文创建筛选上下文 CALCULATE函数的强大之处:根据行上下文创建筛选上下文。 如果在行上下文中执行CALCULATE函数,对每一次迭代,
阅读全文
摘要:迭代是指逐行遍历表,访问一行叫做一次迭代,而每一次迭代得到的结果会作为下一次迭代的初始值。迭代函数至少拥有两个参数: 第一个参数:要遍历的行集 第二个参数:对同一行的不同字段要执行计算的表达式。 一,迭代函数计算的过程 最常见的迭代函数是SUMX函数,第一个参数Sales是要迭代的表或表值表达式,第
阅读全文
摘要:ALLSELECTED 函数有两种用法:作为表函数,或者作为CALCULATE函数的筛选调节器,这两种功能都是通过使用迭代器在过滤器上下文堆栈上留下的最后一个影子过滤器上下文来实现的。ALLSELECTED 函数是DAX中唯一一个使用影子筛选上下文的函数。 使用影子筛选上下来定义ALLSELECTE
阅读全文
摘要:表连接是指两张表根据关联字段,组合成一个数据集。表连接不仅可以利用数据模型中已有的关系,而且可以利用DAX表达式基于表的任意列定义连接条件。因此,在DAX中,实现表与表之间的连接,有两种方式: 第一种方式:利用数据模型中的现有关系,以便查询包含在不同表中的数据。 第二种方式:编写 DAX 表达式创建
阅读全文
摘要:在表格数据模型中,用户可以创建关系,并可以沿着关系的方向自动进行交叉过滤。但是在计算列中,必须通过RELATED 和 RELATEDTABLE函数来检索相关联的表。当使用CALCULATE函数时,可以直接使用现有的活跃关系来进行过滤,并不需要显示调用RELATED 和 RELATEDTABLE函数来
阅读全文
摘要:在筛选上下文中,一列可能是由于应用了过滤器而被直接筛选,也可能是由于关系的传递,其他列被筛选而导致该列被间接筛选。因此,可以把数据模型中的筛选分为直接过滤和交叉过滤。 一,判断直接过滤和交叉过滤 直接过滤:当过滤器直接作用到表中的一列上时,该列是被直接过滤的。直接过滤是由外部的切片器和查询上下文中的
阅读全文
摘要:在DAX中,每个表都有一个与之匹配的扩展表,表的扩展版本包含了原始表的所有列,以及从源表开始的多对一关系链中位于关系“一”端的表的所有行。 不管关系的类型如何变化,表扩展的规则是相同的: 表的扩展是单向的,只能从基准表的开始,并把任何位于关系“一”端的相关表的所有列添加到基准表中。 表的扩展不止第一
阅读全文
摘要:PowerBI的数据模型是表格模型,只能基于单个列创建关系,不支持基于多列的关系。但是,可以通过把相关的多个列组合成一个计算列,以它作为主键来创建关系。在数据模型中创建的关系,称作物理关系,物理关系会存储到数据模型中,虚拟关系只存在于DAX代码中,相比虚拟关系,利用物理关系的查询性能会更高。 一,使
阅读全文
摘要:简单的说,当ALL用作表函数时,忽略应用到表上的任何过滤器,并返回数据表;当ALL用作CALCULATE和CALCULATETABLE函数中修饰器时,ALL函数从扩展表中移除已经应用的过滤上下文。 注意自动存在(auto-eixist)对ALL()函数的影响。 正常情况下,包含 ALL() 函数的
阅读全文
摘要:ALLEXCEPT 函数的作用是除了参数中指定的列之外,移除表上其他列的筛选上下文,也就是说,只保留表中指定列上的筛选上下文,而把表中其他列上筛选上下文都移除。 ALLEXCEPT(<table>,<column>[,<column>[,…]]) ALLEXCEPT的两个用法: 当用作 CALCUL
阅读全文
摘要:表值函数 VALUES, DISTINCT 都用于返回一列的唯一值,唯一的区别是:VALUES()会额外添加一个BLANK。当使用VALUES函数从一个关联表中获取唯一值时,如果某一个值在关系中缺失,那么VALUES()函数会返回BLANK()。 当关系代表的约束无效时,数据模型会再关系的“一”端的
阅读全文
摘要:LOOKUPVALUE函数用于根据一个或多个搜索条件,从另一个表中获取一个或0个值。LOOKUPVALUE运行在行上下文中,根据当前表中的当前行,从另一个表中查找条件相等的行,查找不需要两个表之间存在关系,搜索结果也不受过滤条件的影响。当两个表之间存在关系时,考虑使用RELATED函数,因为RELA
阅读全文
摘要:DAX 中的 SUMMARIZE 函数功能强大,但同时也很难使用,它可用于执行表之间的分组和连接。不幸的是,它在计算聚合值时存在一些众所周知的性能问题。除了性能之外,SUMMARIZE 的计算限制是它无法聚合在查询本身内动态计算的值。 一,SUMMARIZE函数的限制 例如,考虑以下查询,它应该为每
阅读全文
摘要:SUMMARIZECOLUMNS是一个专门用于查询和计算表的函数,主要包含分组列和扩展列。 分组列是用于分组的列,只能来源于基础表中已有的列,分组列可以来源于同一个表,也可以来源于相关的列。 扩展列是由name和expression对构成的,name是字符串,expression是包含聚合函数的表达
阅读全文
摘要:函数ADDCOLUMNS和SELECTCOLUMNS的功能相似,都是迭代函数,在行下文中计算表达式,并返回一个表。 从数据沿袭的角度来看: ADDCOLUMNS函数:新添加的列不具有数据沿袭的能力。 SELECTCOLUMNS函数:SELECTCOLUMNS 保留直接对列引用的数据沿袭,对列执行的任
阅读全文