Ugrás a fő tartalomra

Power BI és solplanet JSON forrás adatok feldolgozása

 Power BI és solplanet JSON forrás adatok feldolgozása



JSON file feldolgozás rész megoldás

Forrás értelmezés feszülség napló érték kinyeréséhez

A "vpv" objektumon belül az "x" tartalmazza az időlistát 5 perces lépésekben, míg az "y" tartalmazza az első és második grid feszültség értékeit.
A cél az, hogy ezt az adatstruktúrát átalakítsuk egy Power Query kompatibilis táblává, ahol az oszlopok:
Idő (az "x" lista értékei)
Feszültség 1 (az "y" lista első eleme minden időponthoz)
Feszültség 2 (az "y" lista második eleme minden időponthoz)

Javasolt Power Query M kód

--- m

let
    // JSON fájl beolvasása
    Source = Json.Document(File.Contents("C:\Users\User\Downloads\json\20250227.json")),
    // "vpv" objektum kinyerése
    vpvData = Source[result][data][vpv],
    // "x" és "y" listák kinyerése
    TimeList = vpvData[x],
    VoltageList = vpvData[y],
    // Idő és feszültség táblává alakítása
    DataTable = Table.FromColumns({TimeList, VoltageList}, {"Time", "Voltage"}),
    // "Voltage" listák külön oszlopokba bontása
    ExpandedTable = Table.ExpandListColumn(DataTable, "Voltage"),
    FinalTable = Table.FromRecords(
        List.Transform(ExpandedTable[Time], (t) => 
            [ Time = t, Voltage1 = VoltageList{List.PositionOf(TimeList, t)}{0}, Voltage2 = VoltageList{List.PositionOf(TimeList, t)}{1} ]
        )
    )
in
    FinalTable


Kód értelmezése

  1. JSON beolvasása a fájlból (Json.Document(File.Contents(...))).

  2. A "vpv" objektum elérése a result -> data -> vpv útvonalon.

  3. Az "x" lista kinyerése (időpontok 5 perces lépésekkel).

  4. A "y" lista kinyerése (feszültségértékek).

  5. Táblázattá alakítás az időpontok és feszültségek felhasználásával.

  6. A "y" értékek két külön oszlopba bontása (Voltage1, Voltage2).

Ez a Power Query kód létrehoz egy jól használható táblázatot, amely az időpontokat és a hozzájuk tartozó két feszültségértéket tartalmazza.




JSON file feldolgozás teljes megoldás


A Power Query-ban a JSON fájl betöltéséhez és a kért adatkörök (feszültség - "v", áramerősség - "a", teljesítmény - "kwh") táblázatba rendezéséhez az alábbi lépéseket és kódot használhatod. Az általad megadott JSON struktúra alapján a releváns adatkörök a következők lehetnek:

  • Feszültség (v): vpv (DC feszültség) és vac (AC feszültség)
  • Áramerősség (a): ipv (DC áram) és iac (AC áram)
  • Teljesítmény (kwh): pac (AC teljesítmény) és pdc (DC teljesítmény)

Az alábbiakban bemutatom, hogyan tudod ezt a Power Query-ban megvalósítani. A kódot lépésről lépésre írom le, és a végén egy összefoglaló M kódot is adok.


Lépések a Power Query-ban:

  1. JSON fájl betöltése:
    • Nyisd meg a Power Query-t (Power BI vagy Excel).
    • Válaszd a "Get Data" > "From JSON" opciót, majd töltsd fel a JSON fájlt.
  2. JSON struktúra kibontása:
    • A Power Query automatikusan felismeri a JSON-t, és egy rekordként jeleníti meg. Kattints a "Record" melletti nyílra a kibontáshoz.
    • Navigálj a result.data útvonalra, ahol az adatkörök találhatók.
  3. Adatkörök kiválasztása és táblázattá alakítás:
    • Az adatkörök (vpv, ipv, vac, iac, pac, pdc) mindegyike egy időbélyeggel (x) és értékekkel (y) rendelkezik. Ezeket külön-külön táblázattá kell alakítani, majd egyesíteni.
  4. Táblázatok egyesítése:
    • Az időbélyegek (x) azonosak minden adatkörnél, így ezek alapján összeilleszthetők az adatok egy közös táblázatba.

