Kezdőlap › Fórumok › Excel témák › [Resolved] Power Query dinamikus adatforrás dinamikus adattítpus
- This topic has 3 hozzászólás, 2 résztvevő, and was last updated 10 months, 3 weeks telt el by horvimi.
-
SzerzőBejegyzés
-
2024-01-16-19:22 #10369
Sziasztok
az alábbi problémába futottam bele, és egyenlőre nem boldogulok a megoldással….
Webservices segítségével kérdezek le adatokat, viszont néhány lekérdezés hibára fut, mert az egyes aloldalakon lévő adatstruktúra bővül illetve szűkül…
1es eset oszlopok:
– revenue
– Amortization
– revenue growth
– net income
– tax rate
– free cash flow2. eset
– revenue
– revenue growth
– net income
– DDA
– tax rate
– free cash flowalapvetően az összes oszlop adattípusa egész szám, kivéve a growth, és rate szavakat tartalmazó oszlopfejléceké, mert ott az adattipus percentage
hogyan lehet kivitelezni, hogy az adattípus kiosztás egységesen történjen, a growth és rate esetén % a többi esetben pedig egész szám legyen?
az alkalmazott kód a következő:
let
…
Data0 = Forrás{0}[Data],
#”Lefokozott fejlécek” = Table.DemoteHeaders(Data0),
#”Tábla transzponálva” = Table.Transpose(#”Lefokozott fejlécek”),
#”ezres elválasztó cseréje” = Table.ReplaceValue(#”Tábla transzponálva”,”,”,””,Replacer.ReplaceText,Table.ColumnNames(#”Tábla transzponálva”)),
#”Utolsó sorok eltávolítva” = Table.RemoveLastN(#”ezres elválasztó cseréje”,1),
#”tizedes elválasztó cseréje” = Table.ReplaceValue(#”Utolsó sorok eltávolítva”,”.”,”,”,Replacer.ReplaceText,Table.ColumnNames(#”Utolsó sorok eltávolítva”)),
#”Előléptetett fejlécek” = Table.PromoteHeaders(#”tizedes elválasztó cseréje”, [PromoteAllScalars=true]),
#”Típus módosítva” = Table.TransformColumnTypes(#”Előléptetett fejlécek”,{
{ revenue, Int64.Type},
{ Amortization, Int64.Type},
{ revenue Growth, Percentage.Type},
{ net income, Int64.Type},
{ tax Rate, Percentage.Type},
{ free cash flow, Int64.Type}
})
in
#”Típus módosítva”értelemszerűen a típus módosítva sor helyett kellene a dinamikus megoldás.
köszi előre is a segítséget2024-01-16-23:08 #10370Szia!
Ha jól értem, akkor a „revenue growth” és a „tax ratepercentage” oszlopok mindig ott vannak, de a többi az változhat.
Én megpróbálnám azt, hogy minden oszlopot először egészre állítanék, és utána explicit módon ezt a kettőt visszaraknám percent-re.Ehhez persze hozzá kell nyúlni a kódhoz. Van egy olyan függvény az M-ban, hogy Table.ColumnNames(#”Előző lépés”)
Ez egy listát állít elő a táblanevekből. Ezt felhasználva betehetsz egy egyedi sort a lépésekhez, ami ennek a listának minden elemét (each) Int64-re állítja= Table.TransformColumnTypes(#"Előző lépés", List.Transform(Table.ColumnNames(#"Changed Type"), each {_, Int64.Type}))
Kipróbáltam.
Nálad is jó?Ez után a két adott nevű oszlopot már szokásos módon átállíthatod egyébre.
Imre
2024-01-17-00:46 #10375Szia Imre
köszönöm szépen az ötletet.
nem lehet nevek alapján állítani, mert az adatszerkezete változik, attól függően, hogy melyik oldalt nyitom meg. egy csonkolt listát adtam meg, ennél több oszlopból áll az adathalmaz, és lehetnek benne ismeretlen minták is. ezekre felkészülve keresek, kerestem dinamikus megoldást.
tehát az aapl/finance adatszerkezete más lehet mint a ko/finance mert nem konszolidált beszámolókat adnak meg a cégek, üres sorokkal ahol nincs érték, hanem egyszerűen nem adják meg az üres sort kompletten.
időközben találtam egy megoldást.
létrehozok egy másolatot az adott lekérdezésről, (előtte törölve a típus módosítva sort) letisztítom 2 sorra, majd feltételes oszlopot adok hozzá és listává alakítom
a DataType lekérdezés kódja:
let
…
Data0 = Forrás{0}[Data],
#”Lefokozott fejlécek” = Table.DemoteHeaders(Data0),
#”Tábla transzponálva” = Table.Transpose(#”Lefokozott fejlécek”),
#”ezres elválasztó cseréje” = Table.ReplaceValue(#”Tábla transzponálva”, „,”, „”, Replacer.ReplaceText, Table.ColumnNames(#”Tábla transzponálva”)),
#”Utolsó sorok eltávolítva” = Table.RemoveLastN(#”ezres elválasztó cseréje”, 1),
#”Érték felülírva1″ = Table.ReplaceValue(#”Utolsó sorok eltávolítva”, „.”, „,”, Replacer.ReplaceText, Table.ColumnNames(#”Utolsó sorok eltávolítva”)),
#”Előléptetett fejlécek” = Table.PromoteHeaders(#”Érték felülírva1″, [PromoteAllScalars=true]),
Egyéni1 = Table.FirstN(#”Előléptetett fejlécek”,1),
#”Lefokozott fejlécek2” = Table.DemoteHeaders(Egyéni1),
Egyéni2 = Table.Transpose(#”Lefokozott fejlécek2”),
#”Feltételes oszlop hozzáadva” = Table.AddColumn(Egyéni2, „Egyéni”, each if Text.Contains([Column2], „%”) then Percentage.Type else Int64.Type),
#”Oszlopok eltávolítva” = Table.RemoveColumns(#”Feltételes oszlop hozzáadva”,{„Column2″}),
Egyéni3 = Table.Transpose( #”Oszlopok eltávolítva”),
Egyéni4 = Table.ToColumns(Egyéni3)
in
Egyéni4majd a donor lekérdezésben, egyszerűen, erre a lekérdezésre hivatkozok:
…
#”Előléptetett fejlécek” = Table.PromoteHeaders(#”Érték felülírva1″, [PromoteAllScalars=true]),
#”Típus módosítva” = Table.TransformColumnTypes(#”Előléptetett fejlécek”,income_10k_DataType)
in
#”Típus módosítva”
így működik jelenleg, de tesztelem még, hogy hiba nélkül abszolválja-e a feladatot vagy sem2024-01-17-01:26 #10377Valószínűleg nem értettem meg a problémát teljesen …
Mindenesetre jó hír, ha találtál megoldást.I
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.