poniedziałek, 21 września 2009

Hurtownia danych z punktu widzenia jej Administratora i Użytkownika

Filmik:
http://afin.net/webcasts/Demo_DataWarehouse_4Admin&4User.swf

Opis:
Film pokazuje sposób stworzenia i użytkowania Hurtowni Danych z    
punktu widzenia:
1. Administratora IT, tj. stworzenie procesu (na bazie szablonu    
AFIN.NET) zasilania w dane (tu prosty przykład zaciągnięcia    
jednej tabeli z bazy SQL Server Express), procesu przetworzenia    
danych do postaci 'analitycznej' danych (tu: stworzenie zapytania    
'ranking klientów względem wartości sumarycznej sprzedaży' do    
nowej tabeli) oraz przetestowanie działania procesu.
2. Użytkownika AFIN.NET / Excela, tj. wykonania (na bazie szablonu    
AFIN.NET) prostego procesu pobrania danych z Hurtowni Danych,    
stworzonej przez Administratora IT - pobierana jest tabela w formie    
podstawowej oraz druga tabela przetworzona. Oba procesy 'pobrania'    
danych wklejają uzyskane dane do skoroszytu analityka - na tych    
danych łatwo zbudować już dowolne raporty, np. tabelę    
przestawną lub opublikować je procedurą 'publikacja' AFIN.NET.

Ponieważ wszystko tworzone jest ad-hoc i dla celów pokazowych,    
obydwa procesy są maksymalnie uproszczone. Można jednak dowolnie    
je rozbudowywać - o stworzenie i obsługę odpowiedniej bazy (tu:    
accessowej) troszczy się AFIN.NET.

Zapraszamy do próby stworzenia takowej bazy we własnym zakresie i    
omówienie jej tutaj.

Wnioski:
Stworzenie i użytkowanie Hurtowni Danych jest w AFIN.NET dziecinnie    
proste. W jej rozbudowie pomoże firmowy informatyk, który ma    
zapewnione bezpieczeństwo danych transakcyjnych i możliwość    
odświeżania hurtowni w dowolnym momencie i w bardzo prosty    
sposób. Oczywiście, odświeżanie na tym poziomie można bardzo    
łatwo zautomatyzować, zlecając uruchomienie procesu np.    
codziennie o określonej godzinie.
Analityk ma zapewnioną aktualność danych oraz dane w formie,    
dzięki której raportowanie jest już kwestią nadania odpowiednich    
(własnych) formatów.
Nie jest też nic w stanie 'popsuć' w danych    
transakcyjnych.

środa, 16 września 2009

Automatyzacja raportowania

Problem(y):
Jak wykonać 100 raportów standardowych?
Jak uwzględnić w nich, zadane z góry, parametry, np. rok i    
miesiąc, którego raporty dotyczą?
Jak opublikować każdy z raportów gdzie indziej?
Czy można automatycznie publikować do interfejsu Web?

Film:
http://afin.net/webcasts/HowTo_AutomatizeReports.swf

Opis:
1. Otwórz odpowiedni szablon AFIN.NET.IS i zapisz go w dowolnym    
miejscu.
2. Stwórz raport(y) i zapisz je na dysku.
Pamiętaj o wpisaniu parametrów (z odpowiednim nagłówkiem) w    
stałe miejsce we wszystkich plikach (arkusz, zakres komórek)
3. Zdefiniuj opcje publikacji każdego z raportów.
4. Zamknij raporty z zapisem zmian.
5. Otwórz (uaktywnij) arkusz programu automatyzującego
6. Dostosuj parametry programu
7. Uruchamiaj w dowolnym momencie z dowolnymi parametrami - program    
otworzy każdy z raportów, przeliczy go, opublikuje i zamknie -    
cały proces jednym kliknięciem myszy
8. Podaj użytkownikom adresy, gdzie publikują się raporty (tu:    
pliki Excela lub strony HTML).

Wnioski:
Problemy? Jakie problemy?

wtorek, 8 września 2009

Hurtownia danych + dowolne raporty księgowe dla holdingu

Temat:
Hurtownia danych + dowolne raporty księgowe dla holdingu na    
podstawie zupełnie niestandardowych tekstowych wydruków    
hierarchicznych (nieimportowalnych ani do Excela, ani przez ODBC)

Filmik:
http://afin.net/webcasts/Demo_DataWarehouseFromManyTextExports.swf

Opis:
Firma ma 4 oddziały, tu nazwy CELOWO zmieniłem na 'AA', 'BB', 'CC'    
i 'DD'. Każdy z tych oddziałów na szczęście ma taki sam program    
księgowy. Te programy nie dają dostępu do bazy, ale produkują    
wydruki, tu: zestawienia obrotów i sald.
Wydruki te są bardzo trudne do obróbki. Pomijam fakt, że dane    
dot. konta są w różnych wierszach, a konkretnie jest wiersz konta    
i pod spodem wiersz wartości, to jeszcze, producent tejże FKi    
celowo(!) żeby trudniej było cokolwiek z tym zrobić, wstawia    
znaki typu CHR(8) i nie tylko w różne miejsca tekstu.

