首页
学习
活动
专区
圈层
工具
发布

优化Power BI中的Power 优化Power BI中的Power Query合并查询效率,Part 1:通过删除列来实现

本篇文章主体部分为翻译Chris Webb的一篇文章。 合并查询在Power Query中是很成熟的应用,相当于SQL中的各种JOIN(抽时间会写几篇SQL的join,算是SQL的小核心)。...但同时,在Power Query中合并查询是一个常见的影响刷新效率的因素。在我的工作中,经常会遇到对一些非文件夹性质的数据源进行合并查询操作,所以我一直在想,有没有办法可以对其进行优化。...为了这样测试,我在两个查询中又添加了一个步骤,删除B-G列,只剩下A列: let Source = Csv.Document( File.Contents("C:\NumbersMoreColumns.csv...– 0 秒 以上的确能够得出结论:合并查询时,列数的多少的确会影响效率, 以上还揭示了:在以上两个查询中,读取数据是立刻发生的,几乎不占用时间,相比之下,最开始的两次查询中读取数据的时间甚至要比执行SQL...其实合并查询删掉不必要的列,可以有两种方式,一种是如今天说的,在合并查询之前删掉;另外,我们也可以在合并查询后对不需要的列进行删除。 从逻辑上来看,合并查询后再删除列,很明显要比今天说的浪费时间。

5.9K10

Power Query中批量处理列的函数详解

例2 如果是需要进行多个列的操作,可以在第2参数中使用多次对应的写法,并在最外面用符号{}括起来。 如果除了成绩要减去10,还需要在学科后面加上字符“(上)”。...例3 第3个参数是一个函数,是在第2参数指定列以外表格中的所有列需要进行的操作。 在前面的操作中,成绩列和学科列都有了操作,那剩余其他列(姓名列)也需要进行操作,那就要使用到第3参数了。...如果第2参数的中的学科写错或者定义了其他未在操作表中的列名,则可以通过第4参数来控制返回。...因为指定的列里有 “班级”,但是在原来的表格中不存在,所以会产生错误,但是第4参数有指定1,也就是忽略错误,最终返回的结果如图所示。除了找到的成绩列表外,其余的列数据都在后面添加了个“A”。 ?...例5 如果是想让所有的列都进行同样的操作,也就是不指定列,使得把所有列都是作为其他列来处理,使用的是第3参数来进行操作的话,此时第2参数可以直接使用空列来表示,也就是不指定列。

3.2K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Power Query中如何把多列数据合并?升级篇

    之前我们了解到了如何把2列数据进行合并的基本操作,Power Query中如何把多列数据合并?也就是把多个字段进行组合并转成表。那如果这类的数据很多,如何批量转换呢?...,但是实际我们在平时想要调用的时候,还有很多需要进一步的进行修改及优化。...生成一个表格参数变量 生成这个参数变量是为了我们之后可以在直接调用来处理同类表格。 我们了解到在代码中的字段数据列表实际上是个已经经过Table.ToColumns处理过的一个列表嵌套列表格式。...所以我们在优化代码的时候可以把这一步处理的过程直接作为自定义函数的部分流程。同时我们在这个里面直接把函数的参数数量及类型给固定住。 ?...确定需循环的列数 还有一个需要作为变量的,也就是确定是多少列进行转换合并。我们上面的例子中是以每3列进行合并,但是我们要做为一个能灵活使用的函数,更多的变量能让我们更方便的使用,适合更多的场景。

    8.4K40

    如何在Power Query中批量添加自定义列

    我们在添加的列的时候,有2个主要参数,一个是标题,一个则是添加列里的内容,如果我们需要进行批量添加的话,这2个参数最好是作为变量进行循环填充。我们来看下如何操作吧。...列数:需要增加多少列,就根据相应的填写。 2. x代表的是表格,也就是增加列后的表格名称,初始值是原始表格。 3. y代表的是第几次的循环,0代表第一次,同时也是作为参数组里的列对应值的位置。...标题和内容必须匹配 也就是在参数组里的2个参数必须项目数一样(可以通过if语句在执行前进行判断) 2. 如果需要在添加列里使用公式,则函数参数设置成表类型。...因为在循环添加列时表是重复调用的,所以如果把表设置成函数的参数,方便后期循环调取使用。 我们以最简单的 [价格]*1.1这个公式为例。...在循环公式里,我们还需要注意两点, 一个就是使用公式进行参数的调用。 each这里需要更改成其他方式书写。

    9.9K20

    Power Query中@的用法—递归

    (一) 含义 在Power Query中@是表示范围运算符,通常在使用递归时运用其自身。 (二) 一般使用 把函数自身参数运用于其他函数。...例1: (x) =>@Number.From(x)+10 解释:定义一个调用自身参数并转换成数字格式并+10的函数。这种写法实际上和不指定是一样的,因为参数本身未进行变化参与到后期的运算。...次数 X初始 x-1 X终值 1 5 4 9 2 4 3 12 3 3 2 14 4 2 1 15 例2:累计乘积 如果一个股票目前的市场价格是10元,如果连续5个涨停能达到多少价格呢?...day=0 then price else @fx(现值,day-1)] [终值] 解释:这里我们有2个变量参数在进行运算...对于多变量的,我们可以通过Record格式来进行记录。同时if的then是作为结束判断语句,else是作为循环运行的计算公式。

    1.7K20

    Power Query中Buffer的用法

    (一) 概念介绍 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对I/O(输入/输出)的数据做临时存储,这部分预留的内存空间叫缓冲区。 使用缓冲区有两个好处: 减少实际物理读写次数。...缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数,一般在实际过程中,我们一般是先将文件读入内存,再从内存写入到别的地方,这样在输入输出过程中我们都可以用缓存来提升IO...缓冲区的作用也是用来临时存储数据,可以理解为是I/O操作中数据的中转站。...缓冲区直接为通道(channel)服务,写入数据到通道或从通道读取数据,这样利用缓冲区数据来传递就可以达到对数据高效处理的目的。 (二) 函数数量 ? (三) 使用场景 ?

    1.7K10

    Power Query中数据的定位

    数据定位 (一) 列(字段)定位 1. 定位本查询: 步骤名[字段名]=源[成绩] 2. 定位其他查询: 查询名[字段名]=成绩表[成绩] (二) 行(记录)定位 1....指定字段当前行直接使用[字段名],例如在添加列里面直接使用[字段名]代表的就是当前指定的字段名的当前行的值。 2....例: Text.PositionOfAny("abcABCabcABC",{"A","b"})=1 解释:返回列表中任意字符第一次出现的位置,"b"先出现,位置在1,所以返回1。...(六) 表格内定位 Table.PositionOf 返回row在指定表格中出现的位置 Table.PositionOfAny 返回rows的列表在表格中出现的位置 Table.PositionOf(...因为我们要从列表中挑选数据,格式是{列表}{项目的位置},所以2个都是列表格式,我们在之前计算出结果的基础上套上一层{}代表列表。{3-1}这个就是我们要找的项目的位置。

    2.6K20

    如何理解Power Query中的“#”转义字符?

    我们在Power Query中有时候也会看到在公式中会有"#"字符存在,这个#字是什么意思呢? 我们今天来初步了解下这个#的功能。 在说这个之前,我们先来了解下什么是Unicode字符。...字符区间 16进制编码区间 0..9 0031-0039 A..Z 0041-005A a..z 0061-007A 一..龥 4E00-9FA5 在Power Query中,使用List生成列表,必须是升序的...(是根据Unicode编码进行的升序) 另外其中主要的3个符号类的,有自己的简称,我们记住简称即可。...了解了Unicode编码,那我们看下,在Power Query中如何使用转义字符"#"进行转换。 例1:通过"#"直接进行16进制Unicode编码转义。...在进行Unicode编码转义时,必须用""在最外面,转义的编码在()内即可。当然如果直接转义就不需要了。 ? ="123#(0061)bc" ? 例2:通过#转义含有特殊字符的字段名。

    4.2K10

    Power Query中避免出错的几种情况

    在Power Query中对于数据的类型要求比较严格,如果在中间步骤不是计算必要的数据类型,可以暂时不更改,而等到最后的时候在进行数据类型的更改,这样也能够更方便的发现问题的所在。 ?...如果仔细观察,在合并非文本列的时候,操作都是一样的,但是在公式中会对原有的表格中需要合并的列进行格式转换,所以要合并的列不管是不是文本格式,都可以预先给转换成文本格式,这样在后续的合并中就不会出错。...(九) 合并查询中的展开表 合并查询在Power Query中使用的比例还是相对挺高的,在使用后都会把匹配的数据给展开,这里就会涉及到一个注意事项,如图18所示,合并查询展开时的公式, ?...(十) 删除重复项 在创建维度表的时候,会常用的操作就是去除重复项,要不然在Power BI中会产生多对多的关系,就会引起错误,不过在去除重复项的时候也需要进行仔细辨别。 1....字母的大小写 在Power BI的模型关系中,不会区分大小写,如果只是大小写的区分,则会直接判断为多个关系,所以在Power Query中进行清洗的时候就要特别留意,以避免因为大小写产生的错误导致数据表之间的关系错误

    6.2K41

    Power Query中批量处理操作(2)

    ;第3参数是对处理后的列表和原先列表再进行处理的函数,这第3参数的基本固定写法就是(x,y)=>运算公式,x代表原列表(同时需参考第2参数列表的项目数量),y代表通过第2函数参数运算后的列表;返回的也是列表格式...List.TransformMany({1,2,3},(a)=>{a+1,a+2},(x,y)=>x) ={1,1,2,2,3,3} 解释:虽然x代表的是原始列表,但是如果y列表中是多项处理,则会自动生成重复项...List.Sum},(x,y)=>y(x)) ={List.Sum({1..3}),List.Sum({2..4})} ={6,9} 解释:第2参数列表里面直接是一个单函数,所以y(x)代表把x作为参数代入到y函数中,...each _>5),(x,y)=>y+List.Sum(x)) ={6+45,7+45,8+45,9+45} ={51,52,53,54} 解释:首先第2参数List.Select是针对列表操作,所以在第一参数列表外面再加一层...我们知道x最终返回的结果是要根据y列表的项目数,y列表的项目数是6个,所以最终返回的是6个项目,其重复的项目也是根据y项目来得出的。

    83930

    Power Query中批量处理操作(5)

    ,在条件不符合时停止循环,如果条件设置错误会导致无限循环;第3参数是根据之前的初始及条件继而运行的函数;第4参数是可选的指定输出函数,也就是对当前步骤的初始赋值进行计算;返回的是结果是列表格式。...初始赋值公式使用()=>,这里赋值的是1个具有2项的列表,列表中的第1项初始赋值为2,是作为数值计算的初始值,列表中的第2项初始赋值为0,是做循环累计数。...因为循环终止是在100元以内即终止,所以价格肯定未能达到100,还需继续+1次才能达到目标价格,但是列表的返回值包含了原始的价格10元,所以正好抵消次数的要求。...所以我们在循环的时候就已经对展示结果做了指定的输出,也就是第4参数返回的结果是循环次数,最终我们取循环次数累计值的最后一个,也是25。...,还需要继续加1次涨停,同理在循环的时候我们取列表的金额,在最后一次循环金额的基础上再做一次涨停价格计算。

    78030

    删除列中的 NULL 值

    图 2 输出的结果 先来分析图 1 是怎么变成图 2,图1 中的 tag1、tag2、tag3 三个字段都存在 NULL 值,且NULL值无处不在,而图2 里面的NULL只出现在这几个字段的末尾。...有一个思路:把每一列去掉 NULL 后单独拎出来作为一张独立的表,这个表只有两个字段,一个是序号,另一个是去 NULL 后的值。...比如 tag1 列变成 t1 表,tag2 列变成 t2 表,tag3 列变成 t3 表。...一个比较灵活的做法是对原表的数据做列转行,最后再通过行转列实现图2 的输出。具体的实现看下面的 SQL(我偷懒了,直接把原数据通过 SELECT 子句生成了)。...,按值在原表的列出现的顺序设置了序号,目的是维持同一列中的值的相对顺序不变。

    17K30

    Power Query中批量处理操作(3)

    (循环次数也是依据项目数);第2参数是初始值及计算后的数据(在第一次运算前需要给赋予一个初始值用于运算,第一次运算完后则赋值为代表运算后结果);第3参数是运算的函数。...List.Accumulate({1..3},0,(x,y)=>x+y) =List.Accumulate({1..3},0,(初始值,列表中的值)=>初始值+列表中的值) =((0+1)+2)+3=6...第1次运算前,第2参数被赋值为0,所以第3参数计算结果为0+列表中的第一项1=0+1=1 第2次运算时,第2参数被赋值为上一次的运算结果1,所以第3参数计算结果为1+列表中的第二项2=1+2=3 第3次运行时...一共运行的次数为列表1中的项目数,次项目数一共为3个,也就是1,2,3的值。...,但是列表中的项目是循环次数的依据。

    95430

    Power Query中批量处理操作(4)

    这篇依旧是List.Accumulate的函数应用详解。但是第2参数是作为列表格式使用。...List.Accumulate({1..5},{},(x,y)=> ifNumber.Mod(y,2)=1 then x&{y} else x)={1,3,5} 解释:功能是把奇数的组合成一个列表。...第一步,做判断Number.Mod(1,2)=1,结果是True,所以是{}&{1},也就是{1} 第二步,做判断Number.Mod(2,2)=01,结果是False,所以是x,也就是上一步的计算结果...} 第三步,做判断Number.Mod(3,2)=1,结果是True,所以是{1}&{3}={1,3} 第四步,做判断Number.Mod(4,2)=01,结果是False,所以是x,也就是上一步的计算结果...255从对指定列表的数从大到小进行整除,得到一个取整的列表以及最后一个余数。通常用于积分兑换,零钱兑换等实际应用案例。

    87420
    领券