Autor Wątek: subiekt zestawienie a prawidłowe liczenie marży  (Przeczytany 7820 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline exequos

  • Aktywny użytkownik
  • ***
  • Wiadomości: 356
  • Reputacja +2/-0
  • Wersja programu: 1.52 HF1
subiekt zestawienie a prawidłowe liczenie marży
« dnia: Czerwiec 03, 2018, 08:32:53 »
W przypadku zestawienia sprzedaż wg okresów jest kolumna marża z wartością dla każdego wygenerowanego wiersza
oraz dodatkowo jest wiersz "subiekta" gdzie są podsumowania wartości z kolumn i marża jest wyliczona wg tego podsumowania

Czy jest jakiś sposób aby klonując (z profilera) to zestawienie subiektowe do własnego sql, opisać kolumnę marża by podsuma była średnią a nie sumą wartości marż?

zapytanie w części wyliczającej wartość marży dla wiersza wygląda tak
CONVERT(MONEY, CASE WHEN SUM(ob_WartNetto * ob_Znak)<>0 THEN (SUM((ob_WartNetto -CASE WHEN (ob_TowRodzaj&6)>0 THEN 0.00 ELSE dbo.fnZestSub_KosztSpr(dok_DataWyst, ob_Id) END) * ob_Znak)/SUM(ob_WartNetto * ob_Znak))*100 ELSE 0.00 END) as Marża

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17053
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #1 dnia: Czerwiec 03, 2018, 10:12:53 »
Przecież podsumowania listy są parametrami listy i treść zestawienie nie ma z tym nic wspólnego.
Daniel, Białystok.

Offline exequos

  • Aktywny użytkownik
  • ***
  • Wiadomości: 356
  • Reputacja +2/-0
  • Wersja programu: 1.52 HF1
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #2 dnia: Czerwiec 03, 2018, 10:27:07 »
bingo - dziękuję!
faktycznie zbłądziłem trochę bo źle zinterpretowałem helpa (info o tym, że parametry kolumn listy są zapisywanie w bazie)
czyli jako ciekawostka wychodzi, że standardowe wbudowane zestawienia mają to zdefiniowane z góry dla każdego użytkownika

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17053
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #3 dnia: Czerwiec 03, 2018, 10:55:42 »
Nie wiem jaka to "ciekawostka", gdyż tak działa od zawsze każda lista w programie, zawsze zwracam na to uwagę na szkoleniu z podstaw obsługi programu - domyślne ustawienia filtrów i list są definiowane przez producenta i zapamiętywane dla danego użytkownika, specyfiką zestawień jest to, że nie są zapamiętywane ustawienia filtrów (kiedyś nie były pamiętane ustawienia list zestawień SQL, ale od dawna już są zapamiętywane).
Daniel, Białystok.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #4 dnia: Lipiec 06, 2018, 17:23:48 »
Można dorobić własny wiersz podsumowujący w zestawieniu, który dobrze policzy takie rzeczy. Poszukaj sobie w necie o gropowaniach ROLLUP, GROUPING SETS, CUBE. Cuda-wianki można tym robić.

PS. Wyliczanie kosztu funkcją insertowską przy dużych ilościach dokumentów i pozycji strasznie powoli idzie. Da się to dobrze zrobić po swojemu z pewnymi uproszczeniami, które przynajmniej u mnie nikomu nie przeszkadzają.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17053
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #5 dnia: Lipiec 06, 2018, 18:27:22 »
Można dorobić własny wiersz podsumowujący w zestawieniu, który dobrze policzy takie rzeczy. Poszukaj sobie w necie o gropowaniach ROLLUP, GROUPING SETS, CUBE. Cuda-wianki można tym robić.

A po co cuda-wianki jak wystarczy zwykłe union all ? Niestety podsumowanie listy to nie to samo co kolejny wiersz z danymi.

PS. Wyliczanie kosztu funkcją insertowską przy dużych ilościach dokumentów i pozycji strasznie powoli idzie. Da się to dobrze zrobić po swojemu z pewnymi uproszczeniami, które przynajmniej u mnie nikomu nie przeszkadzają.

Wiemy, że może wyliczać zestawienia w pomijalnym czasie, każdy wybiera rozwiązania do swoich potrzeb.
Daniel, Białystok.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #6 dnia: Lipiec 09, 2018, 12:53:29 »
Pytający wspomniał o wierszu podsumowującym zestawienie i jego zachowaniu, które nie jest takie jak oczekuje. Zmienić tego się nie da (przynajmniej ja o tym nic nie wiem) ale da się zrobić własny wiersz podsumowujący.

Pisanie całego selecta pod union all jest bez sensu jeśli chce się dodać tylko podsumowanie. Od tego jest właśnie ROLLUP i pozostałe klauzule, które opisałem. Po co smarować całe dodatkowe zapytanie skoro najprostszy wariant wiersza podsumowującego całe zestawienie można zrobić dopisując WITH ROLLUP po GROUP BY? Policzy to średnią marżę jak należy.
« Ostatnia zmiana: Lipiec 09, 2018, 12:56:40 wysłana przez yemet »

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17053
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #7 dnia: Lipiec 09, 2018, 13:06:03 »
Pytający wspomniał o wierszu podsumowującym zestawienie i jego zachowaniu, które nie jest takie jak oczekuje. Zmienić tego się nie da (przynajmniej ja o tym nic nie wiem) ale da się zrobić własny wiersz podsumowujący.

Przeczytaj dokładnie wątek - da się, napisałem jak to zrobić, @exequos podziękował.

Pisanie całego selecta pod union all jest bez sensu jeśli chce się dodać tylko podsumowanie. Od tego jest właśnie ROLLUP i pozostałe klauzule, które opisałem. Po co smarować całe dodatkowe zapytanie skoro najprostszy wariant wiersza podsumowującego całe zestawienie można zrobić dopisując WITH ROLLUP po GROUP BY? Policzy to średnią marżę jak należy.

Nie trzeba pisać całego zapytanie tylko skopiować i zmienić sposób grupowania co dla początkującego powinno być łatwiejsze, gdyż bazuje na tej samej składni, z której już korzystał... Poza tym przejdź do praktyki, policz najpierw tę średnią marżę "jak należy", a nie jako średnią arytmetyczną i zobacz co Ci z tego wyjdzie.
Daniel, Białystok.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #8 dnia: Lipiec 09, 2018, 13:20:32 »
ROLLUP dobrze policzy wysokość marży. Sprawdziłem i przetestowałem wielokrotnie. Funkcjonuje u mnie w kilku jak nie kilkunastu zestawieniach. A Pan tego najwyraźniej jeszcze nie przerabiał skoro proponuje Pan całkowicie zbędne klepanie union all.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9209
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #9 dnia: Lipiec 09, 2018, 14:02:08 »
Prosty test:

SELECT towar, sum(netto) netto, sum(zysk) netto, avg(marza) marza FROM (
SELECT 'towar' towar, 10.99 netto, 1 zysk, marza=convert(money, 1/10.99)*100
union all
SELECT 'towar2',11.99 netto, 2 zysk, marza=convert(money, 2/11.99)*100
) x
GROUP BY x.towar
with rollup

Wyniki z zapytania i Subiekta (3 kolumna z zapytania jest błędnie nazwana - powinna się nazywać ZYSK) :
Sławek, Zduńska Wola

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4875
  • Reputacja +172/-11
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #10 dnia: Lipiec 09, 2018, 14:05:25 »
O 16 groszy się będziesz wykłócał?
Sknera!  ;)
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #11 dnia: Lipiec 09, 2018, 15:38:37 »
OK pośpieszyłem się  przy czytaniu zadanego pytania i się deko zapędziłem. Nie zmienia to jednak tego, że z powodzeniem używam rollupa i daje on prawidłowe wyniki. Najwyraźniej konstrukcja moich zapytań jest inna.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9209
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #12 dnia: Lipiec 09, 2018, 15:51:04 »
No to może zdradź szablon zapytania, nie musi być dokładnie. Chodzi o to co i jak jest agregowane.
Sławek, Zduńska Wola

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #13 dnia: Lipiec 09, 2018, 16:55:08 »
Zgadza się, rozbija się o agregację. To zestawienie korzysta z widoku wspólnego dla wielu różnych zestawień, które są mutacjami wielu fabrycznych zestawień. W widoku sekcja cenowo-ilościowa wygląda tak

