Hozzászólások
-
SzerzőBejegyzés
-
2024-01-17-00:46 Hozzászólás: [Resolved] Power Query dinamikus adatforrás dinamikus adattítpus #10375
Szia 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 semKöszi Imre,
valóban az, de ez még közel sem horrorisztikus 😀 az ellenőrző képlet, amit ehhez a munkához írtam, szerintem sokkal durvább 😀
Nekem személy szerint nagyon bejöttek az új 365 fv-ek, nagyon nagy mértékben lerövidítik a megoldási időket. személyes kedvenc a let, amit szinten mindenhez is használok, és a lambda, valamint az azt kísérő, támogató fv-ekköszi még egyszer hogy időt szántatok rá.
Sziasztok, pontosítanám Laci kérdését, kérését, és egyúttal meg is osztanám a megoldásom….
Egy olyan képletet kerestem (időközben meg is találtam) ami xl 2010ben működik, és két szöveges cella/avagy tömb különbségét veszi
Az hogy a keresett érték hol található irreleváns, a lényeg hogy a különbséget adja vissza.
A1: alma körte banán
A2: alma banán
az eredemény cella értéke körte kell hogy legyennem volt egyszerű, de végül csak összeguberáltam a komponenseket hozzá
amit tudtam, hogy ezt csak tömbbel lehet megoldani, ezért tömbbé kellett alakítsam a szavakat:=KIMETSZ(KÖZÉP(
HELYETTE(A$1;” „;SOKSZOR(” „;HOSSZ(A$1)));
(c2-1)*HOSSZ(A$1)+1;
HOSSZ(A$1)))a képlet egy segédoszlopot feltételez (c2től), ami mutatja a szavak számát, de ez kiváltható képlettel is
a c2-1 értéke 0, ezt a sor fv-el is el lehet érni, úgy hogy az aktuális sor számából kivonjuk az első sor rögzített számát.
ebbe a képletbe szúrtam be, az index fv-el történő hivatkozást, amit az excel-bazis oldaláról tanultam (ezúttal is köszönöm Imre :D)
https://excel-bazis.hu/tutorial/az-index-fuggveny-titkai-profiknakA1:INDEX(A:A;4) ugyanaz mint az a1:a4
a szám helyére beillesztettem azt a képletet, ami megszámolja a szóközök számát az A1 cellában és hozzáadtam egyet, mert a szavak száma eggyel több mint a szóközök száma. Mivel nem csak az A1-be lehet keresni a szöveget, ezért úgy gondoltam, hogy célszerűbb erre a hozzáadásra is a vizsgált szöveget tartalmazó sor számával hivatkozni
HOSSZ(KIMETSZ(A$1))-HOSSZ(HELYETTE(A$1;” „;””))+1
+1 helyett: Sor(A1)
és mindezeket beillesztettem az alábbi index hol.van fv-be, ami visszaadja az első tömb azon első értékét, ami nem szerepel a második tömbben
=HAHIBA(INDEX(A2#;HOL.VAN(0;HA(SZÁM(HOL.VAN(A2#;B2#;0));1;0);0));””)
és a képlet végül így néz ki (egy kicsit széttördeltem a jobb olvashatóságért…):
=HAHIBA(
INDEX(KIMETSZ(KÖZÉP(
HELYETTE(A2;” „;SOKSZOR(” „;HOSSZ(A2)));
(SOR(A2:INDEX(A:A;HOSSZ(KIMETSZ(A2))-HOSSZ(HELYETTE(A2;” „;””))+1+1))-SOR(A2))*HOSSZ(A2)+1;
HOSSZ(A2)));HOL.VAN(0;
HA(SZÁM(
HOL.VAN(
KIMETSZ(KÖZÉP(
HELYETTE(A2;” „;SOKSZOR(” „;HOSSZ(A2)));
(SOR(A2:INDEX(A:A;HOSSZ(KIMETSZ(A2))-HOSSZ(HELYETTE(A2;” „;””))+1+1))-SOR(A2))*HOSSZ(A2)+1;
HOSSZ(A2)));KIMETSZ(KÖZÉP(
HELYETTE(B2;” „;SOKSZOR(” „;HOSSZ(B2)));
(SOR(B2:INDEX(B:B;HOSSZ(KIMETSZ(B2))-HOSSZ(HELYETTE(B2;” „;””))+1+1))-SOR(B2))*HOSSZ(B2)+1;
HOSSZ(B2)));0));
1;0);
0));
„”)és h mennyivel egyszerűbb a helyzet MS365 esetén? Sokkal 😀
tömb:
=SZÖVEGFELOSZTÁS(A1;;” „)különbség fv:
=XKERES(IGAZ;NINCS(HOL.VAN(A2#;B2#;0));A2#;””)és végül a behelyettesített eredmény fv:
=XKERES(IGAZ;NINCS(HOL.VAN(
SZÖVEGFELOSZTÁS(A2;;” „);
SZÖVEGFELOSZTÁS(B2;;” „);
0));
SZÖVEGFELOSZTÁS(A2;;” „);
„”)és természetesen ott van még a filter fv, hogy az összes szót listázza ki. Bár nem néztem, de ugyanaz mint Imre képlete, annyi különbséggel, hogy a HIBÁS fv helyett én a NINCS fv-t alkalmaztam:
=SZŰRŐ(
SZÖVEGFELOSZTÁS(A2;;” „);
NINCS(HOL.VAN(
SZÖVEGFELOSZTÁS(A2;;” „);
SZÖVEGFELOSZTÁS(B2;;” „);
0)))köszi az együttgondolkodást, használjátok ti is, ha arra kerül a sor 😀
Attachments:
You must be logged in to view attached files. -
SzerzőBejegyzés