Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  69 70 71 72 73 74 75 76 77   další » ... 298

Príklad na hyperlink

Ja by som dal tie prvé riadky takto, ale netuším čo chcete s tým potom robiť.
(*** POZOR v riadku s Table.ReplaceValue fórum maže viaceré medzery za sebou. Postupne sa nahrádza 5,4,3,2 medzier !)
File = Csv.Document(File.Contents(FileName),[Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Nahradená hodnota" = Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(File," "," ",Replacer.ReplaceText,{"Column1"})," "," ",Replacer.ReplaceText,{"Column1"})," "," ",Replacer.ReplaceText,{"Column1"})," "," ",Replacer.ReplaceText,{"Column1"}),
TextFromFile = Table.ReplaceValue(#"Nahradená hodnota","- ","-",Replacer.ReplaceText,{"Column1"}),

//vytvorenie tabuľky dát
#"Filtrované riadky" = Table.SelectRows(TextFromFile, each Text.StartsWith([Column1], "Date") or Text.StartsWith([Column1], "> ")),
#"Nahradená hodnota4" = Table.ReplaceValue(#"Filtrované riadky","> ","",Replacer.ReplaceText,{"Column1"}),
#"Rozdeliť stĺpec podľa oddeľovača" = Table.SplitColumn(#"Nahradená hodnota4", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5"}),
#"Hlavičky so zvýšenou úrovňou" = Table.PromoteHeaders(#"Rozdeliť stĺpec podľa oddeľovača", [PromoteAllScalars=true]),
#"Zlúčené stĺpce" = Table.CombineColumns(#"Hlavičky so zvýšenou úrovňou",{"Date", "Hour"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"DateHour"),
#"Zmenený typ4" = Table.TransformColumnTypes(#"Zlúčené stĺpce",{{"DateHour", type datetime}}),
#"Zmenený typ pomocou miestneho nastavenia" = Table.TransformColumnTypes(#"Zmenený typ4", {{"T_Set", type text}, {"T_Eff", type number}, {"T_Rec", type number}}, "en-US"),
...

Inak ten hypertextový odkaz je predsa jednoduchý. K Tabuľke (v Exceli, nie v PQ) pridáte stĺpec so vzorcom. Buď ako 1. alebo ako posledný stĺpec. Podľa toho, či chcete mať iba Batch číslo (ktoré pravdepodobne nakoniec nebude číslo ale znaky), alebo názov súboru, alebo celú cestu, a pod. Použije sa napr. skrytý stĺpec, ktorý PQ vyplní, a vzorec sa iba odkáže na súbor z tohto stĺpca. Je to jednoduché, ale nebudem opäť meniť PQ dotaz, pokým nedáte ako PRESNE má vyzerať výsledok. Už sú to 3 strany s jednou úpravou za druhou. Uznajte sám, že takéto dávkovanie požiadaviek je ako "Neverending Story" - a to je na nervy 6 ...

Píšem to stále dookola v každom treťom vlákne - priložte manuálne vytvorenú požadovanú formu výsledku. Teda nielen pokusy s nesprávnymi výsledkami, formátmi a pod, ale aj to čo chcete dosiahnuť. Podľa toho riešiteľ ľahšie a rýchlejšie zistí, čo má byť výsledok.

EDIT:
Moment, musím priložiť prílohu s osekaným PQ, lebo fórum maže viaceré medzery za sebou ...

Ten Lubov kód je pre mňa tiež nepochopiteľný 7
PQ je pre mňa okrajová záležitosť. A tie jeho techniky, sila.

Upravil som ten môj podľa požiadaviek.

Tie medzery s mínusmi sú problém min v 2 stĺpcoch
PR03(kPa)
PR01(kPa)
no potom sú bez mínusu napr. v Humidity(%), ale počítal som, že to môže nastať kdekoľvek. Preto som najskôr odstránil akékoľvek spojené medzery, a následne nahradil "- " (mínus a medzera) iba znakom "-", čo mi potom dalo možnosť deliť riadok na stĺpce pomocou zostávajúcich medzier.

Ako sme to robili? Ja osobne neovládam PQ tak dobre ako Lubo (a iný), takže niečo ako vidieť podľa názvov premenných je naklikané v menu PQ, zvyšok som dopísal ručne. Nevadí, že neviem, ako sa presne píše syntax danej funkcie (pozor - navyše CaseSensitive), veď máme Google. Ak chcem napr. text zľava, vygooglim si "power query left" a dozviem sa, že funkcia sa nevolá Text.Left ale Text.Start ...
Veľa vecí som si ale pospájal v jednom riadku, je to neprehľadnejšie, ale nenaskrolujem sa toľko.

Ale aj tak musíte mať trochu programátorské myslenie.

AK ide o všetky čísla riadkov:
Sub IDRadku()
Dim Oblast As Range, ARE As Range, aID(), Count As Long, IDCount As Long, i As Long, R As Long

Set Oblast = Selection
For Each ARE In Oblast.Areas
Count = ARE.Rows.Count
R = ARE.Row - 1
ReDim Preserve aID(1 To IDCount + Count)
For i = 1 To Count
aID(IDCount + i) = R + i
Next i
IDCount = IDCount + Count
Next ARE
End Sub

Ak ide o adresy riadkov (1 riadok znamená "1:1"):
Sub IDRadku2()
aID = Split(Replace(Selection.EntireRow.Address, "$", ""), ",")
End Sub


Ak ide o označenia riadkov podoblastí (1 riadok znamená "1"):
Sub IDRadku3()
Dim i As Long, aID() As String, tmpID() As String
aID = Split(Replace(Selection.EntireRow.Address, "$", ""), ",")
For i = 0 To UBound(aID)
tmpID = Split(aID(i), ":")
If tmpID(0) = tmpID(1) Then aID(i) = tmpID(0)
Next i
End Sub

Lubove znalosti a skúsenosti sú obrovské, málokto sa mu tu vyrovná (mňa nevynímajúc). Tieto jeho podnety a príklady som ešte neskúšal. V prvom rade totiž musím pochopiť "wo co tady go". A to sa mi nechce. Radšej (ak bude čas, ako vidieť na mojej absencii)), tak dorobím tie požadované ďalšie 3 stĺpce do môjho riešenia, ktorému rozumiem, a chápem ako fungujú jednotlivé kroky, a prečo som ich tam dal, čo som chcel dosiahnuť.

Bod 4. HT odkazy - to v PQ asi nepôjde.

To číslo "Filmy 92" znamená čo? Že pod Filmy je 92 filmov?
A tiež by sa šikla príloha s nejakými dátami..

Na to je najlepšia príloha ...
nemusí to nájsť datumbunka
.Find(What:=datumbunka)
a rng bude nothing. vymalované.
Možno treba konverziu dátumu na Long. Treba prílohu, to bude prkotina...

1. Do tej modrej Tabuľky na liste Settings. Teraz je tam vzorec, ktorý určuje aktuálne umiestnenie súboru XLSX + podadresár "Data". Predpokladal som distribúciu aj s dátami. V mojom prípade konkrétne:
\\DRUHE-PC\Zdieľané\Data
2. Ak je potrebné robiť ešte pokusy na tom cvičnom dotaze pre jeden súbor "Iba na ladenie", tak potom v ňom treba nastaviť presnú cestu na súbor. V prvom riadku M-code je premenná FileName.
V mojom prípade konkrétne:
FileName = "\\DRUHE-PC\Zdieľané\Data\AUT_0032_32211010.TXT",

Ak bude pýtať poverenie, zaškrtnite ignorovať. Záleží aj na tom ako máte zdieľanie nastavené. Či treba globálne poverenia nastaviť na Verejné, alebo vypýta meno+heslo,...

Áno, je možné mu zadať aj LAN cestu. Tu som si všimol letmým testom s druhým PC, že ak zadám meno PC nepýta si to prihlasovacie údaje (???), a ak zadám IP, pýta to nastavenie bezpečnosti (verejný, súkromný, ...) a meno a heslo do konta na danom PC.

Kontrolovať 2 kódy, či je v jednom nejaká zmena??? To je na mašľu.
Ten pridaný stĺpec vo Vašom súbore nikde nevidím. Našiel som opravu D5 a D6.
Vašou úpravou D7 nie som si istý. Pretože ste zmenil kontrolu indexov 3.9 a 2.9 na indexy 3.9 a 4.9, no výpočet ste ponechal tak ako bol 3.9-2.9.
Prečo sa musí počet 10.9 deliť /2?

Pridal som tam spomenutých 5 stĺpcov, aj keď neviem či rátajú to čo chcete, lebo hovoríte mne neznámou rečou 1 . Nerozumiem, čo máte na mysli. Riadok 6.9 je tam vždy 1, preto Average tak ako som ho tam zatiaľ načrtol nemá zmysel.

Pridávať výsledné stĺpce sa dá, ale musí sa v kóde funkcie fncGetDataFromFile pridať riadok do záznamu
CalculatedData = Table.FromRecords(...)
Ďalej treba na to myslieť v poslednom riadku #"Zmenený typ"
a potom v kóde GetDataFromFiles na 2 miestach (pracovný aj reálny názov stĺpca)
#"Rozbalené fncGetDataFromFile" = Table.ExpandTableColumn({...}, {...})
a rovnako ako aj vo funkcii na konci tiež na riadku
#"Zmenený typ"

Snáď som na niečo nezabudol. Samozrejme, ak chcete používať na ladenie aj ten cvičný dotaz, tak aj v ňom.

Čo je to RH?
Čo znamená na konci "initial vacuum"? Navyše "initial vacuum" sú dve, stĺpec 4 a stĺpec 14.
"minimální, maximální a průměrnou teplotu" počítanú zo všetkých súborov? Lebo každý má predsa iba jednu teplotu (P4001).

Dotazy PowerQuery (PQ) sa spúšťajú buď na karte Údaje - Obnoviť všetko, alebo pravý klik na Tabuľku dotazu - Obnoviť, alebo skratka Ctrl+Alt+F5.
Kód samotného dotazu (M-code) sa dá editovať. Karta Údaje - Dotazy a pripojenia - vpravo klik na hociktorý dotaz pravým a výber Upraviť.
Dotaz "Iba na ladenie" nie je potrebný, jeho účel je jasný z názvu. Samotnú Tabuľku vytvára dotaz "GetDataFromFiles" a použité kroky je vidno vpravo "PUŽITÉ KROKY". No to najdôležitejšie obstaráva vytvorená funkcia "fncGetDataFromFile". Funkcie nezobrazujú použité kroky vpravo, ale treba pozrieť M-code. Karta Domov - Rozšírený editor.
M-code funkcie fncGetDataFromFile:
(FileName as text) =>
let
//načítanie dát zo súboru ako text, kvôli ošetrovaniu medzier, oddeľovačov a mínusov
File = Csv.Document(File.Contents(FileName),[Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Nahradená hodnota" = Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(File," "," ",Replacer.ReplaceText,{"Column1"})," "," ",Replacer.ReplaceText,{"Column1"})," "," ",Replacer.ReplaceText,{"Column1"})," "," ",Replacer.ReplaceText,{"Column1"}),
TextFromFile = Table.ReplaceValue(#"Nahradená hodnota","- ","-",Replacer.ReplaceText,{"Column1"}),

//vytvorenie tabuľky dát
#"Filtrované riadky" = Table.SelectRows(TextFromFile, each Text.StartsWith([Column1], "Date") or Text.StartsWith([Column1], "> ") or Text.StartsWith([Column1], ". ")),
#"Nahradená hodnota4" = Table.ReplaceValue(Table.ReplaceValue(#"Filtrované riadky","> ","",Replacer.ReplaceText,{"Column1"}),". ","",Replacer.ReplaceText,{"Column1"}),
#"Rozdeliť stĺpec podľa oddeľovača" = Table.SplitColumn(#"Nahradená hodnota4", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8", "Column1.9", "Column1.10", "Column1.11", "Column1.12", "Column1.13"}),
#"Odstránené ostatné stĺpce" = Table.SelectColumns(#"Rozdeliť stĺpec podľa oddeľovača",{"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.7"}),
#"Hlavičky so zvýšenou úrovňou" = Table.PromoteHeaders(#"Odstránené ostatné stĺpce", [PromoteAllScalars=true]),
#"Zlúčené stĺpce" = Table.CombineColumns(#"Hlavičky so zvýšenou úrovňou",{"Date", "Hour"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"DateHour"),
#"Zmenený typ4" = Table.TransformColumnTypes(#"Zlúčené stĺpce",{{"DateHour", type datetime}}),
#"Zmenený typ pomocou miestneho nastavenia" = Table.TransformColumnTypes(#"Zmenený typ4", {{"Phase", type text}, {"PR03(kPa)", type number}, {"PT02(C)", type number}, {"Humidity(%)", type number}}, "en-US"),
DataFromFile = Table.TransformColumnTypes(#"Zmenený typ pomocou miestneho nastavenia",{{"DateHour", type number}}),

//vytvorenie tabuľky parametrov
#"Filtrované riadky1" = Table.SelectRows(TextFromFile, each Text.StartsWith([Column1], "+ ")),
#"Nahradená hodnota5" = Table.ReplaceValue(#"Filtrované riadky1","+ ","",Replacer.ReplaceText,{"Column1"}),
#"Rozdeliť stĺpec podľa oddeľovača2" = Table.SplitColumn(#"Nahradená hodnota5", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Parameter", "Hodnota"}),
ParamList = Table.FromList({"P4021","P4001","P4004","P4005","P4002","P4006","P4007","P4008","P4009","P4015","P4011","P4012"}, null, {"Parameter"}),
ParamVal = Table.ReplaceErrorValues(Table.AddColumn(ParamList, "Value", each #"Rozdeliť stĺpec podľa oddeľovača2"[Hodnota]{List.PositionOf(#"Rozdeliť stĺpec podľa oddeľovača2"[Parameter], [Parameter])}), {{"Value", null}}),
ParamFromFile = Table.TransformColumnTypes(ParamVal, {{"Value", type number}}, "en-US"),

//extrakcia názvu batch
BatchVal = Table.FromRecords({[Parameter = "Batch", Value = Table.SelectRows(TextFromFile, each Text.StartsWith([Column1], "= "))[Column1]{0}]}),
Batch = Table.TransformColumns(BatchVal, {{"Value", each Text.AfterDelimiter(_, "_", {0, RelativePosition.FromEnd}), type text}}),

//indexácia hľadaných značiek v tabuľke dát
IndexPhaseList = Table.FromList({"2.1","2.9","3.9","4.9","6.9","8.9"}, null, {"Name"}),
IndexPhase = Record.FromTable(Table.ReplaceErrorValues(Table.AddColumn(IndexPhaseList, "Value", each List.PositionOf(DataFromFile[Phase], [Name]), Int64.Type), {{"Value", null}})),

//vypočítavané stĺpce
CalculatedData = Table.FromRecords({[Parameter = "D1", Value = if IndexPhase[2.9] = -1 then null else DataFromFile{IndexPhase[2.9]}[#"PR03(kPa)"]],
[Parameter = "D2", Value = if IndexPhase[2.1] = -1 or IndexPhase[2.9] = -1 then null else DataFromFile{IndexPhase[2.9]}[#"DateHour"]-DataFromFile{IndexPhase[2.1]}[#"DateHour"]],
[Parameter = "D3", Value = if IndexPhase[3.9] = -1 then null else DataFromFile{IndexPhase[3.9]}[#"Humidity(%)"]],
[Parameter = "D4", Value = if IndexPhase[3.9] = -1 or IndexPhase[2.9] = -1 then null else DataFromFile{IndexPhase[3.9]}[#"DateHour"]-DataFromFile{IndexPhase[2.9]}[#"DateHour"]],
[Parameter = "D5", Value = if IndexPhase[3.9] = -1 then null else DataFromFile{IndexPhase[2.9]}[#"PR03(kPa)"]],
[Parameter = "D6", Value = if IndexPhase[3.9] = -1 then null else DataFromFile{IndexPhase[2.9]}[#"PT02(C)"]],
[Parameter = "D7", Value = if IndexPhase[3.9] = -1 or IndexPhase[2.9] = -1 then null else DataFromFile{IndexPhase[3.9]}[#"PR03(kPa)"]-DataFromFile{IndexPhase[2.9]}[#"PR03(kPa)"]],
[Parameter = "D8", Value = if IndexPhase[4.9] = -1 then null else DataFromFile{IndexPhase[2.1]}[#"PR03(kPa)"]],
[Parameter = "D9", Value = if IndexPhase[4.9] = -1 or IndexPhase[3.9] = -1 then null else DataFromFile{IndexPhase[4.9]}[#"DateHour"]-DataFromFile{IndexPhase[3.9]}[#"DateHour"]],
[Parameter = "D10", Value = if IndexPhase[6.9] = -1 or IndexPhase[4.9] = -1 then null else DataFromFile{IndexPhase[6.9]}[#"DateHour"]-DataFromFile{IndexPhase[4.9]}[#"DateHour"]],
[Parameter = "D11", Value = if IndexPhase[6.9] = -1 then null else DataFromFile{IndexPhase[6.9]}[#"PR03(kPa)"]],
[Parameter = "D12", Value = if IndexPhase[6.9] = -1 or IndexPhase[4.9] = -1 then null else DataFromFile{IndexPhase[6.9]}[#"PR03(kPa)"]-DataFromFile{IndexPhase[4.9]}[#"PR03(kPa)"]],
[Parameter = "D13", Value = if IndexPhase[8.9] = -1 then null else DataFromFile{IndexPhase[8.9]}[#"PR03(kPa)"]],
[Parameter = "D14", Value = Table.RowCount(Table.SelectRows(DataFromFile, each ([Phase] = "10.9")))]}),

//predfinálne spojenie tabuliek
CombineTables = Table.Combine({Batch, ParamFromFile, CalculatedData}),

//Finalizácia výstupu pre daný súbor
#"Transponovaná tabuľka" = Table.Transpose(CombineTables),
#"Hlavičky so zvýšenou úrovňou1" = Table.PromoteHeaders(#"Transponovaná tabuľka", [PromoteAllScalars=true]),
#"Zmenený typ" = Table.TransformColumnTypes(#"Hlavičky so zvýšenou úrovňou1",{{"Batch", type text}, {"P4021", type number}, {"P4001", type number}, {"P4004", type number}, {"P4005", type number}, {"P4002", type number}, {"P4006", type number}, {"P4007", type number}, {"P4008", type number}, {"P4009", type number}, {"P4015", type number}, {"P4011", type number}, {"P4012", type number}, {"D1", type number}, {"D2", type time}, {"D3", type number}, {"D4", type time}, {"D5", type number}, {"D6", type number}, {"D7", type number}, {"D8", type number}, {"D9", type time}, {"D10", type time}, {"D11", type number}, {"D12", type number}, {"D13", type number}, {"D14", type number}})
in
#"Zmenený typ"

Ide ešte o to, či som to urobil tak, aby to vracalo správne výsledky. Najmä tie časy som riešil, ale hlavne či treba tie záporné čísla riešiť...

PS: A čo robí s dátami ten M-code funkcie, sa dá odkrokovať práve v tom dotaze "Iba na ladenie", kde si iba treba na začiatku kódu zmeniť cestu k skúšobnému súboru.

Ešte som zabudol, postaviť sa na Tabuľku dotazu a na karte Údaje - Dotazy a pripojenia - Vlastnosti, zrušiť zaškrtnutie "Prispôsobiť šírku stĺpca".

Úprava. Ale dnes už asi viac času mať nebudem...
Skontrolujte si to.

Už to nestíham dokončiť. Navyše sa mi nepozdávajú vždy tie Vaše odkazy na stĺpce vo vzorcoch. Ako bonus opäť podotýkam, že v "PR03(kPa)" ani omylom nie sú vždy záporné hodnoty. A časy idú cez polnoc, tak bude potrebné to prekopať.

Zatiaľ iba pracovná polyfunkčná verzia.

Zajtra mám na pláne veľa vecí, tak neviem ako dopadne toto...

Takže naraz zo všetkých súborov v nejakom adresári? V tom prípade PowerQuery (súčasť Office 2016/209/2021/365, do 2010/2013 je ofiko doplnok), kde sa dajú ošetriť prebytočné medzery, filtre iba na požadované riadky textu, rozdelenie na stĺpce, aj správny prevod EN/US hodnôt. Priložte ešte nejaké 2-3 súbory, nech si to nemusíme simulovať my.

EIDT: NO a keď si to tak pozerám, nachádzam ďalšie otázky:
-To, že dohľadávate parametre Pxxx znamená, že v tieto parametre nemusia byť v každom súbore obsiahnuté, alebo sú na inom riadku?
-Ten názov "Batch" nemá byť náhodou iba to za posledným podtržítkom? Lebo 9 znakov majú v summary všetky (pozerám na podmienku v data!S1).
-"Initial vacuum duration" rátate iba hodiny {MOD(x;1)}? Nemôže nastať, že bude niečo trvať dlhšie ako 24 hod?
-Tie značky 2,1 / 2,9 / 3,9 ... atď, ktoré hľadáte na získanie hodnôt, tam nemusia existovať?
-Ako ste prišli na to, že stĺpec "Pressure at the end of conditioning" inak "PR03(kPa)" musí byť vždy záporné číslo?

Ďalšie otázky ešte dopíšem ako ma budú postupne napádať...


Strana:  1 ... « předchozí  69 70 71 72 73 74 75 76 77   další » ... 298

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje