piątek, 30 maja 2014

SQLite w Excelu

Przy dużej ilości danych, zamiast formuł tablicowych w każdym rzędzie, ręcznego filtrowania, pivotów, czasem lepiej użyć silnika bazodanowego. Od niedawna umiem już jako tako posłużyć się ACE (silnikiem bazodanowym Access Microsoftu) natomiast ciekawe podobne możliwości daje SQLite. Więcej info można znaleźć tutaj:
http://stackoverflow.com/questions/1346979/how-do-i-access-sqlite-from-vba
http://sqliteforexcel.codeplex.com/
http://www.gatekeeperforexcel.com/other-freebies.html

Istnieje też ciekawy projekt, który pozwala na przeliczenie wartości formuł vlookup z wykorzystaniem silnika SQLite. http://fastervlookup.codeplex.com/

Co do korzystania z ACE, działa to jak dotąd bardzo fajnie. Tradycyjnie w Excelu za pomocą vlookup/index(match), wykonanie raportu w przypadku danych o objętości powyżej kilkudziesięciu tysięcy linii, stworzenie raportu trwa nawet kilkadziesiąt sekund. Często Excel się po prostu poddaje, wywala. Często w moim przypadku nie mogę posłużyć się pivotem, bo jego możliwości tworzenia pól obliczeniowych, agregacji są bardzo ograniczone.
Za pomocą ACE w VBA po prostu wpisuję zapytanie SQL, jedno a nie kilkadziesiąt tysięcy formuł, więc trudno się pomylić... a uzyskuję w kolejnej zakładce kilkadziesiąt wyników, zagregowanych, połączonych z inną tabelą, posortowanych w czasie milisekund. Zmieniam dowolny parametr agregacji i nieomal natychmiast mam wynik. Ciekawe, dlaczego Microsoft nie umożliwia takiej obróbki danych,. budowania zapytań SQL agregowania i budowania między tabelami w Excelu jako standard.  Gdyby wprowadzono takie rozwiązanie konkurent, np. Libre Office Calc, byłoby ciekawie.