外部数据查询
近几天都沉醉于做Excel的数据合并,实际上就只是两个表,一个是交易情况另外一个是出入库明细。出入库明细是一个大表,交易情况里面除了交易本身以外还有货款明细以及损溢明细,所以原始表格合计有4个。相对于我之前纠结过的那些东西来说,这几个表有一个数据是必定唯一的,也就是交易情况里面的合同号。损溢明细里一个合同号可能出现多次,货款明细里一个合同号可能会出现多次,出入库明细里一个合同号绝大多数情况会出现多次。所以这些表里,交易情况的合同号是1,其它是多。以前在Excel里面用Power Pivot建立表的关系的时候,我是直接把某一个列拉到另外一个表的列建立关联,但这一次我发现交易情况和损溢明细无论我怎么拉,PP都默认,一是损溢明细,多是交易情况。直到昨天我才知道原来建立表关系的时候是可以不用手拉的。理论上我已经把PP的界面看过一遍又一遍,不仅仅是软件本身,关于它的书我也看过一些,但是好像在昨天之前我就从来没有发现原来有那么个界面。1对多到底谁是一,最重要的一点是哪个表先选定,后选定的表在Excel的Power Pivot里默认是多,但如果二者关系不成立,会建立不了关系。我不知道Excel的PP为什么会这么设定,理论上应该还有1对1,多对多之类的关系,显然在Power BI里面就有,但Excel就是这么神经。用Excel PP默认给的那个1对多的关系,在用透视表的时候,无论如何都得不出我想要的结果,但实际上我想要的那个结果我想了半天也都是合理的。结果手动建立正确的1对多关系后,透视表的数据就正常了。之前,我在Excel的PP上耗了好长时间研究其它东西,之所以有些坎无论如何迈不过,无论如何觉得有毛病我猜是不是也跟这个1对多的关系自动默认给我生成错了。
在玩PP之前,其实我已经折腾了一天的Power Query,之所以从PQ转投PP,是因为我发现虽然我的原数据很简单。最大的那个表才几千行,载入以后进行初次筛选,剩下700多行,另外的那些表只有几行和几十行。但即便这样,它们关联了以后,做全体刷新的时候依然会出现卡顿,依然会偶尔告诉我数据不是我期待的那个格式,所以刷新失败,但实际上当我重新再去刷新失败的那个表,又会成功。在不修改参数的情况下刷新同一个查询,有时都能刷出来,有时一些刷不出来,有时刷的时间要长一点,有时刷的时间挺短,到底这是为什么?各种缓存的参数我都试过了,各种PQ本身设置相关的参数我也试过了,但是PQ自己就是这么不稳定。快的时候可能5秒就出来了,但是慢的时候可能30秒都出不来。折腾了我一天后,当我用PP做出跟PQ完全一样的功能的时候,发现PP的稳定性好很多,几乎不会出现数据刷新失败,大多数情况下,PP刷新需要10秒钟,但是它俩最大的区别在于PQ这个查询文件只有50KB,但是PP的查询文件是800KB,之所以这样,是因为实际上PP把整个原数据都抓过来了。考虑到这些查询文件我肯定会在不同的机器上运行,所以虽然PP可以直接连接某个外部源文件,但我还是选择先在PQ里做一个动态接口,然后再转到PP的模型上,同时在一开始的时候让PQ把3000多条数据出筛成700多条。
10秒钟和不知道到底要多少时间,以及50KB和800KB这两个答案我都不太满意。所以接下来估计我会尝试一下python方案。