Excel fájlok betöltésének buktatói – és hogyan kerülje el őket?
Minden adattárháznak vagy üzleti intelligencia rendszernek van olyan interfésze, amelyen keresztül a felhasználó adatokat vihet a rendszerbe. Saját, más rendszerekben nem szereplő csoportosításokat, tervszámokat, szabályokat.
Jó esetben adunk az adattárház mellé az adatrögzítésre valamilyen kötött szabályokat alkalmazó, a módosításokat historikusan tároló felületet, rosszabb esetben adatbázis fájlokkal (pl MS Access) oldjuk meg ezt, és legrosszabb esetben Excellel.
Miért nehéz Excel fájlokból dolgozni?
Az Excel egy táblázatkezelő. Celláiba azt írnak a felhasználók, amit akarnak, struktúrája kötetlen. Pont ezért szeretik az üzleti felhasználók, és pont ezért szeretjük kerülni mi, adattárház fejlesztők.
Ágálhatunk az Excel ellen, javasolhatunk alternatív megoldásokat, de nagy valószínűséggel nem fogjuk tudni elkerülni, hogy legyen Excel inputja az adattárházunknak, vagy az üzleti intelligencia rendszerünknek. S ha már így alakult, akkor vegyük számba azokat a lehetséges problémákat, amelyekkel Excel fájlok betöltése során találkozhatunk, és próbáljuk meg azokat elkerülni.
Létezik az állomány?
A betöltés során legelőször azt kell ellenőriznünk, hogy létezik-e az Excel fájl, és ha igen, akkor meg tudjuk-e nyitni. Hiába létezik a fájl, ha azt egy felhasználó írásra kizárólagosan megnyitotta, mert azt Integration Services (és a DTS sem) nem fogja tudni megnyitni.
Egy Excel állomány létezését és megnyithatóságát legegyszerűbben úgy ellenőrizhetjük, hogy a betöltés első lépéseként teszteljük az SSIS-ben létrehozott adatforrást. (A konkrét megoldást az SSIS Connection teszt című cikkben megtalálja)
Duplikált kulcsok, Adattípus eltérések, NULL értékek
A duplikált kulcsok, adattípus eltérések, NULL értékek mind - mind olyan hibaforrások, amely egy jólszervezett adatbázisban nem, de egy felhasználó által karbantartott Excel fájlban nagy valószínűséggel elő fognak fordulni:
- Véletlenül kétszer vesz fel a felhasználó egy kulcselemet (például kétszer rendel önköltséget ugyanahhoz a termékhez, vagy két különböző szülőt definiál ugyanahhoz a gyerekhez, …)
- Elfelejti kitölteni a kulcsoszlopot (Megadja az önköltséget, de nem mondja meg, hogy melyik termékhez tartozik, definiál egy hierarchiabeli szülőt, de nem köti be alá a gyerekeket, …)
- Szöveget ír szám típusú oszlopba, vagy az Excel értelmezi számként a szöveget (pl főkönyvi számok esetén a nullás számlaosztály elemeit. lásd: Excel 2003-as adatok adattárházba töltésének buktatói)
Az Excel fájlok hibáit annak kell korrigálnia, aki a hibát okozta: az üzleti felhasználónak. Ritka azon esetek száma, amikor a hibát mi magunk, vagy az üzemeltetők javítani tudják. Gondoljon egy termékre, amelynek két önköltsége van. Melyik az igazi? Ezt csak az tudja, aki az Excel fájlt feltöltötte.
A legtöbb, amit tehetünk, hogy tájékoztatjuk az üzemeltetőket és a kulcsfelhasználókat: Ebből és ebből az Excel fájlból ezeket és ezeket a sorokat nem tudtuk betölteni, mert…
Megoldás
Azokat a sorokat, amelyeket nem tudunk betölteni, hibalistára kell tennünk. A hibalista alapján a felhasználók kijavítják az Excel fájlok hibáit, és újra betöltik őket.
Technikailag ezt úgy valósíthatjuk meg, hogy kényszereket (constraint-eket) definiálunk azokra a táblákra, amelyekbe az Excel fájlok sorait betöltjük, és azokat a sorokat, amelyek nem felelnek meg a kényszereknek (pl NULL értéket vagy duplikált kulcsokat tartalmaznak) a hibaágon a hibalistára küldjük:
Excel fájlok betöltése (egyszerűsített ábra)
A hibalistának nem csak a hibás rekordokat kell tartalmaznia, hanem azt is, hogy MIÉRT nem sikerült betölteni az adott sort. Ezt az információt nekünk kell hozzáfűznünk a rekordokhoz, mert ez az SSIS hibaága csak a hibás rekordokat irányítja át, a hiba okát már nem.
A hibaüzenetek elkapását oldja meg Jamie Thomson szkript komponense, mely segítségével hozzácsatolhatjuk a hibás rekordhoz a hiba okát is.
Összefoglalva: Excel fájlok betöltésekor két fő hibaforrást kell kezelnünk:
- Nem létezik a fájl (vagy nem lehet megnyitni)
-
Az Excel fájl sorai nem felelnek meg azoknak a szabályoknak, amelyeket definiáltunk:
- A kulcsok elemei között nem szerepelhet duplikált elem
- A kulcsok csak számot, szöveget, … tartalmazhatnak
- A kulcsok nem lehetnek üresek (NULL érték)
Ha ezeket a hibákat lekezeljük, akkor jelentősen csökken annak valószínűsége, hogy az Excel fájlok adatbetöltése során olyan hibába ütközünk, amely a betöltés lehaláshoz vezetnek.
Kapcsolódó anyagok:
Felhasznált irodalom:
- Jamie Thomson: Get error descriptions
Kővári Attila - BI projekt
Új hozzászólás