Przesunięty przez: cbr 23-06-2016, 15:08 |
Pole, elementy i zestawy |
Autor |
Wiadomość |
Bill Szysz
Excel Expert

Pomógł: 720 razy Posty: 3048
|
Wysłany: 02-07-2016, 01: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!!!
Pozdrawiam, były szbill62 aktualnie Bill Szysz |
|
 | ID posta:
297126
|
|
|
 |
|
|
|
Sultan1453
Exceloholic

Posty: 117
|
Wysłany: 05-07-2016, 19:24
|
|
|
Dzięki wielkie!!! Udało się rozkminić!
Szacun dla Ciebie! |
|
 | ID posta:
297354
|
|
|
 |
|
|
Bill Szysz
Excel Expert

Pomógł: 720 razy Posty: 3048
|
Wysłany: 05-07-2016, 21:47
|
|
|
No to super Teraz tylko dalej zgłębiaj tajniki PQ a zdziwisz się gdzie może Ci się przydać
Pozdrawiam |
_________________ Szkolenia z Power Query!!!
Pozdrawiam, były szbill62 aktualnie Bill Szysz |
|
 | ID posta:
297364
|
|
|
 |
|
|
Sultan1453
Exceloholic

Posty: 117
|
Wysłany: 05-07-2016, 21: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
|
|
|
 |
|
|
Cezary Czajka
ExcelSpec

Pomógł: 111 razy Posty: 550
|
|
 | ID posta:
297380
|
|
|
 |
|
|
Sultan1453
Exceloholic

Posty: 117
|
Wysłany: 24-10-2016, 09: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 37 raz(y) 15.96 KB |
|
|
 | ID posta:
305926
|
|
|
 |
|
|
Sultan1453
Exceloholic

Posty: 117
|
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
|
|
|
 |
|
|
|
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
|
 | |
| |