Telefonszámunk: 1-472-0679

[Resolved] Power Query dinamikus adatforrás dinamikus adattítpus

Kezdőlap Fórumok Excel témák [Resolved] Power Query dinamikus adatforrás dinamikus adattítpus

Topic Resolution: Resolved
4 bejegyzés megtekintése - 1-4 / 4
  • Szerző
    Bejegyzés
  • #10369
    DebSanyi
    Felhasználó

      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 flow

      2. eset
      – revenue
      – revenue growth
      – net income
      – DDA
      – tax rate
      – free cash flow

      alapvető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éget

      #10370
      horvimi
      Adminisztrátor

        Szia!

        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

        #10375
        DebSanyi
        Felhasználó

          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éni4

          majd 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 sem

          #10377
          horvimi
          Adminisztrátor

            Valószínűleg nem értettem meg a problémát teljesen …
            Mindenesetre jó hír, ha találtál megoldást.

            I

          4 bejegyzés megtekintése - 1-4 / 4
          • Be kell jelentkezni a hozzászóláshoz.