Takich plików mamy w tym przykładzie co miesiąc  dla każdej z    
firm - przychodzą mejlem, wrzucamy je do jednego katalogu,    
nazywając odpowiednio 'AA200502.txt', itd.

Film pokazuje, jak można to wszystko skonsolidować:
1. Pokaz środowiska, czyli jakie katalogi, jak wygląda tekst, itp.
Teksty są obcięte do ok. 200 wierszy, normalnie mają ok 2    
tysięcy wierszy, czyli konwersja trwa 30s*10 - ok. 5 minut. Jest to    
CAŁOŚĆ danych księgowych w zakresie obrotów i sald księgowych    
4 firm z 6-ciu miesięcy.

2. Konwersja plików tekstowych, która wszystkie pliki, jednym    
procesem, ładuje do tabel nowego pliku Accessa    
'AFIN.NET.ExportFile.mdb'
(Ten etap trwa stosunkowo długo, wspomniane powyżej 30 sekund -    
proszę przewijać filmik.)

3. Otwierany jest arkusz - program zasilający hurtownię, tzw. IS    
(na wzór SQL Server Information Services)

4. Prezentacja raportów, opartych na PEŁNEJ kostce OLAP.: tabela    
przestawna, wykres

5. Prezentacja raportu, OGRANICZONEGO tylko do danych firmy 'AA'    
(tzw partycja kostki) - tu po prostu mniejsza kostka od razu    
zapisywana w oddzielnym katalogu (gdzie np. system plików ogranicza    
dostęp) - można ją również np. wysyłać mejlem (tu pominięte)

6. Prezentacja dowolnego raportu księgowego w czystym arkuszu    
Excela za pomocą funkcji DANE()

Wnioski:
1. Stworzenie takiego modelu zajęło 1 dzień, z tego co najmniej    
pół poszło na odszyfrowywanie zagwozdek, zgotowanych przez    
producenta owych wydruków.
2. Nie ma wzoru pliku tekstowego, którego nie dało by się    
odczytać.
3. Odświeżenie całości procesu ładowania hurtowni danych    
księgowych holdingu to ok. 6 minut - dwa kliknięcia myszą.    
Oczywiście proces można automatycznie inicjować w nocy, czy też    
uruchamiać na życzenie.
Proces ten może być również dowolnie ograniczany, czyli np.    
tylko do jednego miesiąca (bo po co powtórnie konwertować    
obrotówki ze stycznia), czy też jednej firmy, np. gdy w któreś z    
firm coś tajemnie doksięgują w lutym i obroty na kontach w lutym    
i następnych miesiącach się zmienią.

niedziela, 6 września 2009

Hierarchiczne pliki tekstowe jako źródło danych

Filmik:
http://afin.net/webcasts/Demo_AfinNetTC_HierarchizedText.swf

Opis:
Film pokazuje, jak z pliku tekstowego o informacji zapisanej    
'hierarchicznie', czyli w różnych wierszach (tu wiersz numeru    
konta NIE ODPOWIADA wierszowi, gdzie są dane numeryczne),    
sporządzić płaską tabelę danych.
I zapisać ją w dowolnej bazie danych (tu: w Accessie, ale Excel    
też jest opcją)

Film pokazuje CAŁY proces definicji (i, zdarzających się przy    
tym, pomyłek i poprawek) takiego odczytu.

Wnioski:
Jesli jakikolwiek system nie potrafi wyrzucić danych, jakich    
analityk sobie życzy, do jakieś bazy danych, Excela lub normalnego    
pliku tekstowego (csv albo inny - ze wszystkimi informacjami w    
jednym wierszu), a potrafi tylko do takiego 'wydruku' - nie przejmuj    
się - wszystko można odczarować.

I pliczek, żeby nie szukać:
|---------------------------------|
|Title1     Account Number        |
|---------------------------------|
|info1|info2|     debit|    credit| 
|---------------------------------|
|Record1    AccNo:100.01          |
|---------------------------------|
|a1   |b1   |   1000,00|      0,00| 
|---------------------------------|
|a1   |b2   |   2000,00|      0,00| 
|---------------------------------|
|Record2    AccNo:200.01          |
|---------------------------------|
|a2   |b2   |  10000,00|   1000,00|
|---------------------------------|
|Record3    AccNo:300.01          |
|---------------------------------|
|a2   |b1   |   3000,00|      0,00|
|---------------------------------|
|a1   |b1   |      0,00|    100,00|
|---------------------------------|
|a3   |b2   |      0,00|  12345,67|
|---------------------------------|

piątek, 4 września 2009

Jak posłownikować dane własnym słownikiem?

Natchnienie:
http://www.goldenline.pl/forum/sap/1108920

Film:
http://afin.net/webcasts/HowTo_CreateYourOwnAdHocDictionary.swf

Opis:
Jak pobrać dane z systemu ERP, np. dane faktur, i posłownikować    
(uszlachetnić) je, stworzonym ad-hoc, własnym słownikiem, przy    
czym słownik ma być łatwo dostępny i edytowalny, czytaj: ma być    
w Excelu
Tu: Dane faktur pobierane są z przykładowej, lokalnej bazy danych    
SQL Server Express, ale może to być dowolna baza produkcyjna: SQL    
Server, Oracle, DB2