,iloscmag=isnull(sum(dp.ob_IloscMag*  case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0)
,netto=isnull(sum(dp.ob_WartNetto * case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0)
,brutto=isnull(sum(dp.ob_WartBrutto * case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0)
,koszt_z_pozycji=sum((CASE dd.dok_typ WHEN 14 THEN - 1 ELSE dp.ob_Znak END) * ISNULL(koszt_pozycji.koszt, 0))
,zysk_z_pozycji=(isnull(sum(dp.ob_WartNetto * case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0))-(sum((CASE dd.dok_typ WHEN 14 THEN - 1 ELSE dp.ob_Znak END) * ISNULL(koszt_pozycji.koszt, 0)))

Koszt pozycji jest joinowany z CTE, które przemiata przez dok_magruch i dok_magwart. Przyjmuję zawsze finalny koszt serii, po wszystkich korektach.

W zestawieniu końcowym netto, brutto, koszt i zysk lecą na wprost przez SUM() a marżę wyliczam formułką (też z sumowaniem), która bierze poprawki na pozycje z zerową wartością netto.


Offline globaltc

  • Nowy użytkownik
  • *
  • Wiadomości: 37
  • Reputacja +0/-0
  • Wersja programu: 1.59 HF1
Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #14 dnia: Październik 02, 2019, 17:59:25 »
Wtrącę się do dyskusji, w parametrach listy ustawiam, średnią dla marży, jednak wylicza mi ją jako średnią arytmetyczną a nie ważoną. Jak to zmienić ?

Forum Użytkownikow Subiekt GT

Odp: subiekt zestawienie a prawidłowe liczenie marży
« Odpowiedź #14 dnia: Październik 02, 2019, 17:59:25 »