Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
Przesunięty przez: bodek
19-09-2017, 21:32
Ocena, porównanie 2 formuł
Autor Wiadomość
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4257
Wysłany: 18-09-2017, 09:22   Ocena, porównanie 2 formuł

Mam pytanie do wszystkich, a w szczególności do kolegi Bill Szysz, bo wiem, że to jest to, co on lubi najbardziej - tak napisać formułę, że nawet tysiące wierszy nie stanowi problemu.

1. Zadanie:
Mamy dane od wiersza 2 w kolumnach A:D = "Data, Zmiana, Kod, Maszyna"
Napisz formułę liczącą unikaty kodów (kolumna C) ale z warunkami: A = E6, B = E7, D = E8, C <> "", gdzie E6, E7, E8 (Data, Zmiana i Maszyna) są wypełniane ręcznie.

2. Rozważmy 2 formuły
2a.
Kod:

=ILE.LICZB(1/CZĘSTOŚĆ(JEŻELI(($A$2:$A$500=E6)*($B$2:$B$500=E7)*($D$2:$D$500=E8)*($C$2:$C$500<>"");PODAJ.POZYCJĘ($C$2:$C$500;$C$2:$C$500;0));JEŻELI(($A$2:$A$500=E6)*($B$2:$B$500=E7)*($D$2:$D$500=E8)*($C$2:$C$500<>"");PODAJ.POZYCJĘ($C$2:$C$500;$C$2:$C$500;0))))

2b.
Kod:

=SUMA(--(CZĘSTOŚĆ(JEŻELI(($A$2:$A$500=E6)*($B$2:$B$500=E7)*($D$2:$D$500=E8)*($C$2:$C$500<>"");PODAJ.POZYCJĘ($C$2:$C$500;$C$2:$C$500;0));WIERSZ($E$2:$E$496)-WIERSZ($E$2)+1)>0))


Oczywiście pytanie pierwsze: czy obie formuły są poprawne. Moim zdaniem tak

Moim zdaniem formuła 2b jest lepsza bo:
- krótsza. Ale nie to jest najważniejsze.
- nie używa dzielenia. Operacja --(a > 0) jest lepsza od 1/a (a jest tablicą)
- Bins_array jest lepsza. Czyli tablica WIERSZ($E$2:$E$496)-WIERSZ($E$2)+1 jest lepsza od JEŻELI(($A$2:$A$500=E6)*($B$2:$B$500=E7)*($D$2:$D$500=E8)*($C$2:$C$500<>"");PODAJ.POZYCJĘ($C$2:$C$500;$C$2:$C$500;0)), i nawet nie chodzi o długość.

Czy ja mam rację? Czy pierwsza formuła jest pod jakimś innym względem jest lepsza?
ID posta: 329827 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4257
Wysłany: 18-09-2017, 10:37   

"Twierdzenie": Operacja --(a > 0) jest lepsza od 1/a (a jest tablicą) jest zawsze prawdziwe?
ID posta: 329835 Skopiuj do schowka
 
 
hurgadion 
ExcelSpec



Pomógł: 1080 razy
Posty: 2447
Wysłany: 18-09-2017, 12:10   

Hej,
trochę od siebie... długo zajmowałem się formułkami... dopóki nie poznałem podstaw VBA... odtąd przerzuciłem się na kodowanie, bo samo formułkowanie (z całym szacunkiem) to trochę sztuka dla sztuki... :lol: w każdym razie szanuję formułkowe umiejętności, bo długo byłem pasjonatem formułek... ode mnie: czasy działania formułek porównywalne, z lekkim wskazaniem na pierwszą... powodzenia... :lol:
_________________
miasto nauki
ID posta: 329844 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4257
Wysłany: 18-09-2017, 12:27   

hurgadion napisał/a:
Hej,
trochę od siebie... długo zajmowałem się formułkami... dopóki nie poznałem podstaw VBA... odtąd przerzuciłem się na kodowanie, bo samo formułkowanie (z całym szacunkiem) to trochę sztuka dla sztuki... :lol: w każdym razie szanuję formułkowe umiejętności, bo długo byłem pasjonatem formułek...