Streszczenie filmu:

1. Otwieramy odpowiedni szablon AFIN.NET

2. Tworzymy kwerendę do danych faktur w bazie SQL Server

3. Pobieramy definicję połączenia do arkusza szablonu - naszego    
programu, przetwarzającego dane.

4. Tworzymy słownik.
Najlepiej wykorzystać do tego już istniejącą kwerendę do tabeli    
SQLS - w niej tworzymy unikalną listę nazw kontrahentów, która    
będzie jednocześnie kluczem głównym tabeli słownikowej, tu:    
pole 'Nazwa'
W słowniku tworzymy dwa nowe pola 'City' i 'Dealer'.

5. Zapisujemy słownik w pliku Excela - można użyć, oczywiście,    
dowolny inny, już istniejący, słownik.

6. Tworzymy kwerendę do tabeli słownika w pliku Excela i pobieramy    
z niej definicję połączenia

7. Uruchamiamy program testowo, aby stworzyć bazę Accessa,    
integrującą dwie, powyższe tabele (wpisanie 'stop' zatrzymuje    
program w odpowiednim miejscu)

8. Tworzymy kwerendę do bazy Accessa WorkBase.mdb, łączymy tabele    
relacją i pobieramy wszystkie dane do Exclea i, podobnie jak    
powyżej, pobieramy z niej definicję (już tylko zapytania) do    
kolejnego kroku naszego programu.

9. Uruchamiamy program, który realizuje wszystkie powyższe    
instrukcje, wklejając połączone dane do arkusza.

10. Tworzymy żądane analizy (tu: tabela przestawna i wykres    
przestawny) na połączonych danych. Analizy możemy modyfikować i    
odświeżać, a słownik edytować w sposób dowolny.

Wnioski:
1. Stworzenie własnego słownika w produkcyjnej bazie danych jest    
zwykle niemożliwe ze względów bezpieczeństwa bazy.
2. Kolejnym problemem jest trudność w zaimportowaniu do tej bazy    
danych z naszego słownika - tu jest to możliwe.
3. Architektura tego rozwiązania jest uniwersalna - to, że baza na    
coś nie pozwala, albo jest to w niej trudne, nie znaczy, że nie    
jest możliwe.

czwartek, 3 września 2009

Konsolidacja danych z plików - prosty przykład (tu: pliki Excela)

Film:
http://afin.net/webcasts/Demo_FileConsolidation1.swf

To PROSTY przykład, jak skonsolidować dane z dowolnej ilości    
tabel z dowolnego systemu bazodanowego.
Tu na przykładzie arkuszy w kilku plikach Excela, ale to tylko    
przykład, tabele mogą być dowolne w dowolnym źródle danych.
MS Query poda nam właściwą definicję, niezależnie od typu    
źródła.


Streszczenie filmu:

1. Prezentacja danych: 3 pliki: File1.xls, File2.xls, File3.xls,    
zawierające cząstkowe dane, ale w tabelach (tu: arkuszach) o    
takiej samej strukturze.

2. Użycie szablonu AFIN.NET do konsolidacji danych
Wpisujemy listę nazw plików (najlepiej bez rozszerzeń) jako    
kolumnę parametrów

3. Tworzymy kwerendę do pierwszego pliku z naszej listy, pobieramy    
całą tabelę do konsolidacji i tworzymy DODATKOWE pole, będące    
nazwą pliku, z którego dane pobieramy, a które będzie też    
wyróżnikiem źródła danych w naszych dalszych analizach.

4. Po umieszczeniu kwerendy w nowym arkuszu, pobieramy z niej    
definicję źródła danych oraz tekst zapytania bazodanowego do    
odpowiednich pól arkusza szablonu.

5. PARAMETRYZUJEMY formuły, utworzone z powyższych definicji,    
odwołując się do kolumny 'A', gdzie wpisaliśmy parametry - nazwy    
plików do konsolidacji

6. Po zakończeniu parametryzacji kopiujemy formuły w dół,    
wzdłuż kolumny parametrów

7. Uruchamiamy program

8. Tworzymy analizy na skonsolidowanych danych - tu: prosta tabela    
przestawna.

Wnioski:
1. Całość procesu jest odświeżalna jednym kliknięciem myszy
2. Zakres plików można dowolnie zwężać lub poszerzać, dodając    
lub odejmując wiersze w arkuszu 'Program'.


Uwagi:
Powyższe zadanie jest dość typowym zadaniem w analizie danych,    
więc nie tylko AFIN.NET oferuje rozwiązanie tego problemu.

Polecam zapoznać się również z innymi rozwiązaniami, np. kolegi    
Przemka R.:
http://vbamania.blogspot.com/2009_04_26_archive.html

lub rozwiązaniem za pomocą rozbudowanego zapytania SQL:
http://afin.net/samples/lessons/SQL.10_Union/AFIN.NET.IS_SQL.Lesson10_mirror.htm