1背景介紹
在進行數(shù)據(jù)處理時弥咪,一般獲取的數(shù)據(jù)有兩種:
1)單個文件,很多情況下是結(jié)構(gòu)不同的單個問題冷尉,需要逐個加載處理锈嫩;
2)多個結(jié)構(gòu)相同的單個文件受楼,需要對多個文件進行合并處理;
針對兩張形式呼寸,pq都能通過可視化方式處理,尤其的多個結(jié)構(gòu)相同的單個文件猴贰,可以通過加載文件夾的方式進行自動合并对雪,會自動生成查詢和函數(shù)組進行合并。而在現(xiàn)實進行數(shù)據(jù)處理中又有兩個痛點問題:
1)pq模型做好以后米绕,同步給同事需要修改加載路徑瑟捣,如果加載的數(shù)據(jù)來源較多馋艺,會非常麻煩。
2)文件夾方式加載數(shù)據(jù)會自動生成函數(shù)和查詢迈套,而且是每加載一個文件夾就會出現(xiàn)一次捐祠,顯得很亂;
本文將重點解決以上兩個問題桑李。
2不同終端數(shù)據(jù)源加載的便捷方式
說道便捷踱蛀,我們第一個想到的肯定是把數(shù)據(jù)拷貝過來,就能自動識別贵白,這是最最最便捷的方式率拒,什么都不用做就OK了,充分體現(xiàn)出自動化智能化禁荒。這里能想到的這種自動化有兩種方式:
1)真正的自動猬膨,不管數(shù)據(jù)源放哪里,都能自動找到呛伴,幾乎不可能勃痴,雖然能用搜索的方式實現(xiàn)部分,但是如果出現(xiàn)有相同文件名的文件時就傻眼了热康;
2)利用相對路徑實現(xiàn)沛申,所謂相對路徑就是相對你操作的文件的路徑,一般是將數(shù)據(jù)源和模型文件放在一個文件夾褐隆,通過相對路徑來獲取數(shù)據(jù)源污它,唯一需要注意的是需要在同一個文件下,如果分開就不自動了庶弃。很可惜衫贬,pq不支持相對路徑,具體原因未知歇攻。
既然自動無法實現(xiàn)固惯,而手動又會很麻煩,所以使用半自動方式實現(xiàn)缴守。
思路:通過一個表格來配置文件的路徑葬毫,將表格加載到pq,在需要該數(shù)據(jù)時調(diào)用屡穗。
這里的調(diào)用也有兩種方式:
1)創(chuàng)建函數(shù)調(diào)用贴捡,傳入一個需要的參數(shù),通過函數(shù)來獲取需要的數(shù)據(jù)路徑村砂;
2)直接引用烂斋;
在這里就介紹更簡單的直接引用方式。
第一步,新建文件位置的表格汛骂,兩個字段“表名”和“路徑”罕模,需要注意表名不一定是真實的表名,可以自定義帘瞭;
第二步淑掌,將表加載到pq,然后直接在需要的地方引用蝶念;
先看下引用:從深化看引用
可以看到直接引用表中數(shù)據(jù)的方式是“數(shù)據(jù)表名{行數(shù)}[列名]”抛腕,通過這種方式我們可以想到,如果我們的表是固定的祸轮,就能通過該方式獲取路徑兽埃,比如我需要獲取第三行第二列中的路徑,那么可以直接用“= 更改的類型{2}[總路徑]”來獲取适袜。
進一步柄错,如果我們的行排序是混亂的,或者有可能會混亂苦酱,用該方式就很容易出錯售貌,那么該用什么來定位行號呢?這里定義的“表名”列就可以作為依據(jù)疫萤,所以需要表名是唯一的颂跨。 如何通過表名來獲取呢?來看看通過可視化方式加載文件的腳本扯饶。
可以看到根據(jù)唯一標識獲取的方式是“數(shù)據(jù)表名{[列名=”標識”]}[列名]”恒削,根據(jù)這種方式,我們想獲取文件位置中第三行第二列中的路徑可以用“= 更改的類型{[表名="語音導航系統(tǒng)指標日報表2"]}[總路徑]”尾序。
再來看看如何在需要的地方引用:
上面在加載單個文件的腳本中可以看到是直接加載的路徑钓丰,那么這里只用將該路徑直接替換成引用的路徑。
到這里就實現(xiàn)了辦自動的數(shù)據(jù)加載啦每币,發(fā)給同事后只用更改下文件路徑携丁,刷新下數(shù)據(jù),就能實現(xiàn)數(shù)據(jù)的自動加載刷新兰怠。
延伸:
1)看下方截圖梦鉴,很明顯“Name”字段的名稱明顯會有變化,該如何破揭保?
2)如果要加載一個文件中的多個sheet該如何配置肥橙?
3相同結(jié)構(gòu)文件的最優(yōu)合并方式
第一步,按照單個文件的處理方式秸侣,加載并處理一個文件快骗,生成所需要的腳本娜庇;
第二步塔次,將處理單個文件的腳本創(chuàng)建成函數(shù)方篮,函數(shù)名隨意;
這里需要注意励负,如果有多個文件夾數(shù)據(jù)藕溅,每個下面的數(shù)據(jù)結(jié)構(gòu)不同,但是對于加載后的處理方式有相似之處時继榆,則創(chuàng)建的函數(shù)盡可能的能適配所有的文件巾表,這樣能省去創(chuàng)建多個函數(shù)麻煩,如果都是獨立的略吨,則每個文件夾下的數(shù)據(jù)表都需要創(chuàng)建相應的函數(shù)集币。
第三步,修改函數(shù)中的參數(shù)翠忠,這里有一個定位參數(shù)的過程鞠苟,根據(jù)不同的目的來定位,這里的目的是希望其他文件也能像單個文件一樣處理秽之,那么這里就需要傳入其他文件当娱,所以這里的參數(shù)是文件路徑,只要傳入路徑就能進行處理考榨。
這里需要注意我修改了3個地方跨细,前兩個是傳入的文件路徑的參數(shù),第三個是使用了引用的方式河质,也是第二部分介紹中的延伸1的一種解決方式冀惭。
第四步,調(diào)用函數(shù)掀鹅。
函數(shù)已經(jīng)創(chuàng)建成功散休,我們傳入文件路徑就可以調(diào)用生成相應的查詢了。思考一下淫半,如果我有10個相同的表溃槐,我把表的路徑一個一個傳入,就會生成10個查詢科吭,然后將10個查詢追加合并昏滴,就能得到想要的合并數(shù)據(jù)。顯然這種方式還是一個一個手動操作对人,而我們希望的是批量調(diào)用谣殊。如何批量?
先將所有的表放到一個文件夾下牺弄,然后以加載文件夾數(shù)據(jù)的方式加載到pq中姻几;
加載進入后,可以發(fā)現(xiàn)我們需要傳入函數(shù)的file參數(shù)值是FolderPath列和Name兩列的合并值,那么接下來就簡單了蛇捌,直接添加一列抚恒,調(diào)用函數(shù),參數(shù)用FolderPath&Name
然后再刪除其他列络拌,展開表格數(shù)據(jù)即可得到合并的數(shù)據(jù)俭驮。
延伸:
在第四步中,加載文件夾到pq春贸,可以看到加載后也是文件夾路徑混萝,這里就可以使用第二部分介紹的表格配置路徑,然后在此處引用的方式實現(xiàn)半自動化加載啦萍恕。