在不同的表中新建计算列,也会有不同的“语境”(行上下文)。 ? 自然而然,度量值、计算列在不同的语境下输出的结果也会不同。这个道理就是“毕竟西湖六月中,风光不与四时同”。...所以,第一条经验是,在写公式之前,先理解上下文是什么。 二 使用度量值,而不是计算列 在PowerBI中有三个地方可以写DAX公式:度量值、列、表。...计算列不是什么新知识,就好像在Excel中使用Vlookup添加一列一样,这一列是基于现有的表基础上做运算,它是“静态”的,运算结果不会因为切片器或透视筛选而变化,当你建立好后,它就会保存在文件中,增加你的内存...比如在Excel中可以使用最简单的Vlookup来查询另一张表中的对应结果,在PowerQuery中可以通过合并查询来实现,在PowerPivot中也可以用Related或者Lookupvalue完成同样的效果...其次是在PowerQuery中进行编辑,最后再选择PowerPivot。 十 三种境界 清代文学家王国维谈读书有三大境界,我想学习DAX亦是如此。 ?
解决方案优先考虑在上游系统中对数据源进行调整;在PowerQuery中,按门店、日期时间排序,然后按门店取出累计列当前行的上一行数据,然后用累计数字减去上一行累计数字就得到了当期数字。...当然,通过DAX也能解决这个问题,但不建议这样做,因为数据清洗最好在数据加载前PowerQuery中完成,以减少冗余数据和对运行内存的占用。...操作步骤 STEP 1 PowerQuery获取数据后,选中门店列,点击菜单栏转换下的分组依据,在跳出的对话框中修改新列名为待处理,操作选择所有行。...STEP 3 点击待处理列标题右侧的展开按钮,去掉门店的挑勾以免字段重复,去掉使用原始列名作为前缀的挑勾以保持列名的简洁性。...STEP 5 点击菜单栏添加列下的自定义列,在跳出的对话框中输入如下代码,增加一个数量列。这里调取了上一步骤的表中的门店与当前行门店相等、序号等于当前行序号-1的累计数量列的值。
在文章中,很少讲PowerQuery,也就是PowerBI的查询编辑,因为在实际应用中,确实没有碰到特别复杂的情况,原因有三: 1.使用PowerBI应减少在导入数据环节的复杂数据转换处理,这会拖慢速度...因此,PowerBI中的PowerQuery与PowerBI的DAX不同,DAX需要真正写代码,而PowerQuery却可以按套路来操作,尽量不写或少写代码。...从电影数据案例来理解模板函数法 在此前的文章中:PowerBI 零代码智能网抓中国电影大数据让人惊叹,这里不再重复之前的说明,但从另一个角度来看待这件事,为了获得2008年到2018年的每年电影票房数据...我们通过两个案例可以看出:创建模板函数的能力将参数,创建函数,新建列,调用自定义函数,用单元格作为函数参数融为一体。...通过模板函数与分治法的结合可以处理很多的场景,因此这不失为一项PowerBI中PowerQuery的重要套路。
那英有首歌叫《天生不完美》,让我们欣然接受这个事实,并知道编辑查询器里面用的是M语言,新建度量值和列用到的是DAX,这个小坑就你就避过去了。 为什么会掉入这个坑?...PQ而不是PP。...M位于PQ中,DAX是在PP中使用,所以如果你想问M和DAX哪个更好,这个问题就好比问洗菜切菜重要还是烹饪更重要?...而且这也是件因人而异的事情,很多人说DAX难理解,我却享受于度量值的逻辑思考,反而是对M代码怀揣敬畏之心。 我应该学习哪个 其实这个问题根据上面三个问题的回答,你可以自行推出适合自己的结论。...(我在视频课程中使用的去重、拆分、提取、逆透视等数据清洗30招就是完全不碰代码来执行的) 还有一些新功能比如示例中的列,你只要输入你想要的结果,电脑就智能地给出了答案。
对于我个人,因为经常会收到一些读者发来的数据建模问题,建立日期表对我来说也是一项重复性操作。如何以最快的速度生成一张通用而且好用的日期表呢?很多人都想要找到一个适合自己的最优方案。...2) PowerQuery生成,利用编辑查询器中的添加日期列功能(这是以往我比较喜欢的方式,在日历表的使用文章中曾介绍过) ? 3) 复制前人写过的PowerQueryM代码。...4) 写DAX公式生成 本文想推荐的就是这第四种写DAX公式的方法,它是所有方法中最快的。 最近在实践中经常使用,屡试不爽。只需要两个步骤,新建表,再复制一段DAX公式。 ?...注意到在建立[年月]列时,我使用的方法是Year([Date])*100+Month([Date])数字计算,而不是利用Format函数生成“年份月份”的文本格式。...最重要的是你能够理解此公式的含义,根据自己的需要利用Excel类的简单日期函数做调整。 我把公式写在了下面,供直接复制使用。
警告 :如果参数 num_chars 为空白,或引用计算结果为空白的列,则 new_text 的字符串插入到 start_num 位置,而不替换任何字符 。 这与在 Excel 中的行为相同。...但是这样做,还是有些问题: 第一、姓名这一列仍然存在,我如果要展示原始数据,截图会将姓名给暴露出来,而且这一列还不能删掉,因为删掉后带星号的姓名列也就没了; 第二、造成了重复列,我有简洁癖。...在使用上也有所不同: 具体说明,可以参考畅神的这篇文章:https://pqfans.com/194.html 重点说明的是,Text.Middle/Range的索引是从0开始的,这与DAX中的mid...offset 开始删除一些字符 count,然后在 text 中的相同位置插入文本值 newText 的结果。...结论 在Power Query中,因为可以使用if函数,很多判断性的问题就可以直接进行了,而不需要像DAX中那样,通过LEFT和RIGHT函数来变相地实现。
新建列方法新建列的可以在4个环节内完成:数据源、PowerQuery、VAR过程列、DAX计算列。数据源:在上游数据源(数据库或文件)中新建列,然后直接导入PowerBI使用。...PowerQuery:在数据清洗的过程中添加列,处理后加载到模型。VAR过程列:不生成物理列,在计算列的计算过程中,使用VAR现调取现使用,用后抛弃。...一个几百M的模型,已经很大了,在模型中一个1000万行的表中使用RELATED新建一列生成的文件,比在PowerQuery中合并查询生成的文件大30M左右。优先级建议那优先使用哪种方法新建列呢?...4 数据源不方便调整的话,能在PowerQuery中添加列,就在PowerQuery中添加列。...注意,在使用增量刷新的表中,该方法不适用,因为它仅更新增量刷新的行,反而是DAX计算列会在增量刷新后更新所有的行。5 以上皆不可,使用DAX新建列。
在PowerBI中实现增量刷新,目前有三种方法: 用 PowerQuery M 实现增量刷新,该方法有一定限制,属于假增量刷新。 用 DAX 实现增量刷新,该方法也有一定限制,属于假增量刷新。...当然,这种方法并不是真正意义上的增量刷新,属于利用了PowerQuery或者说ETL可以缓冲数据存储的思想。...但在实际实践中,可能并不能修复所有错误,仍然有大量错误存在,这视具体实际情况而定。 因此,这种删除后重新用DAX计算表的方式弥补订单存在风险,务必备份数据。...由于DAX的UNION函数必须至少有两个参数,且这两个参数必须都是列数一样的表,所以使用FILTER的这句技巧实际返回一个空表与前面的表合并,以起到占位符的作用,待有真正需要合并的表的时候,再做替换。...这样,就使用DAX的UNION实现了增量刷新的效果,并且该效果确实起到了增量加载数据,但根据DAX引擎的原理,整个数据模型会重建,仍需花费时间,这里省去了数据加载的时间,但无法省去模型重建的时间。
UNION语句 UNION语句类似于PowerQuery中的追加查询,可以将两个表或者两个数据集进行上下合并。DAX函数中也有UNION,而且用法上有很大的相似。...二者的区别在于前者返回的数据集没有重复项,后者返回的数据集包含重复项。...例子3: 在PowerBI中使用UNION语句将两张表中的商品分类列进行合并。...SELECT 商品分类 FROM 婴儿类 UNION SELECT 商品分类 FROM 混合类 [1240] 结果如下: [1240] 例子4: 在PowerBI中使用UNION语句将婴儿类中的商品分类列与混合类的销售价列进行合并...而在SQL Server中是没有反引号这个概念的,只有单引号。因此我们在PowerBI中使用SQL查询的时候,也需要遵守这些细节。
解决方案在PowerBI中,可以用一个序号列为要排序的列的每个值标记一个数字序号,然后再让它按照序号列排序。...月份名称或者星期几来自于日期表,通常搭建日期表的时候,无论是用PowerQuery还是用DAX,都会把用于排序的列做出来,如MonthNumber或者DayOfWeek。...这样,就可以使用按列排序功能为月份名称或者星期几排序了。区域名称也需要序号列,优先在数据源中自带排序列,如果没有权限修改数据源,或者想自主控制顺序,可以在PowerQuery中添加条件列。...操作步骤STEP 1 点击菜单栏添加列下的条件列,在跳出的对话框中,新列名命名为大区序号,输入各个大区对应的序号。图片STEP 2 将生成的大区序号列数据类型改为整数。...拓展有时候维度表是从事实表中提取的,建议这个提取操作在PowerQuery中使用分组依据实现,不建议使用DAX的DISTINCT实现,因为用DAX生成的计算表虽然也能实现新建计算列进行条件赋值,但是点击按列排序的时候会报错
用DAX书写了正确时间范围内的日期表,并且将date列标记准确。...,在powerquery里导入的时候,系统直接自动设置为了日期/时间格式,客户就没有改动,直接加载到模型中。...但是在模型中,客户觉得只需要日期列,不需要时间信息,就在模型中表格视图列工具里的数据类型设置为日期。而这,也就为后续的计算带来了麻烦。...解决问题 只是一个小问题,我们只需在powerquery里将这一列订单日期设置为日期格式,就解决了。...总结 从这个小的问题中,有几点想要跟大家分享: 1、尽量不要让powerquery自动设置字段格式,它很有可能会将数据设置成不是我们想要的,可以在设置中将其关闭。
他们往往在导出数据之后,再删除冗余的列: 02 Power Automate提供下载 基于以上的分析,可视化对象内置的数据导出功能并不完美。...注意,如果之前没有选择添加字段,那么此处不会显示这一项。...当然,大部分时候这并不是什么大问题。如果能保持一个良好的习惯,在导出数据前先刷新报表页面,也就无碍了。 因此,两种方法都不尽如人意。...大家可以择优选择,并根据上思路使用Power Automate创建出更多玩法。...有一种办法是用powerquery实现数据库回写,历史文章参考: 【重磅来袭】在Power BI 中使用Python(4)——PQ数据导出&写回SQL Power BI数据回写SQL Server(1
执行这种嵌套函数调用与其他编程语言的工作方式没有什么不同,只是在单元格中编写代码,而不是在文本文件中编写代码。...假设你意外地删除了带有换算公式的D4单元格,并且必须重写它:不是将金额乘以汇率,而是除以汇率。当运行上述测试时,将会失败,因为100欧元/1.05将不会像测试预期的那样再产生105美元。...Power Query和PowerPivot 在Excel 2010中,Microsoft引入了一个名为PowerQuery的加载项。...例如,你可以将一列拆分为两列,合并两个表,或者对数据进行筛选和分组。自Excel2016以来,PowerQuery不再是外接程序,而是可以在功能区数据选项卡上通过“获取数据”按钮直接访问。...可以将其视为传统的透视表,与PowerQuery一样,它可以处理大型数据集。PowerPivot允许你定义具有关系和层次结构的正式数据模型,并且你可以通过DAX公式语言添加计算列。
5.删除重复项 在下载文件中打开05-删除重复项.xlsx,如下图所示。 ? 删除重复项1.png ?...加载数据到PowerQuery中.png 客户首次购买分析 选定下单日期这一列,进行升序排序。 ? 下单日期升序排序.png 选定客户名称这一列,进行删除重复项 ?...对客户名称删除重复项.png ? 首次购买分析结果.png 客户最大订单分析 选定金额这一列,进行降序排序 ? 金额降序排序.png 选定客户名称这一列,进行删除重复项 ?...客户最大订单分析结果.png 多次购买客户分析 选定客户名称这一列,进行保留重复项 ? 保留重复项按钮位置.png 只有1次购买记录的客户会被删除,多次购买记录的客户会被保留。...例如一个客户有3次购买记录,保留重复项后该客户被保留3次购买记录。 ? 保留结果.png 6.删除错误 打开下载文件中的06-删除错误.xlsx,如下图所示。 ? 打开文件图示.png ?
第一个问题,推荐使用DAX Studio,轻松导出十万、百万条记录; 第二个问题,没有现成的工具可以直接解决,但是结合本系列第二篇的内容,我们是否可以想到如何用Python将powerquery中的表输出为...我们在第二讲中说过: Python的处理结果以Dataframe形式输出,M将Dataframe自动转换为Table格式。...看到了吗,mysql数据库中本来是一张空表,我们在powerquery中运行了一段Python代码后,表中有了数据。 ?...所以只要每次写回MySQL之前,先判断一下数据库中是否已经存在当日的数据,如果有,就先删除,再将新的数据写入,这样就达到我们的目的了。...MySQL数据库的表中初始有378条数据(因为包含了3月27日和3月28日两天的数据,共189个国家和地区的数据),运行代码后,仍然是378条,之前已有的3月28日的数据被删除,然后添加了刚刚查询到的最新数据
将其导入到PowerBI中,我们对权限表进行一下简单的处理。 [1240] 这是在PowerQuery中关于权限表的截图,大家可以看到页面权限和国家权限采用逗号分割的方式进行存储。...白茶根据案例数据,简单的做了如下几个报表。 [1240] 首页:作为页面权限管控使用,使用字段为权限表中的页面权限字段。 [1240] 可视化页面:用来展示列权限。...[strip] 列权限(OLS): 列权限管控,通常代表用户可以看到不同的列。 在PowerBI中,有两种方式可以实现:A.Tabular Editor的方式。B.DAX的方式。...举个例子:Tabular Editor可以控制某一物理列根据用户权限是否显示,那么这一列,制作报表的过程中,就需要慎用,一旦使用了,某些无权限的用户打开报表时,报表页面就会有部分可视化图表报错,这对用户的体验来说...[strip] DAX控制列权限的方式,最佳实践是与SSAS搭配使用,这样可以在Tabular中将列进行隐藏,只呈现DAX给用户,实现真正的OLS管控。
值得说明说: 这是实时报告,不是实时仪表板; 报告是 PowerBI 中更一般化的构件,也就意味着 PowerBI 开放了一项新的能力给到用户。...关于红色划线的关键词:既不符合英语自然语言的语法使用习惯也不是数据模型中的维度的。...实际上,地点表示了整个地理位置表(Model_Geo),而为什么输入一个表会自动锁定到某个列而不是另外的列呢,这就需要一种默认设置,如下: ? 可以看到这就是一种默认设置。...这是用来诊断 PowerQuery 的查询过程的。如下: ? 这一特性的主要目的是面向IT的,用来诊断 PowerQuery 的查询耗时问题。...如果“模式”丢失/为空,则将提示在Desktop中打开文件的用户选择DirectQuery或Import。
在PowerQuery中,使用分组功能,能做求和、计数等聚合运算,如何将某一列的多行合并到一行呢?举例现需要将下表按人员做透视,将每个人员对应的产品合并到一个单元格里,用逗号区隔。...注意:同一人员对应的产品有重复值和空值。处理后如下:操作步骤 STEP 1 PowerQuery获取数据后,在产品列筛选,去掉空白。...STEP 2 按住Ctrl键选中人员列和产品列,点击鼠标右键,删除重复项。STEP 3 选中人员列,点击菜单栏转换下的分组依据,新列名命名为待处理,操作选择所有行。...STEP 4 点击菜单栏添加列下的自定义列,输入如下代码,将待处理里面的产品列提取到列表(List)。[待处理][产品]STEP 5 删除冗余列,在待处理这一列点击鼠标右键删除。...STEP 6 点击产品列标题右侧的展开按钮,选择提取值。在跳出的对话框中,选择逗号分隔符,点击确定。
因此,PowerQuery会有如下两种场景转换数据类型:1 数据加载前通过鼠标“点点点”调整数据类型是数据清洗的必要步骤;2在添加自定列等公式中使用函数转换数据类型。...数据导入PowerQuery后,使用这个日期时间列与日期表建立关系,在画布中,会发现很多交易数据都没有和日期表对应上,而是对应在空白上。...这个原因比较隐蔽,在PowerQuery中没有对日期时间做处理,数据加载后,在数据视图中,日期时间列的时间没有用而且显示又很长,被改成了日期类型或者短日期格式,从表面上看关系两端的值一模一样,但这种操作并没有改变它内在的值...打开PowerQuery,点击数据表的日期时间列标题左侧的数据类型图标,选择日期,在跳出的对话框中选择添加新步骤。图片也可以选中日期时间列,点击菜单栏转换下的日期,选择仅日期,结果是一样的。...提示:1 如果时间点有分析需要,可以先进行复制列操作,再进行上述操作。2 虽然DAX也可以提取日期,但因为此操作属于数据清洗的范畴,建议在PowerQuery中处理。
一个列的元素与另一个列(也可以是它本身)的元素组合在一起,是PowerQuery中常见的操作。...可能性的种数是数学中的C 4 2,本例的可能性为6种。以上三种方式,在PowerQuery中可以按照笛卡尔积、有序排列组合、无序排列组合逐步实现。...操作步骤1 笛卡尔积STEP 1 PowerQuery获取数据后,在左侧的成员表上点击鼠标右键,选择下面的复制,生成一份成员表的副本。...共16种可能,结果如下:2 有序排列组合在笛卡尔积的基础上,添加辅助条件列,判断两列成员是否相等,筛选不相等的部分,最后删除辅助列。...共12种可能,结果如下:3 无序排列组合在有序排列组合的基础上,添加辅助自定义列对两列成员按相同顺序组合,选中辅助列删除重复项,最后删除辅助列。