在本章中,我们将简要介绍 DAX 在 Power BI 中的不同用法。 计算列 计算表 度量值 安全筛选器 DAX 查询 除此之外,我们还将讨论如何使用 DAX 创建日期表。...正确的做法是:将总销售额除以销售的产品总数,并且计算过程根本用不到 [Price] 列。 计算列中的计算结果是静态的:仅在创建列或者刷新 Power BI 模型时这些值才会被计算。...3.2 计算表 计算表(Calculated table)与计算列相当:它们将数据直接添加到 Power BI 模型中,只不过是以整个表的形式。若要创建计算表,通常需要特殊的 DAX 表函数。...这样,包含日期的列将被认定为正式的日期列: 图3.5 将表标记为日期表 在第 4 章中,我们将讨论时间智能函数,届时,您将了解将一个表标记为日期表有什么优势。...3.7.1 首先考虑使用 DAX 度量值 如果在上文中没有足够地表达清楚,那么容我再重复一边:您的主要 DAX 工具应该是度量值。
辅助表与模型中的其他表没有关系。在切片器中使用“说明”列时,切片器中的选项将对列进行筛选。所以,相应的行将被选择。请注意,当切片器未显式设置单个选择时,用户可以进行多个选择。...该函数计算表达式,并将其与值连续进行比较。当表达式和值相等时,将返回相应的结果。如果不是,则表达式将与下一个值进行比较。当所有值都不等于表达式时,该函数返回其他,如果省略其他,则返回空白值。...由于其他日期列中的值可能不同,因此我们需要调整12个月滚动总计的DAX公式以使用正确的日期列。 同样,我们需要一个辅助表来允许我们在日期列之间进行选择。...DAX公式可以避免嵌套SWITCH函数的方式重写。为此,我们使用SWITCH的方式与通常的方式略有不同,常见用法是提供一些值(通常是某些计算的结果),然后为静态值提供多个选项以将其进行比较。...第一列包含指示标签类型(国家/地区、零售类型或组)位于行中的指示器,第二列包含三列中的值。第一列可用于选择标签类型。然后,DAX度量值将实现与三个原始表之一的动态关系。
为什么必须用日期表 作为初学者的一个问题就是为什么必须用日期表,可以直接用交易数据中的日期吗? 答案是:不可以。 最直接的原因是:交易中的日期可能是残缺的。例如:某个日期是没有交易的。...A - 一列,日期时间 B - 一列,日期 C - 三列,年月日 D - 四列,年季月日 通过对上述内容的理解,不难看出 B 才是正确答案。...A 不是正确答案的原因是 A 所说的日期时间已经达到了时间的明细程度,其时间跨度太低,本场景所说的分析中并不会使用到这样级别的时间维度。...在 DAX 中,可以构建表,准确讲,是一个单列的表,如下: DAX 函数 CalendarAuto 将轮询目前在数据模型中的每一个表中的日期类型列以便创建一个日期序列,该序列包括可以涵盖数模模型所有日期范围...月,但它的文本排序是晚于 Apr 4 月的 所以要使用对应的数字进行排序 构建一个日期表 基于上述考量,我们通过 DAX 构建日期表,如下: Calendar = // 从最小日期表来进一步构建一个丰富的日期表
(配套数据下载链接见文末) 经过仔细观察,发现这个DAX公式里有个很特别的地方,就是对日期使用了.[Date]的日期引用形式: 可能比较多朋友在写DAX公式,引用日期时,看到过....可能很多朋友就没有想过或者不清楚。 - 2 - 此前,我写过文章《开始用Power BI?别急!这几个选项配置值得注意!...| PBI实战》,其中提到,要先把“自动日期”的设置取消掉,因为这个自动日期会产生很多不良的影响: 除了我在那个文章中讲的生成自动日期结构外,与本篇文章的奇怪计算结果也有密切关系!...基于原始日期表的日期列生成的隐藏日期表位于1端,而原始日期表位于多端,即:层次结构里的年、月等对原始日期表里的数据有筛选作用,而原始日期表里的年、月等列,对层次结构里的数据却没有筛选作用。...这里,假设我们将矩阵中的“年”,调整为日期结构(隐藏的日期表)中的“年”,每年的上半年金额就完全正确: 但是,这里使用DatesBetween计算其实还是不合适的,因为总计行一定会出错!
使用= 0而不是检查ISBLANK()|| = 0 Power BI中的BLANK值与列数据类型的基值相关联 对于整数,BLANK值对应于零,对于字符串列,BLANK值对应于“(空字符串)”,对于日期字段...它们是必需的,因为如果查询未获得所需的结果,则FIND()和SEARCH()返回错误。 IFERROR()和ISERROR()函数强制Power BI引擎对每一行执行逐步执行, 以检查错误。...使用表达式而不是FILTER函数直接应用过滤器的行为与上述相同。此方法在内部 使用过滤器中的ALL函数进行转换。...根据列值使用正确的数据类型 如果一列中只有两个不同的值,请检查是否可以将其转换为布尔数据类型(真/假)。 当您有大量的行时,这可以加快处理速度。...它不考虑表的任何列中包含的空白。 公式的意图更加清晰和自我描述。 将SEARCH()与最后一个参数一起使用 如果未找到搜索字符串,则SEARCH()DAX函数接受最后一个参数作为查询必须 返回的值。
然后日期表必须与主数据中随时间变化的日期字段进行关联。...比较平行时间段,比如与之前一年相同的月份。 当使用随时间进行的数据分析的时候,很可能要使用DAX函数。...只需要替换手动填写的日期即可。 向数据模型中加入日期表 现在你有了一个日期表,可以与你的数据模型进行整合以便于开始应用这些智能时间。...注意 为了时间智能在PowerBI中能够正确使用一定要保证日期表和数据表中的数据类型是date或者datetime。...总结 在这个例子中,我使用了Invoices表来测试仅仅因为这里存储了很多指标数据,当然你也可以选择其他表来尝试这个智能时间的应用。它不仅方便了对于数据的分类和比较,更提供了一种潜在的排序和聚合。
DAX 公式与 Excel 公式非常相似,要创建 DAX 公式,请键入一个等号,后跟函数名或表达式以及所需的任何值或参数,DAX支持常见的4中运算符:算数运算符(+、-、*、/、^)、比较运算符(=、>...三、新建列 如果我们要使用的列不在数据表中,可以通过新建列来利用已有的字段生成需要的字段列。通过这种方式添加的字段会添加到已有的数据表中,这里的新建列与前面导入数据后新建列一样。...,我们可以绘制条形图来观察营收分档的数据: 图片 四、新建表 DAX中新建表与新建列一样,也是利用已有的数据表通过DAX表达式生成所需的表格。...也可以嵌套NATURALINNERJOIN来获取其他表中更多的数据列,例如我们可以针对这个结果关联"城市信息"将城市信息也展示在交叉联合表中,DAX表达式如下: 图片 3、创建纵向合并表 两表形成纵向合并表就是将一张表追加到另外一张表中...','第四季度点播订单表') 图片 五、创建日期表 在Power BI中我们经常使用时间函数来对包含日期列的数据表进行时间转换操作做进一步的分析,这里我们通过Power BI创建一张日期表来演示日期函数的操作使用
大家好,我是BI佐罗,罗叔。最近有特别特别多小伙伴问了很多和职场有实际关系的案例,我们会分专题来一一区分讲解。另外,对于 DAX 的很多特性直接去讲解,显得有些突兀。...设计与实现 在 PowerBI 中,编写 DAX 来实现复杂计算逻辑时,常常会进入的坑包括: 有多种写法,哪种写法更容易理解; 动态性的保持与屏蔽; 度量值的起名。...其约定在于:将主要的事情放在前面,将限定的部分放在后面,与 CALCUALTE 的写法类似。...在本例中,当用户选择不同部门或职能时,那么所有的计算应该在该限定下完成,因此,我们必须保持这个动态性。 这就要求我们在使用 ALL 函数时,尽量作用到列,而不是一下将这个表都 ALL 掉。...执行 第 5 行,针对 第 4 行得到的全部日期序列,创建行上下文,并开始对这个序列进行迭代,对每一次迭代的数据行 ‘Date’[日期] 进行针对与 MAX( ‘Date’[日期] ) 的比较的判断。
它可以给我们提供与查询上下文不对应的结果,并且可用于提供高级见解,例如将产品的销售额与所有产品的销售额进行比较,将今年的销售额与去年同期进行比较,推断未来的趋势,等等。...我们希望能够将每个产品的销售额与产品 373 的销售额进行比较。您可以将其视为产品373是我们公司最具战略意义的产品,我们希望将每个产品的销售额表示为产品373销售额的百分比。...与 SalesPerCity 度量值一样,我们需要一个每行对应一个州名的表,以便进行迭代。此表在模型中不容易立即获得,因为 State 只是 Cities 表中的列。因此,我们必须自己构造此表。...使用这些函数的一般复杂性在于,它们的结果就是一个表。这意味着没有可用于查看结果的标准输出机制,这一点与度量值不同,我们可以创建一个 Power BI 视觉对象以查看 DAX 度量值的结果是否符合要求。...如果是这样,则结果表中的列与模型中的任何现有的列都没有数据沿袭。 在某些情况下,您也可能希望虚拟表的数据沿袭与默认值不同。
DAX 新函数 DAX 引擎还在进化,每一次的进化都是在主体框架下的一些小补充。但每次的小补充可能带来新的可能。今天要和大家介绍的是: DAX 出了一个新的函数:COLUMNSTATISTICS。...这样就可以获得一套当前模型中所有表和列的字典。...道理很简单: 正在创建的计算表也是该 DAX 函数统计的对象;而该表还没创建完;要创建该表就要计算完该 DAX 函数;而要计算完该 DAX 函数,该表就要计算完;导致循环依赖。 好可惜啊,有没有。...仔细思考一下原因,由于 COLUMNSTATISTICS 是用来获得模型信息的,并不是用来进行计算的,因此,DAX 引擎将其隔绝在筛选上下文之外是有道理的。 如何进行修复呢?...如果你可以正确地 Thinking In Table,那么用 DAX 就可以帮助我们构建灵巧的解决方案。 总结 快去复制粘贴到你的项目中试试吧。
每个部分都聚焦于某种特定的语言,以便感兴趣的读者快速地将 DAX 与其进行比较。...Count of Date(日期计数)可能出乎初学者意料,每一行显示的都是相同的数值,实际上,这个相同的数值是日期表的总行数。 因为日期表和销售表是单向关系,颜色列的筛选并没有传递到日期表。...换句话说,所在列的当前行的值,与将所在列的所有行的总计值的语法是不一样的。...DAX 是不一样的,图 1-6 的销售总计在 DAX 中是这样写的: AllSales := SUM ( Sales[SalesAmount] ) 在特定某行取值与将整列视为整体取值,两者的语法没有区别...然而,DAX的查询和编程在形式上是没有区别的。各种各样的函数将表进行转换后,再以表的形式返回。前面查询中的Filter函数就是一个很好的例子。
常在群里看到很多关于对日期表的疑问和困惑,尤其是刚进群的初学者。那今天我们就来聊一下,日期表是怎么回事,在业务分析里究竟起了什么作用?...: 日期表的日期是独立完整的,没有缺失,这对时间智能函数来说很重要。...如果想按季统计销量,按月统计采购、按周统计销量、就必须同时扩充这三张表里的日期列——毫无效率,凭添隐患 下图就是最明显的实证,业务日期的缺失,当天没有业绩可以理解,但全月累计还是要正常统计,不应略过,使用单独日期表就不会出现这种情况...导入PBI后,若想继续提取日期信息并增加列,可以在PQ界面里可以通过“添加列”的日期菜单来执行 ? 也可以通过“自定义列”来设置更复杂的日期信息(该对话框里输入的是M语言,与DAX不同) ?...2、在PBI中利用DAX函数建立日期表 (calendar和calendarauto两个函数可参见之前的DAX专题) 往期回顾:Calendar,CalendarAuto ?
本文比较简单,只是某个客户在进行报表制作初期碰到的一个小问题,略作描述,以示避坑。...用DAX书写了正确时间范围内的日期表,并且将date列标记准确。...我们将数据表的订单日期列的数据类型设置为日期/时间,我们就会发现端倪,原来它隐含了时间信息: 此时我们去到powerquery里面查看,这一列果然是日期/时间格式: 原来是客户原来的数据文件就是带有时间格式...,在powerquery里导入的时候,系统直接自动设置为了日期/时间格式,客户就没有改动,直接加载到模型中。...但是在模型中,客户觉得只需要日期列,不需要时间信息,就在模型中表格视图列工具里的数据类型设置为日期。而这,也就为后续的计算带来了麻烦。
可以看出这里的线存在问题,第一日的点与线差距很大,由于第一天的前面没有日期,因此不应该再除以 7 ,而应该只考虑有 KPI 读数的日期。...可以看出,这时候对于开始日期阶段和没有KPI数值的日期都在 AVERAGEX 中被很好地处理了。...动态参数化 不难想到,可以将刚刚的度量值进行动态化,得到: KPI.RA.X = // Rolling average AVERAGEX( DATESINPERIOD( 'Calendar'[日期...这样一来,移动平均就可以使用最小二乘法来进行预测了。 总结 由于原始值受到各种随机因素的影响,固然比较凌乱。...我们进行业务处理的套路是: 进行移动平均 进行基于参数的动态移动平均 采用最小二乘法拟合出趋势线 使用基于移动平均和趋势线的预测 由于直接使用度量值实现,这种基于移动平均构建的最小二乘法趋势线也将保持动态性
"度量值表"中我们也可以将后续不使用的"列1"列删除。...操作如下: 同样的方式我们也可以创建可视化表将"门店信息表"中的"商圈类型"与"总营收金额"展示在一起,如下: 并且还可以点击两表中不同的行进行联动,如下: 二、计数统计 在Power BI中用于计数的函数有两个...以上需求我们可以使用TOTALYTD进行统计,TOTALYTD用法如下: TOTALYTD(表达式,日期列,[筛选器],[截止日期]) 复制 表达式参数代表统计的表达式,日期列参数指定日期时间列,筛选器参数可以过滤数据...,同比和环比是两个不同的概念,同比是指相邻时间段某个相同的时间点的比较,例如:2021与2022年是两个相邻的年份(相邻时间段),2021年5月与2022年5月是这两个相邻时间段的相同时间点都是5月,比较这两个时间段的数据是同比...偏移量,偏移单位) 复制 以上"日期列"参数指的是包含日期的列;"偏移量"参数指定的是从日期列中需要添加或减去的时间间隔数;"偏移单位"参数指的是Day,Month,Quarter,Year按照哪个时间维度偏移
回到这个问题来看,这里确实不会忽略行上下文,而是将SUM转换成了SUMX,并进入SUMX进行计算,而SUMX将创建新的迭代过程,在表中逐行迭代,进而得到了整列的聚合结果。...但如果你用自己学的DAX知识来解释的时候,就会发现发现问题了,我们一起来看: 第8行,在FILTER 第9行,ALL(DimDates[Date])得到了所有的日期,由于FILTER是迭代函数,进行迭代并逐一创建行上下文...第10行,在创建的行上下文中来比较 DimDates[Date] 与 MAX ( DimDates[Date] ),问题来了,既然是在行上下文中,DimDates[Date] 只有一个值,那么 MAX...( DimDates[Date] ) 将永远等于 DimDates[Date] 本身,那么也就无法筛选到小于当前日期的所有日期。...而真实的情况是:DAX中没有真正的MAX,所有的MAX在实际都会转换为MAXX,也就是MAX(T[C])的本质是MAXX(T,T[C]),因此在第10行到第11行,MAX ( DimDates[Date
数据模型有三类维度: 日期维度。 空间维度。 指标维度。 你可能听过日期维度,但你可能没有听过空间维度和指标维度。这些都是这里的原创划分,你需要关注这些内容的讲法。...我是 BI 佐罗,今天来和大家分享 “指标维度”。 什么是指标维度 在财务数据模型中,一类非常重要,常见,特有而在其他模型中可能不存在的就是财务科目或指标。...什么样的东西分析不了 如果要计算,对比的内容位于列头,就无法进行计算和对比。 其常见特点包括: 位于列头。 随着时间的推移,列数可能变化。 这都预示着这些可变的元素不在分析的范畴中。...还原为内容 将列头元素还原到内容区域的过程,称为:数据还原,或逆透视。 它将列头元素还原为内容。内容是可以被分析的。...提示 利用一些固有模式使用 DAX 并不复杂,可以极大降低每次要理解上下文或上下文转换的问题。 总结 本文是指标维度系列的一篇入门文章。并结合到一个案例中。
在入门案例动态销售报告中已经带领大家入门制作PowerBI可视化报告。本文主题销售业绩分析将继续针对入门案例进行进一步优化,让大家更改的了解和掌握使用PowerBI的功能。...2、使用DAX函数创建日期表 DAX函数创建日期表的方式网上有很多种,这里我就介绍最简单的两种方式:CALENDARTAUTO和CALENDAR函数构建日期表。 ...孤立的数据没有意义,只有在对比才能知道指标的高低。所以同比、环比查看时间维度的对比关系就显得比较重要。在建立指标之前,我们先通过销售数据和销售明细,日期表建立表和表之间的关联关系。如下图: ? ...'[日期],-1,YEAR) ) 在去年同期销售业绩中,CALCULATE函数与时间智能函数DATEADD配合进行计算。...公式:同比 = DIVIDE([本期销售业绩]-[去年同期销售业绩],[去年同期销售业绩]) 2、计算业绩环比 案例中的环比为本月销售数据和上月数据进行比较,公式:环比(%)=(本月销售业绩-上月销售业绩
到底什么是日期表? 它大概长这样: 日期表的定义如下: 包括一列日期类型且日期完备的字段的标准表,称为:日期表。 日期表可以看上去不是表 如果一个表,只含有一列,也可以叫:日期表。...Excel 法 纯 Power Query 法 纯 DAX 法 但今天我们给出一个 Excel Power Query 相混合的方法,这肯定是有道理的。...例如: 我正在给一群 CFO 分享商业智能,我希望立刻拿出来一个 CFO 在 Excel 里可以打开就懂的日期表,而且她可以马上就用。...DAX 人家不懂 Power Query M 人家更不懂 Excel 编写日期表有点不太好,例如:中英文就不好切换 因此,催生了本文的日期表。 该日期表也将得到持续的维护。...本日期表的使用 打开 Excel,选择参数,刷新,结束。 像 CXO 一样思考,与商业精英同行。 总结 一个很简单的东西,不一定真的简单。复杂的永远不是技术,复杂的是从复杂中抽出简单。
汇率转换中,有很多问题,当然这个场景基本发生在有国际化运营情况的企业中。 大家好,我是 BI 佐罗,这里和大家一起探讨这个问题的通用解决方案。 场景抽象 先来抽象出该场景的通用结构。...汇率计算:按照用户选择的输出型货币,在不同日期计算原始值(无意义),统一为本币(RMB)的值以及转出货币的值。...汇率统一预计算 由于在汇率计算场景下,任何一笔交易,都已经成为历史,在交易表中,是可以通过计算列先来将交易值参考汇率表,转换到统一货币的。...适配性 使用日期或更高粒度的计算时,这个模式也可以确保正确的计算。如下: 可以看出,选择了不同的日期,在不同时间的粒度,都可以确保计算正确。...本文同时揭示和抽象了 DAX 以及数据模型设计中蕴含的封装,继承,多态性质以及如何将这些性质用于设计的实际案例。
领取专属 10元无门槛券
手把手带您无忧上云