Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  4 5 6 7 8 9 10 11 12   další » ... 38

=SUMA(SVYHLEDAT(UNIQUE(A2:A15);A2:C15;3;0))

@elninoslov

Čas odpovídá. Hlavní činností je načítání dat.

Tady se každý soubor načítá minimálně 2x. Neměřil jsem to, není to kritické. (V jiném případě jsem viděl i 10 čtení.) Dá se to zrychlit, ale za cenu složitějšího kódu.

Obvykle dávám přednost kratšímu kódu s jednodušší údržbou a čas řeším, až když to trvá opravdu dlouho (např. soubor má několik mil. řádků).

Možná jiná forma zápisu by mohla být čitelnější?

Tohle je načtení jednoho souboru a výpočet příslušné statistiky.
(Zadání je pro mne docela zmatečné, tak jen co je v přikladu nebo v poznámkách.)


// Statistika (funkce)
(Soubor as binary) =>
let
// Načtení dat
Zdroj = Lines.FromBinary(Soubor, null, false,1250),
DataTabulky = List.RemoveLastN(List.RemoveFirstN(Zdroj, each not Text.StartsWith(_, "Date") ), each not Text.StartsWith(_, ">") ),
#"Převedené na tabulku" = Table.FromList({"> " & DataTabulky{0} } & List.Range(DataTabulky,1), Splitter.SplitByNothing(), null, null, ExtraValues.Ignore),
#"Rozdělit sloupec oddělovačem" = Table.SplitColumn(#"Převedené na tabulku", "Column1", Splitter.SplitTextByWhitespace(QuoteStyle.Csv)),
#"Záhlaví se zvýšenou úrovní" = Table.PromoteHeaders(#"Rozdělit sloupec oddělovačem", [PromoteAllScalars=true]),
#"Změněný typ s národním prostředím" = Table.TransformColumnTypes(#"Záhlaví se zvýšenou úrovní", {{"T_Set", type number}, {"T_Rec", type number}, {"HR_Rec", type number}, {"HR_Set", type number}}, "en-US"),
#"Změněný typ" = Table.TransformColumnTypes(#"Změněný typ s národním prostředím",{{"Date", type date}, {"Hour", type time}}),
tab = Table.Buffer(Table.ReplaceValue(#"Změněný typ", each [Date], each [Date] & [Hour],Replacer.ReplaceValue,{"Date"})),
//
// Počítání statistiky (do recordu, pak se to spojí do tabulky)
posledniRadek = Table.Last(tab),
Stat = [
Začátek předehřevu = tab[Date]{0},
// Konec předehřevu = List.Max(tab[Date]),
Konec předehřevu = posledniRadek[Date],
Teplota nastavená = tab[T_Set]{0},
Teplota MIN = List.Min(tab[T_Rec]),
Teplota MAX = List.Max(tab[T_Rec]),

Vlhkost nastavená = tab[HR_Set]{0},
Vlhkost MIN = List.Min(tab[HR_Rec]),
Vlhkost MAX = List.Max(tab[HR_Rec]),

// Teplota in spec start = List.Min(Table.SelectRows(tab[[Date], [T_Rec]], each [T_Rec] >= #"Teplota nastavená" - 5)[Date]),
lim = #"Teplota nastavená" - 5,
Teplota in spec start = List.Min(Table.SelectRows(tab, each [T_Rec] >= lim)[Date]),
Total time = #"Konec předehřevu" - #"Začátek předehřevu",
Time in Spec = #"Konec předehřevu" - #"Teplota in spec start",
Náběh teploty = #"Teplota in spec start" - #"Začátek předehřevu",
Poslední teplota = posledniRadek[T_Rec],
Poslední vlhkost = posledniRadek[HR_Rec],
Počet záznamů v TXT = Table.RowCount(tab), // Co má být velikost??? záznamy, pokud byte, tak je to v info o souboru
Poslední datum = DateTime.Date(#"Konec předehřevu")
]
in
Stat


Všechny soubory se pak vyhodnotí normálně:

let
Zdroj = Folder.Files(Excel.CurrentWorkbook(){[Name="tblCesta"]}[Content]{0}[Cesta]),
#"Filtrované řádky" = Table.SelectRows(Zdroj, each [Extension] = ".TXT" and not Text.Contains([Name], "Default") and [Attributes][Hidden] <> true),
#"Rozdělit sloupec oddělovačem" = Table.SplitColumn(#"Filtrované řádky", "Name", each List.Select(Splitter.SplitTextByAnyDelimiter({" ","-", "_", "."}, QuoteStyle.Csv, false)(_), (l) => l <> ""), {"pref.1", "pref.2","Předehřev", "Name.2", "Nastavený čas", "Batch"}),
#"Odebrané sloupce" = Table.SelectColumns(#"Rozdělit sloupec oddělovačem",{"Content", "Batch", "Předehřev", "Nastavený čas", "Date modified"}),
#"Přejmenované sloupce" = Table.RenameColumns(#"Odebrané sloupce",{{"Date modified", "Datum modifikace"}}),
//
// Přidaná statistika suoboru
#"Statistika souboru" = Table.TransformColumns(#"Přejmenované sloupce",{{"Content", Statistika}}),
#"Rozbalené Content" = Table.ExpandRecordColumn(#"Statistika souboru", "Content", {"Začátek předehřevu", "Konec předehřevu", "Teplota nastavená", "Teplota MIN", "Teplota MAX", "Vlhkost nastavená", "Vlhkost MIN", "Vlhkost MAX", "Teplota in spec start", "Total time", "Time in Spec", "Náběh teploty", "Poslední teplota", "Poslední vlhkost", "Počet záznamů v TXT", "Poslední datum"}),
#"Odebrané ostatní sloupce" = Table.SelectColumns(#"Rozbalené Content",{"Batch", "Předehřev", "Nastavený čas", "Datum modifikace", "Začátek předehřevu", "Konec předehřevu", "Teplota nastavená", "Teplota MIN", "Teplota MAX", "Vlhkost nastavená", "Vlhkost MIN", "Vlhkost MAX", "Teplota in spec start", "Total time", "Time in Spec", "Náběh teploty", "Poslední teplota", "Poslední vlhkost", "Počet záznamů v TXT", "Poslední datum"}),
// tohle je navíc, v excelu je to triviální vzorec
#"Přidaný sloupec" = Table.AddColumn(#"Odebrané ostatní sloupce", "Pravda/Nepravda", each DateTime.Date([Datum modifikace]) = [Poslední datum], type logical),
#"Změněný typ" = Table.TransformColumnTypes(#"Přidaný sloupec",{{"Začátek předehřevu", type datetime}, {"Konec předehřevu", type datetime}, {"Teplota nastavená", type number}, {"Teplota MIN", type number}, {"Teplota MAX", type number}, {"Vlhkost nastavená", type number}, {"Vlhkost MAX", type number}, {"Vlhkost MIN", type number}})
in
#"Změněný typ"

ctrl-F, zadat frázi, najít vše, ctrl-A, del

Co třeba použít Word (hromadný tisk)?

To je hláška ochránce osobních údajů. Ve dvou dotazech se dotazujete na dva zdroje a to mu vadí. (Srozumitelnost je mizerná i v anglické verzi, ale jak to zkomolil lokalizační tým...) Má to bránit proti úniku tajných údajů - ve druhém dotazu je adresa a jméno souboru, spíš to slouží k nas... uživatelů.

Máte dvě možnosti. Sloučit dotazy do jednoho, např.:

let
Soubor = Excel.CurrentWorkbook(){[Name="Cesta"]}[Content]{0}[Column1],
Zdroj = Csv.Document(File.Contents(Soubor),[Delimiter=";", Columns=7, Encoding=1250, QuoteStyle=QuoteStyle.None]),
#"Záhlaví se zvýšenou úrovní" = Table.PromoteHeaders(Zdroj, [PromoteAllScalars=true]),
Řádky = Table.AlternateRows(#"Záhlaví se zvýšenou úrovní", 1,1,1),
#"Změněný typ" = Table.TransformColumnTypes(Řádky,{{"Den", type text}, {"Datum", type date}, {"Cas", type time}, {"OUT_Teplota", type number}, {"IN_Teplota", type number}, {"IN_Vlhkost", type number}, {"Bat", type number}}, "en-GB")
in
#"Změněný typ"


Podstatné jsou jen první dva řádky. Dál jsem jen zjednodušil logiku a převedl čísla na čísla.

Asi lepší je ochranu zakázat. Hlavní menu ve 2016 si nepamatuju, ale vypnout se to dá z prostředí PQ editoru: Soubor > Možnosti a nastavení > možnosti dotazu >

Pak v sekci globální : Ochrana osobních údajů > vždycky ignorovat.

Jen pro soubor se dá totéž nastavit v sekci lokální.

Pravý klik na tabulku a obnovit nestačí ??
Nebo v menu vybrat Aktualizovat ?

elninoslov napsal/a:


v čom je problém.


Ozvala se ochrana osobních údajů.

Natvrdo: (třeba z editoru PQ):
Soubor> Možnosti a nastavení > Možnosti dotazu > Ochrana osobních údajů > Vždy ignorovat ....

veny napsal/a:


má to ale svá úskalí pokud je například otevřeno více souborů v excelu z různých umístění může se načíst cesta na jiný soubor

Funkce POLÍČKO má ještě jeden parametr - buňku.
Pokud chybí, vrací hodnotu podle toho, co je v excelu zrovna aktivní.

Teď to jde.

Žádnou relaci M:N nevidím.

aktivní relace:
data_all [Nadřízená akce] : obchodni_pripady [Kód obchodního případu]
denik [Kód akce] : obchodni_pripady [Kód obchodního případu]

neaktivní relace:
denik [Kód akce] : data_all [Kód akce]
Měřítka (např.:
Částka OP:=calculate(SUM([Částka]); not(isblank(obchodni_pripady[Kód obchodního případu])))
Částka Akce:=calculate(SUM([Částka]);USERELATIONSHIP(data_all[Kód akce];denik[Kód akce]); not(isblank(obchodni_pripady[Kód obchodního případu])))


KT řádky:
Název obchodního případu
Název akce

KT hodnoty:
Částka OP
Částka Akce

L

Tu přílohu mi nejse stahnout: "Vámi požádovaná stránka nebyla nalezena."

Alfan napsal/a:


Asi by pomohla pomocná tabulka, jak píšete, ale co jste měl přesně na mysli?


Standardní postup u relací M:N. Vytvoří se tabulka, která obsahuje unikátní klíče z relace. Relacemi se potom propojí původní tabulky s pomocnou, výsledné relace pak jsou N:1.

V podmínkách powerpivota (excelu) bude možná nezbytné deklarovat jednu z relací jakou obousměrnou (která to bude, závisí na KT). To při výpočtu nastaví funkce CROSSFILTER : CALCULATE([měřítko]; CROSSFILTER(...)).

@elninoslov díky za překlad.

Kdyby hans66 zmínil verzi, tak možná ty vzorce by byly výrazně jednosušší.

Je to běžná úloha. Power query pro ni není vhodné. Lepší je datový model (power pivot).

Popis je hodně obecný, a ne moc srozumitelný, z toho moc nevymyslím. Tak k obecnému dotazu aspoň pár obecných poznámek:

Kód akce v tabulce deník s relacemi do dvou tabulek není dobrý nápad (jde to, ale je to nepřehledné).

Relací M:N se zbavte. Buď lepším lepším návrhem datového modelu nebo pomocnou tabulku (můstkem), kde budou unikátní kódy akce (to se dá pomocí power query). Pak půjde nastavit relace.

nebo:
=IFERROR(SVYHLEDAT(C4-B4;$E$4:$G$10;3)*A4;0)
Pokud by vadily hodnoty na 14 - 15 des. místě, je nutné se dohodnout na způsobu vyhodnocení (např korekce o 1e-14, zaokrouhlení na 2 des. místa, ...)

např.:
=IFERROR(INDEX($G$4:$G$10;POZVYHLEDAT(ZAOKROUHLIT(C4-B4;3);ZAOKROUHLIT($E$4:$E$10;3)))*A4;0)
(maticově)


Strana:  1 ... « předchozí  4 5 6 7 8 9 10 11 12   další » ... 38

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

špatný výpočet ze zisku - příčina?

Anonym • 12.7. 22:56

špatný výpočet ze zisku - příčina?

Jakoby • 12.7. 12:35

Řazení podle času v kategoriích

Marekh • 12.7. 9:55

Porovnávací Tabulka

Jess • 8.7. 20:49

Vzorec pro zkopírování obsahu buňky.

veny • 6.7. 8:28

Vzorec pro zkopírování obsahu buňky.

Tonda_Hu • 5.7. 21:17

Porovnávací Tabulka

Jess • 5.7. 13:49