M kód a Power Query-hoz:

Az alábbi M kód betölti a JSON-t, kibontja a releváns adatköröket, és egy táblázatot készít a feszültség, áramerősség és teljesítmény adatokkal.



---m

///   Source = Json.Document(File.Contents("C:\Users\User\Downloads\json\20250227.json")),
 let
    // Replace "YourJsonSource" with the actual source step name after importing the JSON
   Source = Json.Document(File.Contents("C:\Users\User\Downloads\json\20250227.json")),
    
    // Navigate to the "data" level in the JSON
    Data = Source[result][data],
    
    // Start with VpvTable as the base table
    BaseTable = Table.FromColumns({Data[vpv][x], Data[vpv][y]{0}, Data[vpv][y]{1}}, {"Time", "Vpv1 (V)", "Vpv2 (V)"}),
    
    // Add Vac columns step-by-step
    AddVac1 = Table.AddColumn(BaseTable, "Vac1 (V)", each Data[vac][y]{0}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    AddVac2 = Table.AddColumn(AddVac1, "Vac2 (V)", each Data[vac][y]{1}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    AddVac3 = Table.AddColumn(AddVac2, "Vac3 (V)", each Data[vac][y]{2}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    
    // Add Ipv columns step-by-step
    AddIpv1 = Table.AddColumn(AddVac3, "Ipv1 (A)", each Data[ipv][y]{0}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    AddIpv2 = Table.AddColumn(AddIpv1, "Ipv2 (A)", each Data[ipv][y]{1}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    
    // Add Iac columns step-by-step
    AddIac1 = Table.AddColumn(AddIpv2, "Iac1 (A)", each Data[iac][y]{0}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    AddIac2 = Table.AddColumn(AddIac1, "Iac2 (A)", each Data[iac][y]{1}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    AddIac3 = Table.AddColumn(AddIac2, "Iac3 (A)", each Data[iac][y]{2}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    
    // Add Pac column
    AddPac = Table.AddColumn(AddIac3, "Pac (kW)", each Data[pac][y]{0}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    
    // Add Pdc columns step-by-step
    AddPdc1 = Table.AddColumn(AddPac, "Pdc1 (kW)", each Data[pdc][y]{0}{List.PositionOf(Data[vpv][x], [Time])}, type number),
    CombinedTable = Table.AddColumn(AddPdc1, "Pdc2 (kW)", each Data[pdc][y]{1}{List.PositionOf(Data[vpv][x], [Time])}, type number)
in
    CombinedTable


Lépések a Power BI Power Query-ben való használathoz

  1. JSON fájl importálása:
    • Nyisd meg a Power BI Desktopot.
    • Menj a "Get Data" > "JSON" menüpontra, és válaszd ki a JSON fájlt, vagy illeszd be a JSON tartalmát egy üres lekérdezésbe.
    • Miután betöltötted, kattints a "Transform Data" gombra a Power Query Szerkesztő megnyitásához.
  2. Forrás cseréje:
    • A fenti szkriptben cseréld a YourJsonSource-t a kezdeti forráslépés nevére (pl. Forrás, ha így nevezi el a Power Query a JSON importálása után).
  3. Szkript alkalmazása:
    • A Power Query Szerkesztőben menj az "Advanced Editor"-hoz, és illeszd be a szkriptet.
    • Módosítsd az utolsó in záradékot arra a táblára, amelyet vissza szeretnél adni (pl. VpvTábla, VacTábla, IpvTábla stb.), vagy kombináld őket, ha szükséges.
  4. Táblák betöltése:
    • Kattints a "Close & Apply" gombra a táblák Power BI-ba való betöltéséhez. Minden tábla külön lekérdezésként jelenik meg az adatmodellben.

A táblák magyarázata

  • VpvTábla: Fotovoltaikus feszültséget (vpv) tartalmaz két tömbbel (Vpv1 és Vpv2) voltban (V).
  • VacTábla: Váltakozó áramú feszültséget (vac) tartalmaz három tömbbel (Vac1, Vac2, Vac3) voltban (V).
  • IpvTábla: Fotovoltaikus áramerősséget (ipv) tartalmaz két tömbbel (Ipv1 és Ipv2) amperben (A).
  • IacTábla: Váltakozó áramú áramerősséget (iac) tartalmaz három tömbbel (Iac1, Iac2, Iac3) amperben (A).
  • PacTábla: Váltakozó áramú teljesítményt (pac) tartalmaz egy tömbbel kilowattban (kW).
  • PdcTábla: Egyenáramú teljesítményt (pdc) tartalmaz két tömbbel (Pdc1 és Pdc2) kilowattban (kW).

Megjegyzések

  • Az x értékek (idő) minden adatkészletnél azonosak, így minden tábla ugyanazt az időoszlopot használja.
  • Ha az összes adatot egyetlen táblába szeretnéd egyesíteni, használhatod a Table.Join vagy Table.AddColumn függvényeket a Power Query-ben az "Idő" oszlop alapján történő egyesítéshez.
  • Ha csak bizonyos táblákra van szükséged (pl. csak feszültségre vagy teljesítményre), módosítsd az in záradékot, hogy csak azokat adja vissza.

Használat:

  1. Másold be ezt a kódot a Power Query "Advanced Editor"-jébe.
  2. Alkalmazd a lekérdezést, és az adatok betöltődnek a táblázatba.



Python nyelven történő feldolgozás minta


--- python
import pandas as pd
import json

# Példa JSON adat (cseréld ki a saját JSON fájlod tartalmával vagy útvonalával)
json_data = '''
{
    "result": {
        "data": {
            "vpv": {"x": [1, 2, 3], "y": [[10, 11, 12], [20, 21, 22]]},
            "vac": {"x": [1, 2, 3], "y": [[100, 101, 102], [110, 111, 112], [120, 121, 122]]},
            "ipv": {"x": [1, 2, 3], "y": [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]},
            "iac": {"x": [1, 2, 3], "y": [[1.1, 1.2, 1.3], [1.4, 1.5, 1.6], [1.7, 1.8, 1.9]]},
            "pac": {"x": [1, 2, 3], "y": [[5, 6, 7]]},
            "pdc": {"x": [1, 2, 3], "y": [[8, 9, 10], [11, 12, 13]]}
        }
    }
}
'''

# JSON betöltése (ha fájlból olvasnál, használd: with open('fájl.json', 'r') as f: data = json.load(f))
data = json.loads(json_data)

# Fájl beolvasása
file_path = "/content/sample_data/20250301.json"
#with open(file_path, "r", encoding="utf-8") as file:


# Megpróbáljuk ISO-8859-1 kódolással beolvasni
with open(file_path, "r", encoding="ISO-8859-1") as file:
    data = json.load(file)

data = data['result']['data']

# Alap DataFrame létrehozása az idő (x) értékekkel
df = pd.DataFrame({'Time': data['vpv']['x']})

# Vpv oszlopok hozzáadása
df['Vpv1 (V)'] = data['vpv']['y'][0]
df['Vpv2 (V)'] = data['vpv']['y'][1]

# Vac oszlopok hozzáadása
df['Vac1 (V)'] = data['vac']['y'][0]
df['Vac2 (V)'] = data['vac']['y'][1]
df['Vac3 (V)'] = data['vac']['y'][2]

# Ipv oszlopok hozzáadása
df['Ipv1 (A)'] = data['ipv']['y'][0]
df['Ipv2 (A)'] = data['ipv']['y'][1]

# Iac oszlopok hozzáadása
df['Iac1 (A)'] = data['iac']['y'][0]
df['Iac2 (A)'] = data['iac']['y'][1]
df['Iac3 (A)'] = data['iac']['y'][2]

# Pac oszlop hozzáadása
df['Pac (kW)'] = data['pac']['y'][0]

# Pdc oszlopok hozzáadása
df['Pdc1 (kW)'] = data['pdc']['y'][0]
df['Pdc2 (kW)'] = data['pdc']['y'][1]

# Eredmény megjelenítése
print(df)

# Opcionális: CSV fájlba mentés
# df.to_csv('output.csv', index=False)
# Opcionális mentés excelbe # Excel fájlba mentés
df.to_excel('/content/sample_data/output.xlsx', index=False, engine='openpyxl')

print("Az adatok sikeresen mentve az 'output.xlsx' fájlba.")



Link :





Megjegyzések