,所以先要得到一张中间表每个产品ID平均销售额的中间表。...5000, "大于等于5000" ) 之后就完成了数据准备,得到了下表: 之后仅需将分组列和产品ID的计数拖入表格即可得到结果。...ID] ), "平均销售额", CALCULATE ( AVERAGE ( '订单'[销售额] ) ) ) 最后要统计出属于该分组的一个子集,统计其行数就是产品ID的计数啦。...总结 最近都在写分组,但是分组却是工作中最常用的场景。战友们如果有工作中遇到的有趣的分组需求,欢迎在留言区留言,我们再交流,寻找模型驱动可视化的边界。...BI佐罗备注:PowerBI用作分析的动态性,SQL或其他分析工具对于分组都很简单,但唯有商业智能工具是天生自带动态性的。
DAX查询的工具中,比如DAX Studio、Microsoft Excel、SQL Server Management Studio、Reporting Services等。...DAX查询的强大之处在于其可以使用众多的DAX表函数。在下一节中,你将学习如何通过使用和组合不同的表函数来创建高级计算。...在某一时刻,如果关系再次变为有效,比如你将银色产品添加回去,那么空行将从报表中消失。 DAX中的某些函数将空行作为其结果的一部分,而其他函数则不会这样做。...因此,一个不存在的产品(空行)包含了Sales表中引用的许多其他产品的销售额,而这些产品在Product表中不可用,从而导致了计算结果是一个巨大的数字。...然而,研究同一算法的不同表达式如何返回不同的结果,有助于你理解这个例子。
也就是说,DAX 与大多数编程语言不同,因此熟悉它的一些新概念可能需要一些时间。根据我们的经验,在向成千上万的人教授了 DAX 之后,学习 DAX 的基础知识非常简单,您将能够在几小时内开始使用它。...若将产品名称的数量放入报表,可获得每年销售的产品数量,因为通过 Sales 销售表的关系传递,Product 产品被相应的年份所筛选。...的确,DAX 的计算是一个在很多建立关系的表中进行查询,将其汇总的过程。 处理关系 SQL 和 DAX 第一个不同之处是模型里关系的工作方式。...DAX是一个函数语言 SQL 是一种声明语言。你不用想引擎是如何返回信息,把需要的数据集进行声明,将其定义,用 SELECT 语句检索返回。...DAX 是 Power BI 的原生语言,如果您没有 Excel,SQL 或 MDX 的经验,Power BI 将是您接触 DAX 的第一个地方。
编写 DAX 公式时要掌握的核心概念是上下文。DAX 作为一门动态数据分析语言,与 Excel 函数、SQL 查询 和 Power Query 脚本有着根本不同的原因就在于上下文的概念。...当你跨过了经常犯一些低级错误的菜鸟阶段(如不知道要使用哪些 DAX函数、语法不正确或忘记括号等)之后,你在使用 DAX 时可能要天天和上下文打交道。...确定期望结果所需的筛选上下文。 确定如何从查询上下文变为筛选上下文。 想要驾驭 DAX,您应该熟悉这种思维方式,这与使用 SQL 检索数据、编程或在 Excel 中执行计算有着根本的不同。...还有一些鲜为人知的表聚合函数,包括像 MEDIANX,PERCENTILEX 和 STDEVX 这样的统计函数(最后两个函数有两种不同的用法,我们这里就不详细展开了,有兴趣的可以自行查阅官方函数说明)。...在 Power BI 模型中使用相同的函数创建计算表可能会有所帮助,但无论如何,使用 DAX 表函数需要一定程度的抽象思维。
1.项目案例 这是一家咖啡店的数据,Excel里有两个表,分别是销售数据表、产品表。 销售数据表记录了咖啡订单,包括字段:订单编号、订日期、门店、产品ID、顾客、数量。...在案例数据中,销售数据表的“产品ID”与产品表的“产品ID”对应,通过这个关系,就可以知道每个订单里用户购买了什么类型的咖啡,价格是多少。...image.png 如果要创建关系,就在表之间拖放要连接的字段。如果要删除关系也非常简单,右键单击该关系,选择“删除”。 如何想要隐藏表或某个列,右键单击,选择“在报表视图中隐藏”。...image.png 在公式栏中,输入定义度量值的 DAX 表达式。DAX表达式类似于Excel里的函数,DAX 表达式里面包括了很多常用的函数,方便分析使用。...image.png 这里选择“产品ID”字段,表示统计有多少种产品(产品数量)。这样我们就创建了一个新列“产品数量”。
,我们不妨来对比研究一下对于同样的略微复杂的功能是如何在不同的产品中实现的。...效果如下: Tableau 表达式: 以及: 在 PowerBI 中,模拟类似的需求,实现选定任意时间点,显示不同时间相对于该时间的销售额的增长率。...如果按星期看一下自首映日开始的总收入,比较起来就容易多了: Tableau 表达式: 在 PowerBI 中,模拟类似的需求,实现按照首次销售计算不同类别的销售额趋势。...在 Tableau 中仅需要设置就可以完成: 以及: 在 PowerBI 中,模拟类似的需求,实现按照不同类别显示其当年积累销售额占整体销售额的比例。...移动范围的事件数 对于零售、智能或边界控制等不同的场景,通常需要了解在一个时间窗口内发生某一事件的次数。例如,一次可疑事件可能是一次意外,但是如果在 x 天里发生次数超过 n 次,那就值得调查一下。
汉语博大精深,同一个词在不同的语境下表达的意思都可能不同。 ? 而这不同的语境就好比DAX的“上下文”。使用不同的切片器、筛选器、数据透视表的行和列,都会创造不同的“语境”(筛选上下文)。...比如,当你求拿铁咖啡销售量时: 你可以写[销售量]=sum('销售明细表'[数量])和Calculate([销售量],'产品表'[咖啡种类]="拿铁") ;也可以一气呵成地写Calculate(sum(...并且新增的DAX公式也会第一时间在PowerBI中上线。随着新功能的不断增加,拥抱未来是早晚的事。 这就好比工作电脑要会用windows, 日常手机用Android或IOS。...如果目的是企业级部署,你需要研究产品的特性和共享协作方案。 不同的目标,学习的侧重点也会大有不同,而前提是你要知道你想要的是什么。...但我已经看到很多人在学习了DAX数月之后,那种站在Excel的肩膀上,超越Excel,笑看过往的喜悦。 你,到了第几层境界了呢?
在财务中业财一体化,是一个必然趋势,而如何借助 Power BI 来构建这套系统,需要借鉴一套专业作品来进行。...收入概况页面 主要呈现收入的主要业务指标,收入的趋势,产品构成、渠道构成,各地区收入情况。 趋势分析页面 此页面呈现收入在日、周、月不同时间维度下的分析,通过书签导航实现页面局部切换。...产品维度分析页面 使用ABC模型呈现各产品的收入情况,找到贡献公司收入主要的产品。 客户维度分析页面 使用RFM模型,统计分析公司客户的特征,从而针对不同的客户投入不同营销资源。...运营费用分析页面 本页面基于管理利润表模型创建运营费用分析报表,运营费用分析功能几乎适用所有公司对于预算超支的情况用红色提醒,可查看不同部门、不同时间、不同费用项目的预算执行、同比或环比增减情况。...数据获取与清洗 使用M语言自动获取网络上公开的同行业财务数据,清洗、转换整理 使用PQ自动更新汇总某一文件夹下的EXCEL格式的财务报表 在PQ中使用自定义递归函数计算库货全月一次加权平均成本 PQ查询分类归纳整理
DAX是一门跨多产品的分析语言,这些产品使用同一个名为Tabular的内部引擎。 出于这个原因,我们经常用表格模型(Tabular Model)作为这些产品的共同特征。 DAX是一门容易理解的语言。...在Excel中,你可能习惯于一步步地执行计算。 在前面的示例中,为了计算总销售额,创建了一列,求价格乘以数量的结果,然后将其求和以计算总销售额。...这个结果很有用,例如,它可以作为计算每个产品销售额百分比的分母。 使用DAX,可以通过使用迭代器在单个步骤中执行相同的操作。...03 DAX相关理论 需要明确的是,学习DAX需要先从理论开始,这并非不同编程语言之间的区别,而是思维方式的不同。 你可能已经习惯于通过网络搜索来找到解决某个具体问题的复杂公式或方案。...在能够写出好的DAX表达式之前,你需要学习一些理论并彻底理解计值上下文是如何工作的。 如果没有一定的理论基础,你会觉得DAX像变魔术一样得到了正确的结果,或者得到没有意义的奇怪数字。
[1240] WITH AS 在DAX函数中,有些时候我们写的DAX逻辑引用次数过多,或者是性能过差,我们都会选择使用VAR来定义一个变量,减少资源的占用和方便重复的引用。...这个是WITH AS的官方定义,从字面上看与DAX中通过VAR定义一个变量的方式是比较类似的。 但是与上面提到的临时表和SQL定义变量的方式有很大的区别。...参数 1.WITH AS可以定义多个片段,但是只能使用一个WITH; 2.如果使用多个片段,那么你需要为不同的片段进行命名; 3.WITH AS语法结束后,后面必须直接跟调用的SQL语句,不然无法生效。...使用实例 案例数据: [1240] [1240] [1240] 在白茶本机的数据库中存在名为“CaseData”的数据库。...“Dim_Date“日期表、"Dim_Product"产品表、"Fact_Sales"销售事实表。 例子1: 将下面的代码换成WITH AS的写法。
[1240] ——PowerBI最难理解的地方是什么? ——白茶觉得是上下文。 日常生活中,学会使用DAX之后,我们已经习惯使用DAX函数来灵活的展示各种业务需要的KPI。...举个例子: [1240] [1240] [1240] [1240] 在上述模型关系中,销售明细作为事实表存在,产品表和日期表作为维度表存在。...'销售明细'商品名称——'产品表'商品名称 '销售明细'销售日期——'日期表'Date 上述的四列就是原生列。...'产品表'销售价或者'日期表'年度月份 这种事实表原来没有的,但是可以通过主键与事实表建立关系的,即为相关列。 * * * 扩展表与RELATED函数。...ALL函数,是我们使用频率非常高的一个函数,我们经常需要使用ALL来清除整个表的上下文筛选或者某一列的筛选。 ALLEXCEPT函数,可以保留某一列筛选。
比如,想要计算年初至今的销售总额,在 DAX 中仅仅使用一个函数(YTD)就可以实现,而在 Excel或传统报表工具中,需要一系列额外的指标来确定哪些销售交易属于年初至今这个期间,数据预处理环节耗费了大量的时间...但是,这并不意味着您可以轻松地掌握 DAX:在使用DAX的过程中,当您解决了一些稍微简单一些的问题之后,您会逐步将其用于解决更加复杂的问题,但同时您也将为之写出更复杂的 DAX 代码来解决这些问题。...本书将为您提供许多 DAX 高级应用的示例,我们希望这些例子能够帮助您去解决遇到的 DAX 难题。 当前,在微软所有的核心数据产品中,我们都可以使用DAX来做建模分析。...不过,让人感到疑惑的是,在不同的产品中,模型的命名方式却不太一样。下面,我们将对微软的不同产品中的模型和 DAX做一个基本的概述。...1.3.3 SQL Server Analysis Services中的DAX SQL Server是微软的数据服务器平台,它包含一个名为Analysis Services(SQL Server分析服务
前情回顾 在《PowerBI DAX 重构系列:用1个度量值代替100个 实现 动态多维度动态算法动态总计(上篇)》我们最终来到: 现在的问题是:不光只有销售额同比增长率这一个度量值要顾及,我们要顾及包括...这里的 > 或 在临时排名表中的位置。...,试试用 “” 代替 BLANK ,如下: 你可能会在这个过程遭遇一个PowerBI DAX的BUG,如下: IF 函数在DAX中是一个亟待被优化的函数,由于IF可能返回文本或数字,请问这个度量值是什么类型呢...没错,所以可以用这种方法来进行优化,但这里有个更深的细节需要注意,随着计算的年份不同,而如果不是产品类别维度,而是产品维度,可能有的产品由于下架,是没有销量的,因此不应该计入分母 n ,n 应该是只发生销售的那些项目...上篇重点描述了总计行与全部;下篇则重点描述如何实现全动态的度量值来提升可复用。在实际中,仍然涉及远超过文章中记录的复杂细节。
前期准备工作全部ready之后,就开始了数据建模,从数据入库开始做起的那种。在一番折腾后,终于,看板的雏形做出来了。有了基本的雏形之后,就开始着手对模型做调优。...这里请大家稍作思考,数据分析概念在定义的时候有什么特殊的地方。 我举个例子吧,比如说,一个月内五种产品的平均销售额。...那么到了BI工具中,要怎么实现在不同的分析场景下使用的公式都是正确的呢?我们换一个角度来思考这个计算公式,如何写一个公式就能兼容天/月/周/年呢?...就以上面讲的第二种算法为例,不要想excel中公式是怎么写的,去想平均值的定义,其实这里真实的计算公式应该是统计期内销售额求和/统计期间数。如何界定统计期间呢?...在BI工具中,因为这个时间条件可能是根据用户交互变化的,所以BI工具直接帮你省去了这一步限定,直接内置好了交互的操作,你只需要撰写统计概念上的表达式就可以了。
点击“博文视点Broadview”,获取更多书讯 《DAX权威指南:运用Power BI、SQL Server Analysis Services和Excel实现商业智能分析》 一书被很多学习DAX的小伙伴誉为...当我刚加入SQL Server Analysis Services引擎研发团队时,微软的多维数据库OLAP服务器产品开始占据越来越大的市场份额,那时他们已是SQL Server Analysis Services...他们很快意识到新的编程语言DAX将会有广泛的市场需求,于是决定花大力气全面研究如何用最优化的DAX公式来实现所有常见的商业分析及报表功能。...他们从不满足于发现一个可行的优雅的算式,而是深入了解DAX引擎及VertiPaq引擎的内部运行和优化机制,反复比较不同的表达式以达到最优算法。...他们的战略判断和早期投入被证明是有远见的,随着微软最新的商业智能产品Power BI的迅速崛起,他们对这项新型技术的深刻理解奠定了其在该领域的领袖地位,他们开办的数据模型及DAX编程语言培训班在世界各地受到了热烈的欢迎
也就是我偶尔会提到的学习效率临界值——当你的知识储备在临界值下的时候,没学习一个新的东西都是比较慢的,一旦越过某一个临界值,就会发现学什么都很快。 好了,说完方法论之后,我承认标题是标题党了。...我们简单复盘一下excel中是如何处理数据的: 第一步:首先我们要收集数据,可能来自不同的系统导出表、数据库、线下台账等多个数据来源 第二步:对不同的数据做简单的处理和整理,把需要的数据整理到一个新的...比如整合不同系统的数据,可以直接用power query去查数据,而不是写sql导出数据再去处理,省去了导出这种步骤,就能实现刷新数据源就能更新看板的效果。...我们学习excel函数的时候,通常是直接上手函数的,而不会去纠结函数实现的原理,但是dax完全不一样,你需要先去理解dax背后的逻辑和原理,在了解原理之后,dax本身就会变得非常简单。...比如要算均价,很简单,总销售额除以数量,但是一会儿要算按产品的,一会儿要算按渠道的,一会儿要算按销售的,茶树菇就不得不写大量类似但是又很重复的东西出来。
在本章中,我们将简要介绍 DAX 在 Power BI 中的不同用法。 计算列 计算表 度量值 安全筛选器 DAX 查询 除此之外,我们还将讨论如何使用 DAX 创建日期表。...举个简单的例子:通过将销售的产品数(Quantity)乘以每个产品的价格(Price)来计算销售额(Amount)。注意,在 DAX 中列名要写在方括号内。...或许,可以计算每个产品的平均价格?答案是否定的:平均价格应按销售的产品数量加权,因此 [Price] 列的直接平均值是不正确的。...正确的做法是:将总销售额除以销售的产品总数,并且计算过程根本用不到 [Price] 列。 计算列中的计算结果是静态的:仅在创建列或者刷新 Power BI 模型时这些值才会被计算。...下一章将介绍的可能是使用 DAX 时要理解的最重要的概念:上下文和筛选。之后,我们将整装待发,一起去探索第二部分的高级 DAX 业务案例。
在任何上下文中引用度量值时,因为引用的度量值在CALCULATE函数内部执行它的DAX代码。 3 计算列中的上下文转换 3.1 简单应用 单层行上下文的转换非常直观,相信都能理解。...(2)CALCULATE调节器在上下文转换之后应用,因此可以改变上下文转换的效果。...,结果如下图所示: 在计算列里引用度量值,会使行上下文发生转换,变成筛选上下文;引用度量值会使行上下文发生转换的原因是DAX引擎自动添加的CALCULATE函数。...当存在多层行上下文嵌套时,如果发生了行上下文转换,那么所有层级的行上下文都会进行转换,而不是仅仅只转换某一层。...那下面就通过一个案例来熟悉一下这种多层级的转换过程,用到的数据与模型如下图: 现在需要统计每个产品的销量,并把销冠产品(销量最大的产品)的销量单独显示出来,具体效果如下图所示: 解决思路很简单
前言回顾上篇文章我们可以用思维导图一遍概览:在了解了数仓的基本架构之后,我们还需要掌握数仓构建方法,也就是了解数仓是如何建模的,有什么规则和通用方法。...原子指标是基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,是具有明确业务含义的名词 ,体现明确的业务统计口径和计算逻辑,例如:原子指标=业务过程+度量派生指标=时间周期+修饰词+原子指标,派生指标可以理解为对原子指标业务统计范围的圈定...原子指标对应的为:单笔交易的金额单次访问的时长单个产品的库存数量2.1.8业务限定统计的业务范围,筛选出符合业务规则的记录(类似于SQL中where后的条件,不包括时间区间)。...2.1.9统计周期统计的时间范围,例如最近一天,最近30天等(类似于SQL中where后的时间条件)。...2.1.10统计粒度统计粒度是统计分析的对象或视角,定义数据需要汇总的程度,可理解为聚合运算时的分组条件(类似于SQL中的group by的对象)。
领取专属 10元无门槛券
手把手带您无忧上云