Nie o to chodzi, czy lepiej pisać formułę czy kod.

Ja zazwyczaj piszę jasno, a Wy zawsze musicie nie na temat.

Chcę porównać 2 formuły.

Cytat:

ode mnie: czasy działania formułek porównywalne, z lekkim wskazaniem na pierwszą... powodzenia... :lol:

To mnie zaskoczyłeś. Bo napisałem, że wg mnie druga jest lepsza.
1. druga jest krótsza. Ale to nie jest najważniejsza. Podałem tylko fakt.
2. Bo dzielenie w komputerze w systemie dwójkowym to skomplikowana sprawa. W każdym razie --(a > 0) jest prostsza i szybsza od 1/a
3. Bins_array jest lepsza. Czyli tablica WIERSZ($E$2:$E$496)-WIERSZ($E$2)+1 jest lepsza od JEŻELI(($A$2:$A$500=E6)*($B$2:$B$500=E7)*($D$2:$D$500=E8)*($C$2:$C$500<>"");PODAJ.POZYCJĘ($C$2:$C$500;$C$2:$C$500;0)), i nawet nie chodzi o długość.
-----------
1. Jeśli uważasz, że pierwsza jest lepsza to czy możesz uzasadnić?

2. Czy możesz odnosić się do moich 3 punktów? Jakieś kontr-argumenty?
ID posta: 329849 Skopiuj do schowka
 
 
hurgadion 
ExcelSpec



Pomógł: 1080 razy
Posty: 2447
Wysłany: 18-09-2017, 14:36   

apollo: nie wiem, która formułka jest lepsza... czas działania, to niekoniecznie najlepszy miernik... żeby zanalizować formułki, to trzebaby się dogrzebać do kodu źrodłowego Microsoftu, co nie jest chyba proste... natomiast sądzę, że wrzucają oni większość obliczeń po prostu w tablice... więc wystarczy się przyjrzeć jak są wykonywane działania na tablicach... chyba więcej nie jestem w stanie pomóc, powodzenia... :lol:
_________________
miasto nauki
ID posta: 329861 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4257
Wysłany: 18-09-2017, 15:39   

hurgadion napisał/a:
apollo: nie wiem, która formułka jest lepsza... czas działania, to niekoniecznie najlepszy miernik...

Dlaczego Ty musisz napisać nie na temat?

Chcę konkretne rzeczy: porównać 2 formuły pod względem prostoty, szybkości wykonania.

Gdzie napisałem, że czas działania to najlepszy miernik?
Napisałem, że druga jest lepsza. Ale lepsza nie dlatego, że czas jest jest lepszy. Lepsza bo i prostsza i czas jest lepszy - lepsza bo pod każdym względem (moim zdaniem) jest lepsza.

Przecież zależy od sytuacji raz bierzemy jedne kryterium, kiedy indziej inne kryterium.
Np. Jeśli formuła jest tylko w 1 komórce to wolimy raczej prostszą formułę mimo, że jest trochę wolniejsza. Ale jeśli mamy tysiące formuł to bierzemy nawet bardziej skomplikowaną formułę ale szybszą.

Pominę sytuację, kiedy prostsza jest zarazem szybsza, bo wybór jest oczywisty.

Ponieważ napisałeś, że wg Ciebie pierwsza jest lepsza, dlatego jestem ciekaw uzasadnienia. Skoro jest to tylko czyste przekonanie to trudno.
ID posta: 329865 Skopiuj do schowka
 
 
Kaper 



Zaproszone osoby: 3
Wersja: Win Office 2016
Pomógł: 3712 razy
Posty: 7394
Wysłany: 18-09-2017, 15:48   

