合集-Power BI
摘要:DAX是一种专门用于计算数据模型的业务公式的语言,本文以Power BI的关系来学习数据模型。 一,理解数据模型 数据模型是由一组表和关系构成的结构,表和表之间由关系链接,如下图所示的产品数据模型: 表格是组织数据的二维结构,由行和列构成,其本身是一个最简单的数据模型。当要描述更复杂的数据模型时,就
阅读全文
摘要:计算上下文是DAX表达式求值的环境,任何DAX表达式都是在上下文中求值的。行上下文和筛选上下文是DAX中仅有的上下文类型,把这两种上下文称为计算上下文。计算上下文用于限定公式计算的环境,当上下文变化时,相同的公式会计算出不同的结果。 在PowerBI中创建的计算列是在行上下文中执行计算,创建的度量(
阅读全文
摘要:Visual上的任何一行或一列都是一个过滤上下文,切片器也是一个过滤上下文,或者报表上其他类型的过滤器,甚至Visual之间的交互,这些过滤上下文共同构成了一个单元格的过滤上下文。总的来说,报表的每个元素都可以创建过滤上下文,并且报表的每个单元格都有不同的过滤上下文。总结来说,筛选上下文是在报表中创
阅读全文
摘要:行上下文标识当前行,仅仅用于迭代,不会筛选任何数据,也不会自动利用关系。 一,对行上下文的理解 注意:行上下文只存在于计算列或迭代函数中,计算列和迭代函数会自动创建行上下文,没有其他方法可以创建行上下文。 在当前的行上下文中,可以通过RELATED 和 RELATEDTABLE函数利用关系,以获取其
阅读全文
摘要:CALCULATE()函数是DAX中最重要和最复杂的函数,用于计算处在筛选上下文中的表达式的值。 CALCULATE(<expression>,<filter1>,<filter2> … ) 第一个参数是用于计值的表达式,在计值之前,CALCULATE将首先计算<filter>参数,并与现有的外部筛
阅读全文
摘要:关于计算上下文的规则: 筛选上下文用于筛选数据。 行上下文用于迭代。 注意:行上下文不用于筛选,也就是说行上下文对应的筛选上下文为空,而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的功能相似,都是迭代函数,在行下文中计算表达式,并返回一个表。当需要切换到过滤器上下文时,需要用到CALCULATE函数。 从数据沿袭的角度来看: ADDCOLUMNS函数:新添加的列不具有数据沿袭的能力。 SELECTCOLUMNS函数:SELE
阅读全文
摘要:原文是:The definitive guide to ALLSELECTED ALLSELECTED 可以返回一个表,也可以删除过滤器并恢复以前的过滤器上下文。 在这两种情况下,它都是通过使用迭代器在过滤器上下文堆栈上留下的最后一个影子过滤器上下文来实现的。 一,ALLSELECTED函数的用法
阅读全文
摘要:自动存在是 DAX 中内置的一项技术,其唯一的目标是避免无用计算,换句话说,它是 DAX 的过滤机制使用的一种优化技术,目的是减少计算值的工作量。 例如,假设有人构建了一份按大陆和国家/地区划分的报告。 在一个数据库中,一个人可能有两大洲和五个国家: 在这些数据上,可以运行一个简单的查询,如下所示:
阅读全文
摘要:数据沿袭实际上存在DAX中的每个角落,它的设计如此好,以至于很多开发人员在不知情的情况使用。 DAX使用数据沿袭来维护关于列值来源的信息。数据沿袭实际上是一个标签(Tag),分配给表中的每一列,此Tag用于标识数据模型中的原始列,即列的值源自于该列。通过数据沿袭,DAX可以利用现有的关系来过滤数据模
阅读全文
摘要:原文:All the secrets of SUMMARIZE 作为一个查询函数,SUMMARIZE 执行三个操作: 它可以按表本身或相关表的任何列对表进行分组; 它可以创建新列,在行上下文和过滤上下文中计算表达式; 它可以产生不同级别的小计(subtotal)。 在 SUMMARIZE 的三个主要
阅读全文
摘要:EARLIEST和EARLIER函数只用于行上下文中,并且主要用于计算列的行上下文中。行上下文的作用是迭代,逐行扫描表,并且不会筛选数据。 EARLIER函数用于访问外层行上下文,即使用外层行上下文,而不是最内层的行上下文检索列的值。 EARLIER(<column>, <number>) EARL
阅读全文
摘要:PowerBI是微软新一代的交互式报表工具,把相关的静态数据转换为酷炫的可视化的,能够根据filter条件,对数据执行动态筛选,从不同的角度和粒度上分析数据。PowerBI主要由两部分组成:PowerBI Desktop和 PowerBI Service,前者供报表开发者使用,用于创建数据模型和报表
阅读全文
摘要:在分析数据时,不可能总是对单个数据表进行分析,有时需要把多个数据表导入到PowerBI中,通过多个表中的数据及其关系来执行一些复杂的数据分析任务,因此,为准确计算分析的结果,需要在数据建模中,创建数据表之间的关系。在PowerBI中,关系(Relationship)是指数据表之间的基数(Cardin
阅读全文
摘要:最近做了几个PowerBI报表,对PowerBI的设计有了更深的理解,对数据的塑形(sharp data),不仅可以在Data Source中实现,例如在TSQL查询脚本中,而且可以在PowerBI中实现,例如,向数据模型中添加自定义字段,或者在报表数据显示时,根据数据表之间的关系做数据的统计。本文
阅读全文
摘要:DAX 表达式主要用于创建度量列(Measure),度量值是根据用户选择的Filter和公式,计算聚合值,DAX表达式基本上都是引用对应的函数,函数的执行有表级(Table-Level)上下文和行级(Row-Level)上下文之别;其交互行为都是通过表之间的关系实现的,用户选择的Filter,会通过
阅读全文
摘要:PowerBI 使用 内存的列式数据库 VertiPaq,用于对已发布的数据集进行数据压缩和快速处理,能够使PowerBI报表执行脱机访问,面向列的处理,高度优化对1:N关系的处理性能。关系是数据分析的基础,正因为数据之间存在关系,分析数据才有了意义。PowerBI支持的关系(Reliationsh
阅读全文
摘要:Power BI的本地数据网管(On-Premises Data Gateway)是运行在组织内部的软件,用于管控外部用户访问内部(on-premises)数据的权限。PowerBI的网管像是一个尽职的门卫,监听来自外部网络(云端服务,Cloud Service)的连接请求,验证其身份信息。对于合法
阅读全文
摘要:PowerBI报表是基于数据分析的引擎,数据真正的来源(Data Source)是数据库,文件等数据存储媒介,PowerBI支持的数据源类型多种多样。PowerBI Service(云端)有时不直接访问Data Source,而是直接从PowerBI Service创建的数据集(Dataset)中获
阅读全文
摘要:在PowerBI Desktop中,用户可以定义一个或多个查询参数(Query Parameter),参数的功能是为了实现PowerBI的参数化编程,使得Data Source的属性、替换值和过滤数据行可以参数化。注意:参数不管有多少个可能的值(Available Value),只能有一个当前值,所
阅读全文
摘要:在PowerBI的查询编辑器(Query Editor)中,用户可以使用M语言修改Query,或修改Query字段的类型,或向Query中添加数据列(Column),对Query进行修改会导致PowerBI相应地更新数据模型(Data Model),这跟使用DAX表达式修改Data Model有本质
阅读全文
摘要:R是一种专门用于数据分析和统计的脚本语言,广泛应用在每一个需要统计和数据分析的领域。PowerBI支持R脚本,两者强强结合,使PowerBI的功能更加强大。PowerBI Desktop默认没有安装R,在使用R脚本之前,必须向PowerBI Desktop中安装R引擎。用户可以使用R脚本加载数据、对
阅读全文
摘要:PowerBI版本在持续的更新,这使得报表设计能够实现更多新的功能,您可以访问 PowerBI Blog查看PowerBI的最新更新信息,本文总结了PowerBI新版本的重要更新和设计技巧。 我的PowerBI开发系列的文章目录:PowerBI开发 一,同步切片 开发人员在设计报表时,根据分析的需要
阅读全文
摘要:钻取是指沿着层次结构(维度的层次)查看数据,钻取可以变换分析数据的粒度。钻取分为下钻(Drill-down)和上钻(Drill-up),上钻是沿着数据的维度结构向上聚合数据,在更大的粒度上查看数据的统计信息,而下钻是沿着数据的维度向下,在更小的粒度上查看更详细的数据。举个例子,当前的粒度是月份,按照
阅读全文
摘要:PowerBI 将要解锁增量刷新(Incremental refresh)功能,这是一个令人期待的更新,使得PowerBI可以加载大数据集,并能减少数据的刷新时间和资源消耗,该功能目前处于预览状态,只对 Power BI Premium 版本开放预览。 增量刷新只是加快了数据集刷新的速度,对于具有潜
阅读全文
摘要:PowerBI的查询编辑器使用Power Query M公式语言来定义查询模型,它是一种富有表现力的数据糅合(Mashup)语言,一个M查询可以计算(Evalute)一个表达式,得到一个值。 对于开发者来说,M公式常用于Power Query编辑器中,用于添加计算列,并对数据进行处理。开发者只需要知
阅读全文
摘要:Power BI支持行级安全(Row-Level Security,RLS)的权限控制,用于限制用户对Dashboard、报表和DataSet的访问。用户浏览的报表是相同的,但是看到的数据却是不同的。 RLS内部通过DAX函数 username() 和 userprincipalname()来实现,
阅读全文
摘要:PowerBI Service 有时也称作PowerBI Online,是PowerBI的Saas(Software as a service)部分。在典型的PowerBI开发的工作流程中,用户使用PowerBI Desktop创建Report,然后把该Report发布到PowerBI Servic
阅读全文
摘要:使用PowerBI Desktop中的bookmark(书签),开发人员可以捕获报表中一个页面的当前配置,包括过滤器的设置,Visual的状态等信息,此后,开发人员可以通过激活已保存的bookmark,使报表中的一个Page还原到创建该bookmark时的状态。 对于报表的受众来说,bookmark
阅读全文
摘要:PowerBI可以通过RLS(Row-level security)限制用户对数据的访问,过滤器在行级别限制数据的访问,用户可以在角色中定义过滤器,通过角色来限制数据的访问。在PowerBI Service中,workspace中的member能够访问Workspace中的Dataset,RLS不会
阅读全文
摘要:在PowerBI 报表中,常规的Tooltip是一段文本,当光标悬停在Visual上,Visual上方会自动显示Tooltip的文本。PowerBI 支持用户自定义内容丰富的Tooltip,用户通过创建一个Report Page,在Page上插入文本、图片和图表等,并把该Page设置为Tooltip
阅读全文
摘要:Power BI报表的用户,肯定会被Q&A的功能惊艳到,在查看报表时,仅仅通过输入文本就可以探索数据,并且结果是可视化的,更令人惊艳的时,结果几乎是实时显示出来的。这使得Q&A Visual就像一个搜索引擎,输入你想查询的问题,Q&A返回一个可视化的结果。 在用户开始输入问题之前,Q&A会显示一些建
阅读全文
摘要:关键因素(Key Influencer)图表能够帮助用户分析KPI的因素,并按照因素的重要性进行排名,也就是说,该图表可以查看哪些因素会影响到KPI,并计算出因素的相对重要性。使用Key Influencer Visual,不仅可以查看单个因素的影响,还可以查看多个因素构成的组合(称作Segment
阅读全文
摘要:异常检测通过自动检测时间序列数据中的异常来增强折线图,并且提供了异常解释,以帮助用户进行根本原因的分析。异常检测只能用于Line Chart中,并且必须有Date字段作为X坐标轴,实际上,PowerBI按照时间序列,用SR-CNN算法来检测数据的异常,即微软的时序异常检测服务(Time-Series
阅读全文
摘要:简单来说,如果多个Report共用一个Dataset,那么这个Dataset是共享数据集。每当共享Dataset刷新后,任何引用这个Dataset的Report都会自动刷新,这也是共享数据集的一个优点。 共享数据集的一个重要作用,是把后端(建立数据集)的任务从整个报表开发流程中分离出来,后端只需要把
阅读全文
摘要:原文:Best practices using SUMMARIZE and ADDCOLUMNS 在实践中,可以用SUMMARIZE添加分组列,而用ADDCOLUMNS添加计算列。 ADDCOLUMNS( SUMMARIZE( <table>, <group by column>,... ), <c
阅读全文
摘要:原文:Introducing SUMMARIZECOLUMNS FilterTable参数是一个表达式,用于定义返回数据行的基表。如果所有Expression参数的值都是Blank,那么这一行不会包含在返回值中。 建议用SUMMARIZECOLUMNS来代替SUMMARIZE函数,和ADDCOLUM
阅读全文
摘要:下面列出的5个表函数,都是DAX中用于做分组聚合的函数。 ADDCOLUMNS(<table>, <name>, <expression>[, <name>, <expression>]…) SELECTCOLUMNS(<Table>, [<Name>], <Expression>, [<Name>
阅读全文
摘要:创建Field Parameter时,第一列是参数名称,第二列是NAMEOF,第三列是参数的顺序,从第四列开始,都是对前散列的分组。 1,Field Parameters 的层次结构 2,Field Parameter的分组 把多个列设置到一个组中 文档: Power BI Field Parame
阅读全文
摘要:原文:Nested grouping using GROUPBY vs SUMMARIZE GROUPBY函数的作用是根据输入的表进行数据聚合,输入的表可以是表表达式,也就是说,GRUOPBY的参数可以是一个动态查询返回的表,也就是说GROUPBY函数可以用于嵌套聚合的情况。但是,GROUPBY 不
阅读全文
摘要:所谓模型的关系,是模型中的两个表,通过两个列建立的连接。关系的用途,是把过滤器从一个表传递到其他表。过滤器传递的方向,是关系的方向;过滤器传递的路径,是由两个表之间相关联的两列组成的。表,表之间的关联,以及关联的方向,也构成了数据模型。因此,对于一个数据模型来说,关系传播的路径是确定的,这意味着,过
阅读全文