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: cbr
23-06-2016, 14:08
Pole, elementy i zestawy
Autor Wiadomość
szbill62
Excel Expert


Pomógł: 592 razy
Posty: 2580
Wysłany: 02-07-2016, 00:44   

Pierwszy krok jest funkcją - nic nie robi dopóki nie jest ta funkcja wywołana. A wywołana jest w kroku "Tabele" czyli
Kod:
Tabele = Table.AddColumn(#"Pogrupowano wiersze1", "wynik", each fxCorrect([tbl]) )

Jak widać dodajemy w tym kroku kolumnę w której w każdym wierszu wywoływana jest funkcja "fxCorrect" z argumentem [tbl], czyli przekazujemy do funkcji tabelę jaka znajduje się kolumnie "tbl" (dla każdego wiersza jest inna tabela z kolumny "tbl")
Wewnątrz funkcji ta tabela nazywana jest "t". Funkcja obrabia każdą przekazaną do niej tabelę wg kroków w niej zawartych (tzn zawartych w funkcji).
Krok (wewnątrz funkcji)
Kod:
 FirstMTH = t{0}[MTH],

oznacza - weź wartość z kolumny "MTH" ( [MTH} ) z pierwszego wiersza ( {0} ) aktualnie obrabianej tabeli ( t ). Pamiętać należy że numeracja wierszy (rekordów) w PQ zaczyna sie od 0, dlatego pierwszy wiersz ma indeks 0.
Wynikiem działania funkcji jest to co otrzymujemy w ostatnim kroku ( ale ostatnim wewnątrz funkcji czyli w tym wypadku jest to krok "RemCols"
Zapis
Kod:
= (t as table) as table =>

oznacza że funkcja oczekuje argumentu t jako tabeli na wejściu ( t as table) a wynikiem jej działania będzie również tabela (drugie as table).

Mam nadzieję że troszkę rozjaśniłem zagadnienie ale prawdę mówiąc są tu zastosowane dość zaawansowane techniki przekształceń i niestety nie sądzę bym w parę minut potrafił je objaśnić :-(

Pozdrawiam
_________________
Szkolenia z Power Query!!!
ID posta: 297126 Skopiuj do schowka
 
 
Sultan1453 
Fan Excela


Posty: 90
Wysłany: 05-07-2016, 18:24   

Dzięki wielkie!!! Udało się rozkminić!

Szacun dla Ciebie!
ID posta: 297354 Skopiuj do schowka
 
 
szbill62
Excel Expert


Pomógł: 592 razy
Posty: 2580
Wysłany: 05-07-2016, 20:47   

No to super :-) Teraz tylko dalej zgłębiaj tajniki PQ a zdziwisz się gdzie może Ci się przydać :mrgreen:

Pozdrawiam
_________________
Szkolenia z Power Query!!!
ID posta: 297364 Skopiuj do schowka
 
 
Sultan1453 
Fan Excela


Posty: 90
Wysłany: 05-07-2016, 20:57   

To na sto procent, aczkolwiek brakuje mi dobrej literatury (może być po angielsku). To co w interfejsie jest można samemu ogarnąć poklikając, a już pisanie takich funkcji i formuł jak Ty to zrobiłeś już nie bardzo. Dlatego chciałbym jakąś książkę na początek przeczytać o tym. Masz coś do polecenia?
ID posta: 297367 Skopiuj do schowka
 
 
Cezary Czajka 
ExcelSpec


Pomógł: 81 razy
Posty: 411
Wysłany: 05-07-2016, 22:41   

https://www.amazon.com/Da...l/dp/1615470344
np. j.w.
_________________
W sumie - jest git
ID posta: 297380 Skopiuj do schowka
 
 
Sultan1453 
Fan Excela


Posty: 90
Wysłany: 24-10-2016, 08:35   

szbill62 napisał/a:

Mam nadzieję że troszkę rozjaśniłem zagadnienie ale prawdę mówiąc są tu zastosowane dość zaawansowane techniki przekształceń i niestety nie sądzę bym w parę minut potrafił je objaśnić :-(
Pozdrawiam


Cześć, niestety muszę wracać z tym pytaniem jeszcze raz. Próbowałem zaimplementować na przykładzie rzeczywistym, ale szczerze mówiąc było ciężko. Wyszło mi coś takiego:

Kod:
let
    fxCorrect = (t as table) as table =>
    let
        FirstMonth = t{0}[Month],
        Quantity = Table.AddColumn(t,"QtyCorrect", each[Quantity]-(if[Month]>FirstMonth then List.Sum(Table.SelectRows(t,(x)=>[Month]>x[Month])[Quantity]) else 0))
in
    Quantity,
    Source = Folder.Files("D:\Users\\Desktop\COP\row data"),
    .
    .
    .
    #"Grouped Rows" = Table.Group(#"Replaced Value", {"Year", "Quarter", "Month", "Symbol", "Sales Area", "Hierarchy Level 2", "Hierarchy Level 3", "Hierarchy Level 4", "SKU", "Product", "Production Company", "Product Status", "Brand", "BIFS", "Country", "Customer ID", "Customer", "Sales Type"}, {{"Qty", each List.Sum([Quantity_]), type number}, {"SOP", each List.Sum([Subs OProfit]), type number}, {"Cons Ctrb", each List.Sum([Cons Cntrbtn]), type number}, {"Net Sales", each List.Sum([#"Net Sales (€)_"]), type number}, {"Cons GP", each List.Sum([#"Cons GProfit (€)_"]), type number}, {"COP", each List.Sum([#"COP (€)_"]), type number}, {"Cons Cogs", each List.Sum([#"Cons COGS (€)_"]), type number}, {"Bep1", each List.Sum([#"BEP (€), (NS-Cons.Cont)_"]), type number}, {"Bep2", each List.Sum([#"BEP (€), (NS-Cons.OP)_"]), type number}, {"Cons Opex", each List.Sum([#"Cons Opex €, (Cons GP-COP)_"]), type number}, {"Cons Var Exp", each List.Sum([#"Cons Variab Exp, € (Cons GP-Cons Cntrbt)_"]), type number}, {"Net Sales, LC", each List.Sum([#"Net Sales (LC)_"]), type number}, {"Bep lc", each List.Sum([#"BEP (LC), (NS-Cons.OP)_"]), type number}}),
   
#"Grouped Rows1" = Table.Group(#"Grouped Rows", {"Year", "Quarter", "Month", "Symbol", "Sales Area", "Hierarchy Level 2", "Hierarchy Level 3", "Hierarchy Level 4", "SKU", "Product", "Production Company",

"Product Status", "Brand", "BIFS", "Country", "Customer ID", "Customer", "Sales Type"}, {{"tbl", each _, type table}}),

    Table = Table.AddColumn(#"Grouped Rows1","wynik",each fxCorrect([tbl])),

    #"Removed Other Columns1" = Table.SelectColumns(Table,{"wynik"}),
   
#"Expanded wynik" = Table.ExpandTableColumn(#"Removed Other Columns1", "wynik", {"Year", "Quarter", "Month", "Symbol", "Sales Area", "Hierarchy Level 2", "Hierarchy Level 3", "Hierarchy Level 4", "SKU", "Product", "Production Company", "Product Status", "Brand", "BIFS", "Country", "Customer ID", "Customer", "Sales Type", "Qty", "SOP", "Cons Ctrb", "Net Sales", "Cons GP", "COP", "Cons Cogs", "Bep1", "Bep2", "Cons Opex", "Cons Var Exp", "Net Sales, LC", "Bep lc", "QtyCorrect"}, {"Year", "Quarter", "Month", "Symbol", "Sales Area", "Hierarchy Level 2", "Hierarchy Level 3", "Hierarchy Level 4", "SKU", "Product", "Production Company", "Product Status", "Brand", "BIFS", "Country", "Customer ID", "Customer", "Sales Type", "Qty", "SOP", "Cons Ctrb", "Net Sales", "Cons GP", "COP", "Cons Cogs", "Bep1", "Bep2", "Cons Opex", "Cons Var Exp", "Net Sales, LC", "Bep lc", "QtyCorrect"})

in
    #"Expanded wynik"


Problem się pojawia kiedy rozpakowuje tabele WYNIK. Wyskakuje Error który wskazuje na błędną funkcję (brakuje jednego z elementów z grupowania ("Grouped Rows").

Idea zadania polegała na tym żeby z narastających danych wyciągnąć dane za poszczególne miesiące tylko dla Quantity i Net Sales (€)_ (pod warunkiem pozostawiania pozostałych wartości takimi jakimi były). Czyli mają się pojawić dodatkowe 2 kolumny z quantity i net sales per miesiąc.
Starałem się zrobić analogicznie jak w Twoim przykładzie ale nie wychodzi.

W załączniku cały kod. Bo środek wyciąłem gdzie były mniej ważne transformacje.

Byłbym bardzo wdzięczny za pomoc.

pq - kod.docx
Pobierz Plik ściągnięto 7 raz(y) 15.96 KB

ID posta: 305926 Skopiuj do schowka
 
 
Sultan1453 
Fan Excela


Posty: 90
Wysłany: 08-11-2016, 08:37   

Spoko, można bez bólu załatwić to za pomocą formuł DAX i w Power Pivot.
ID posta: 307332 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.