Utwierdzając Cię w wizji, że 2b jest lepsza od 2a dodam, że ta pierwsza bazuje na zliczaniu w ostatnim etapie nie-błędów. I co prawda błąd (obsłużony, a w dodatku celowo generowany) to nic strasznego, ale jeśli szukamy "ogólnej definicji lepszości" to być może nieprzechodzenie przez etap błędów jest zaletą.

No ale to taka ciut filozoficzna uwaga :-)
_________________
Kaper Jej Królewskiej Mości :boss

Jestem leniwy, ale się staram
ID posta: 329866 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4257
Wysłany: 18-09-2017, 16:05   

Kaper napisał/a:
Utwierdzając Cię w wizji, że 2b jest lepsza od 2a dodam, że ta pierwsza bazuje na zliczaniu w ostatnim etapie nie-błędów. I co prawda błąd (obsłużony, a w dodatku celowo generowany) to nic strasznego, ale jeśli szukamy "ogólnej definicji lepszości" to być może nieprzechodzenie przez etap błędów jest zaletą.

No ale to taka ciut filozoficzna uwaga :-)

Dziękuję za opinię. Co do błędów to wiem. Bo COUNT ignoruje błędy.

I jestem gotów przyjąć, że błędy nie biorą udziału w ocenie. Chodzi tylko o:
1. Obliczenie --(A > 0) jest lepsze od 1/A. Czyli nieużycie dzielenia jest lepsze od użycia dzielenia.
2. Bins_array jest lepsza. Czyli tablica WIERSZ($E$2:$E$496)-WIERSZ($E$2)+1 jest lepsza od JEŻELI(($A$2:$A$500=E6)*($B$2:$B$500=E7)*($D$2:$D$500=E8)*($C$2:$C$500<>"");PODAJ.POZYCJĘ($C$2:$C$500;$C$2:$C$500;0)), i nawet nie chodzi o długość.
ID posta: 329868 Skopiuj do schowka
 
 
hurgadion 
ExcelSpec



Pomógł: 1080 razy
Posty: 2447
Wysłany: 18-09-2017, 17:33   

sorki, ale nie wypowiadam się w temacie, jeżeli nie potrafię obiektywnie stwierdzić, który objekt jest lepszy... :lol: dlatego porównałem czasy, bo to jest pewien miernik skuteczności formułki... na razie tyle... :lol:
_________________
miasto nauki
ID posta: 329874 Skopiuj do schowka
 
 
Bill Szysz 
Excel Expert


Wersja: Win Office 365
Pomógł: 786 razy
Posty: 3277
Wysłany: 19-09-2017, 10:26   

apollo, tak na szybko (bo zajęty jestem akurat - pewnie jutro albo pojutrze coś więcej na ten temat napiszę). To tylko porada.
Druga jest lepsza z powodów które przedstawiłeś ale..... ale i ją można poddac trochę przeróbce ;-) choc dla 500 wierszy i tylko jednego wyliczenia to nie wiem czy będzie efekt wydajnościowy
Używasz iloczynu a wg mnie lepiej byłoby uzyć zagnieżdżonych JEŻELI ponieważ niespełnienie któregoś z warunków nie powoduje sprawdzania następnych - od razu dostajemy FAŁSZ bez sprawdzania kolejnych. To może mieć efekt wydajnościowy.

Popatrzę na to więcej przy czasie a na razie tylko ta wskazówka.

Pozdrawiam ;-)
_________________
Szkolenia z Power Query!!!

Pozdrawiam, były szbill62 aktualnie Bill Szysz
ID posta: 329927 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4257
Wysłany: 19-09-2017, 13:11   

Bill Szysz napisał/a:

Używasz iloczynu a wg mnie lepiej byłoby uzyć zagnieżdżonych JEŻELI ponieważ niespełnienie któregoś z warunków nie powoduje sprawdzania następnych - od razu dostajemy FAŁSZ bez sprawdzania kolejnych. To może mieć efekt wydajnościowy.

Za to już dziękuję. Mały efekt też się liczy. Bo rozważam konkretny problem ale wskazówki będą pożyteczne i w innych problemach.

Pozdrawiam
ID posta: 329946 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe