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
ID tematu: 74499 Skopiuj do schowka PQ skrypt
Autor Wiadomość
Pawel07 
Starszy Forumowicz


Wersja: Win Office 2016
Posty: 35
Wysłany: 11-04-2023, 22:21   PQ skrypt

Cześć,

Mam kod w PQ, który grupuje wartości z tabeli po unikalnej marce auta. Pozostałe parametry nieunikalne dla marki auta przedstawia w kolejnych kolumnach dodatkowo z użyciem separatora w formie nowego wiersza.

Kod:
let
    Źródło = Excel.CurrentWorkbook(){[Name="dane"]}[Content],
    #"Pogrupowano wiersze" = Table.Group(Źródło, {"Marka"}, {{"data", each _, type table [Marka=text, #"Model (EN)"=text, Typ=text, #"Silnik (EN)"=text]}}),
    #"Dodano kolumnę niestandardową" = Table.AddColumn(#"Pogrupowano wiersze", "Model", each Table.Column([data], "Model")),
    #"Dodano kolumnę niestandardową1" = Table.AddColumn(#"Dodano kolumnę niestandardową", "Typ", each Table.Column([data], "Typ")),
    #"Dodano kolumnę niestandardową2" = Table.AddColumn(#"Dodano kolumnę niestandardową1", "Silnik", each Table.Column([data], "Silnik")),
    #"Wyodrębnione wartości" = Table.TransformColumns(#"Dodano kolumnę niestandardową2", {"Model", each Text.Combine(List.Transform(_, Text.From), "#(lf)"), type text}),
    #"Wyodrębnione wartości1" = Table.TransformColumns(#"Wyodrębnione wartości", {"Typ", each Text.Combine(List.Transform(_, Text.From), "#(lf)"), type text}),
    #"Wyodrębnione wartości2" = Table.TransformColumns(#"Wyodrębnione wartości1", {"Silnik", each Text.Combine(List.Transform(_, Text.From), "#(lf)"), type text})
in
    #"Wyodrębnione wartości2"


Chce uprościć liczbę kroków aby otrzymać ten sam efekt:

Kod:
let
    Źródło = Excel.CurrentWorkbook(){[Name="dane"]}[Content],
    #"Pogrupowano wiersze" = Table.Group(Źródło, {"Marka"}, {{"data", each _, type table [Marka=text, #"Model (EN)"=text, Typ=text, #"Silnik (EN)"=text]}}),
    #"Dodano kolumnę niestandardową" = Table.AddColumn(#"Pogrupowano wiersze", {"Model", each Text.Combine(List.Transform(Table.Column([data], "Model"), _, Text.From), "#(lf)"), type text})
in
    #"Dodano kolumnę niestandardową"


daje to taki komunikat błędu:

Cytat:
Expression.Error: Do funkcji przekazano następującą liczbę argumentów: 2; funkcja oczekiwała od 3 do 4 argumentów.
Szczegóły:
Pattern=
Arguments=[List]


Próbuje ale nie wiem gdzie brakuje dodatkowego argumentu.
W skrócie chciałbym otrzymać efekt końcowy jak kod u góry w jak najmniejszej liczbie kroków.
Czy da się ?
Proszę o pomoc

query.xlsm
Pobierz Plik ściągnięto 36 raz(y) 33.76 KB

ID posta: 427276 Skopiuj do schowka
 
 
Kaper 



Zaproszone osoby: 2
Wersja: Win Office 365
Pomógł: 4479 razy
Posty: 8876
Wysłany: 12-04-2023, 14:54   

Jak rozumiem chcesz zgrupować dwa kroki dodawanie kolumny niestandardowej i wyodrębnianie wartości w jeden krok.
Spróbuj tak:
Kod:
let
    Źródło = Excel.CurrentWorkbook(){[Name="dane"]}[Content],
    #"Pogrupowano wiersze" = Table.Group(Źródło, {"Marka"}, {{"data", each _, type table [Marka=text, #"Model (EN)"=text, Typ=text, #"Silnik (EN)"=text]}}),
    #"Wyodrębnione wartości" = Table.TransformColumns(Table.AddColumn(#"Pogrupowano wiersze", "Model", each Table.Column([data], "Model")), {"Model", each Text.Combine(List.Transform(_, Text.From), "#(lf)"), type text})
in
    #"Wyodrębnione wartości"
_________________
Kaper Jej Królewskiej Mości :boss

Jeśli dane będą torturowane dość długo, przyznają się do wszystkiego
ID posta: 427293 Skopiuj do schowka
 
 
Pawel07 
Starszy Forumowicz


Wersja: Win Office 2016
Posty: 35
Wysłany: 12-04-2023, 22:17   

To jest to.
Po grupowaniu oszczędzam liczbe kroków o 50%

Korzystając z podpowiedzi rozwinełem zapytanie o 2 kolejne kroki. Czyli oprócz modelu jak wyżej dodałem typ i silnik

Kod:
let
    Źródło = Excel.CurrentWorkbook(){[Name="dane"]}[Content],
    #"Pogrupowano wiersze" = Table.Group(Źródło, {"Marka"}, {{"data", each _, type table [Marka=text, #"Model (EN)"=text, Typ=text, #"Silnik (EN)"=text]}}),
    model = Table.TransformColumns(Table.AddColumn(#"Pogrupowano wiersze", "Model", each Table.Column([data], "Model")), {"Model", each Text.Combine(List.Transform(_, Text.From), "#(lf)"), type text}),
    typ = Table.TransformColumns(Table.AddColumn(#"model", "Typ", each Table.Column([data], "Typ")), {"Typ", each Text.Combine(List.Transform(_, Text.From), "#(lf)"), type text}),
    silnik = Table.TransformColumns(Table.AddColumn(#"typ", "Silnik", each Table.Column([data], "Silnik")), {"Silnik", each Text.Combine(List.Transform(_, Text.From), "#(lf)"), type text})
in
    silnik


Czy można to "zbić" w jeden krok ? Czyli w jednym kroku powstałyby 3 kolumny model, typ i silnik ?

Dziekuję i pozdrawiam

PS

query.xlsm
Pobierz Plik ściągnięto 36 raz(y) 31.09 KB

ID posta: 427301 Skopiuj do schowka
 
 
master_mix 
Excel Expert



Wersja: Win Office 365
Pomógł: 1290 razy
Posty: 2624
Wysłany: 12-04-2023, 22:42   

o to chodzi?
Kod:

let
in
    Table.Group(
        Excel.CurrentWorkbook(){[Name="dane"]}[Content],
        "Marka",
            {
                {"Model", each Text.Combine([Model],"#(lf)")},
                {"Typ", each Text.Combine([Typ],"#(lf)")},
                {"Silnik", each Text.Combine([Silnik],"#(lf)")}
            }
    )
_________________

Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie.
ID posta: 427303 Skopiuj do schowka
 
 
Pawel07 
Starszy Forumowicz


Wersja: Win Office 2016
Posty: 35
Wysłany: 14-04-2023, 00:44   

No lekko mnie zatkało :shock:

Ostatecznie dla moich potrzeb nieco zmodyfikowałem kod:

Kod:
let
    Źródło = Excel.CurrentWorkbook(){[Name="dane"]}[Content],
    grupowanie = Table.Group(Źródło,
        "Marka",
            {
                {"Model", each Text.Combine([Model],"#(lf)")},
                {"Typ", each Text.Combine([Typ],"#(lf)")},
                {"Silnik", each Text.Combine([Silnik],"#(lf)")}
            }
       )
    in
    grupowanie


Panowie,
bardzo dziękuje
traktuje to jako bezcenną lekcję

Pozdrawiam
PS
ID posta: 427353 Skopiuj do schowka
 
 
Bill Szysz 
Excel Expert


Wersja: Win Office 365
Pomógł: 1042 razy
Posty: 4084
Wysłany: 14-04-2023, 11:43   

Możesz jeszcze w ten sposób:
Kod:
let
    Rodzaj = {"Model", "Typ", "Silnik"},
    Źródło = Excel.CurrentWorkbook(){[Name="dane"]}[Content],
    grupowanie = Table.Group(Źródło,
        "Marka",
            List.Transform(Rodzaj, (x) => {x, each Text.Combine(Table.Column(_, x),"#(lf)")})
       )
in
    grupowanie

W takim przypadku definiujesz sobie kolumny jakich chcesz użyć (w kroku "Rodzaj")
Możesz również wybór kolumn wrzucic do arkusza i z jego poziomu decydowac o tym jakie kolumny maja podlegac przekształceniom. (to juz kosmetyka)
_________________
Zlecenia, konsultacje, doradztwo i szkolenia z Power Query, Power BI i Excela - Raporty, Analizy, Projekty
Pozdrawiam, były szbill62 aktualnie Bill Szysz
ID posta: 427367 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.wip.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