Temat: Współpraca AFINA z internetowymi bazami danych
Wstęp:
Szanowny Panie Danielu,
po pierwsze dziękuję, że poświęca Pan czas na wyjaśnienie swoich wątpliwości,
po drugie - tu tym bardziej się cieszę - że wiele z nich jest sensownych
Odpowiem więc Panu BEZ zgryźliwości, którą Pan stosuje.
Daniel "wloochacz" Grabowski:
Wojciech Gardziński:
Daniel "wloochacz" Grabowski:
Szanowny PanieŁooo maaatkooo... dawno takich bzdur nie czytałem.
Jak rozumiem, to ma być reklama - tak?
Tak, to jest reklama.Skoro tak, to OK - reklam a ma swoje prawa, czyli im głupsza tym lepsza.
Nie zgadzam się.Żeby była jasność - chodzi mi o ten post na grupie "Bazy Danych".
OK.
Poza tym, fajnie to wymyśliłeś - za to realizacja jest już tragiczna.
To ja już nie wiem, czy fajnie, czy niefajnie?
Fajnie, że działa z bazą danych.
Tak, działa z bazą danych na dowolnym poziomie, czyli może działać z bazą transakcyjną (czego oczywiście nie polecam), ale może też z hurtownią - ale to Pan zasugerował i OK.
Niefajnie, że działa bezpośrednio z bazą danych.
wbrew pozorom - fajnie. Tu jednak rozumiem, o co Panu chodzi - o skomplikowanie tematu. Tak, ale to jest pokaz możliwości, w innym przykładzie jest dokładnie to samo, ale sprowadzone do prostej funkcji użytkownika
http://www.goldenline.pl/forum/2286304/ksiegowi-robimy...Bezpośrednio, czyli zanurzony w Excel ConnString i SQL - to jest tragedia, a nie model.
Niekoniecznie. W AFINIE ta "tragedia" jest dość prosta do zrobienia, ja nie pisałem tych SQLków ręcznie (choć pewnie umiałbym) - zrobiło mi je Query
Tu przykład, jak można skomplikowanego SQLa przekształcić do prostej funkcji:
http://www.goldenline.pl/forum/1733630/abc-czyli-jak-k...
(Podam inne przykłady, jak tego będzie mało.)
Skoro nie rozumiesz, to powodzenia.
No, to właśnie mi się nie podoba w Pana wypowiedzi. Szanujmy się.
A tu, przyznam, bardzo sensowne spostrzeżenia:ConnectionString bezpośrednio w arkuszu, beż żadnego alisu;
Może być alias, czyli schowanie CS - tu przykład:
http://www.goldenline.pl/forum/1723390/wlasna-funkcja-...
Oho.
Dobre, nawet się nazywa "data model", tylko kto będzie w stanie z tego skorzystać, jeżeli nie zna:
1) SQLa
jak wyżej. Funkcja DANE robi model, który "ukrywa" SQLki.
2) Struktury tabel w bazie danych
Tak, ale to "odkrywa" owo Query
?
Ale w tym wypadku to nie przeszkadza, bo i tak nie piszę go ręcznie."formuły" pomieszane z ConnectionString + czysty SQL, który - zresztą, zwraca skalar.
Bo te akurat są tak zrobione, że zwracają pojedynczą wartość.
Tak, widziałem - umiem czytać.
To miło. Pana pytanie o tablicę jest sensowne.
Ciekawe co się stanie jak zwróci macierz...
Nic się nie stanie, może zwracać.
Zraz, zaraz - nic się nie stanie (czyli nic nie zwróci) czy jak, bo nie rozumiem? Jak do pojedynczej komórki zapisać tabele, czyli którą zwróci zapytanie?
A więc, nie mam na myśli zapytania typ (jak na filmie)
select sum(kwota) from tabela
a
select klient, sum(kwota) from tabela group by klient order by klient
Co się stanie, zwróci mi tabelę do komórki?
Ta funkcja potrafi zwracać tabelę - oczywiście nie do komórki, tylko do talicy komórek, gdy jest wpisana jako funkcja tablicowa
Tu przykład takiego użycia:
http://www.goldenline.pl/forum/1733630/abc-czyli-jak-k...
Ale, ma Pan rację, to nie ten przypadek. W naszym przypadku jest rzeczywiście problem, gdy funkcja zwraca tablicę a jest w jednej komórce
Ja go rozwiązałem tak, że funkcja, która zwraca tablicę i "nie mieści się" w komórce, zwraca wartość informacyjną o tym fakcie, czyli np. kropkę - i użytkownik wie że tu coś nie tak.
Zastanawiałem się nad tym i zwracałem pierwszą wartość z tablicy, ale ponieważ nie było to wtedy "widoczne", mogło powodować błędy.
Przeliczanie wszystkich komórek, a nie tylko tych, które zostały zmienione itd. itp.
Swoją droga, arkusz składający się z wielu dziesiątek (setek?) takich formuł musi być fajną zabawą przy refaktorowaniu.
Tak. Pociągnięcie myszki w dół, czyli najzwyklejsze kopiowanie formuł.
Zgoda, ale Excel zmieni adresy komórek w wyrażeniu, ale nie zmieni wyrażenia w zapisanego jako SQL - bo go nie zna i nie rozumie.
oczywiście.
Najprostszy przykład:
Załóżmy że w kolumnie A jest lista stu klientów
a w kolumnie B jest zapytanie w postaci:
select sum(netto) from sprzedaz where klient = A1
Excel zmieni adres komórki przy A1, a co jeżeli chcesz zmienić to zapytanie na formę:
select sum(netto) - sum(koszt) from sprzedaz where klient = A1
tak nie, ale tak już zadziała:
="SELECT COUNT(*) FROM tabela WHERE klient =" & A1
Search and Replace, bo Excel to możliwa?
Nie, przez formuły łączące teksty.
Trochę ratuje możliwość parametryzowania zapytań, za pomocą wartości w innych komórkach arkusza. Ale tylko trochę...
Czyli to, co jest niemożliwe w innych systemach, a fajne w Excelu, NAGLE staje się wadą... ciekawe.
To, że szanowny Pan nie zna innych systemów, które to umożliwiają nie oznacza że ich nie ma.
Nie znam i chętnie poznam. Tylko arkusz kalkulacyjny umożliwia łączenie dynamiczne parametrów użytkownika z SQLem i ciągiem połączenia.
Tu przykład, jak się inni z tym męczą:
http://www.goldenline.pl/forum/2262904/zmienna-jako-cz...Po drugie gdzie wyczytałeś, że napisałem iż to wada? To zaleta jest oczywista - jako jedyna...
OK.
Acha i jeszcze jedno - to ma tyle wspólnego z cloud computing, co ja z fakirem...
To polecam naostrzyć igły.
A ja polecam się dokształcić; tego typu teksty nadają się na bełkotliwą marketingową ulotkę, a nie jako temat do dyskusji na technicznej grupie...
Przesadza Pan.
Cloud Computing to chmura. Chmura to usługi. Usługi to serwery. Serwery to dane. Na filmie pokazałem korzystanie z usług udostępniania danych przez różne serwery.
No i to zdanie rozbawiło mnie do łez "A wszystko działa z prędkością światła".
Człowieku, przecież tu KAŻDE zapytanie wykonuje się dla KAŻDEJ komórki, czy tak?
TAK. Ale, proszę Pana, to że Pan nie umie zadawać zapytań detalicznych hurtowo, nie znaczy, że nikt nie umie.
Co to znaczy "nie umie zadawać zapytań detalicznych hurtowo"?
Co to jest zapytanie detaliczne i czym różni się od hurtowego?
No to jest właśnie patent tego rozwiązania. Jest dotąd nieznane, więc musze go wyjaśnić. Napisze niedługo na ten temat artykuł, ale tu ma Pan skrót:
http://www.goldenline.pl/forum/2240668/afin-net-google...
(ten rysunek z rakietą)
Jeżeli jest tak, jak zgaduję - to to jest maskara.
MASAKRA!!! LUDZIE MASAKRA!!! 1000 zapytań detalicznych w kilka sekund. MA-SA-KRA.
To jest powolne i angażuje istotne zasoby serwera bazodanowego,
jeżeli źródłem tego zapytania jest baza transakcyjna.
Oczywiście
Jeżeli źródłem ma być Hurtowania danych, to dlaczego nie wykorzystać np.
http://www.powerpivot.com/
Wygląda lepiej, działa lepiej i jest za friko.
Nieprawda. Power Pivot to GRUBY klient. A moje rozwiązanie to inteligentny CIENKI klient. Power pivot ma wady:
http://www.goldenline.pl/forum/1353548/wydajnosc-adoaf...(Ma Pan rację że to masakra - normalnie. Ale - proszę się przyjrzeć - tu ten problem jest rozwiązany! Filmy są nagrywane w czasie rzeczywistym - bez żadnych cięć.)
A ile jest danych w tej bazie i jakie ona ma obciążenie?
100 rekordów?
1000?
Ta baza (MySQL) jest akurat mała. Ale na innych filmach pokazuję, że na większych też działa nieźle, bo szybkość działania zależy od serwera, nie od Excela.
PS. Gratuluję trafności "przyczepek". Ale, jak Pan widzi, ja też wiem, o czym mówimy.
Być może, ale osobiście uważam że ten patent jest mało sensowny - jest po prostu zbyt skomplikowany dla zwykłego użytkownika.
No nie. Bo można temat zawrzeć w owej funkcji "DANE()", która ukrywa technikalia, ma proste argumenty i jest bardzo przyjazna.
P.S.2
Z czystej ciekawości zrobiłem testy dla tego filmiku w przeliczaniu DETALICZNYM NORMALNYM (komórka po komórce) i przeliczaniu DETALICZNYM HURTOWYM (paczkami)
Co to dokładnie jest i czym w/w przeliczanie się różnią?
Sposobem zadawania zapytań do bazy - będzie artykuł, na razie rysunek
Wszystkie warunki jak na filmie powyżej (średnie z 3 prób):
1) detalicznie normalnie (taki sposób określił Pan słowem "masakra") - 13 s
2) detalicznie hurtowo < 1 s
> A cache i bufory baz danych przed odpaleniem prób były
czyszczone, czy nie?
Tu nie ma znaczenia. Ja pokazuję na danych testowych. Oczywiście w zastosowaniach realnych, trzeba na bazie zrobić jakieś triggery wspomagające itp. Da się to zrobić.
Pomimo uszczypków, pozdrawiam.
Liczę na dalszą dyskusję.