lubo, dobrý tip, ďakujem :)
takže, prípadné zjednodušenie prvého obludného vzorca na trochu menej obludný:
=DATEDIF(DatumOd; DatumDo; "y")&"R-"&
DATEDIF(DatumOd; DatumDo; "ym")&"M-"&
DATEDIF(DATE(YEAR(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd))); MONTH(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd)))+DATEDIF(DatumOd; DatumDo; "ym"); DAY(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd)))); DatumDo; "d")&"D"
No, v SQL to tak má byť, t.j. v hranatých zátvorkách necháš to, čo uvádzam, t.j. [DatumOd] a [DatumDo]. On v tých zátvorkách nemusí text byť, ale je lepšie to tam nechať kvôli prehľadnosti. Inými slovami, ten SQL príkaz by mohol byť i v tvare:
SELECT Meno, TypFormulara, Datum
FROM Tabulka1
WHERE Datum>=[] AND Datum<=[]
Pri spustení dotazu budeš potom vyzvaný, aby si vložil dátumy (do textboxu), alebo, pokiaľ v dotaze uvedieš zdroj, z ktorého sa hodnoty od a do budú načítať, t.j. adresy buniek v Exceli, v ktorých budeš tie dátumy zadávať tak si ich dotaz dosadí z uvedených buniek (toto opäť názorne ukazuje Craig vo svojom videjku, tak sa na to pozri)
eLCHa podle mé teorie z minulého příspěvku je 8R-7M-3D špatně
Tak v tom prípade sa to vysvetlilo asi k obojstrannej spokojnosti :)
eLCHa, ešte som predošlý príspevok zeditoval a môj predpoklad vysvetľujem, tak sa na to eventuálne podívajte, prečo ja počítam 6, proste, je to vec konvencie:
Datediff pre dátumy 1/1/2014 a 2/1/2014 dá výsledok 1 deň, rovnako ako ObdDo mínus ObdOd. Proste, od pondelka do utorka ubehne jeden deň, ale pokiaľ pracujem v pondelok a utorok, tak pracujem dni dva. V tom prípade ako konečné dátum ale volím stredu, alternatívne môžem k výsledku DateDif pripočítať jedničku. Toľko k vysvetleniu rozdielu 6 vs. 7
@eLCHa: Nástup 31.12.2006 => 7 let, 10 měsíců a 7 dní
Moje dva vzorce v tomto prípade dávajú nie 7, ale 6 dní. I keď to spočítam na prstoch, tak mi vyjde dní 6 :) Teda, za predpokladu, že napr. obd. od 15/10 do 16/10 počítam ako jeden deň, nie dva dni. Pokiaľ by to mali byť dni dva, tak k mojim vzorcom je treba pripočítať ešte jedničku. V tom prípade sa ale budeme rozchádzať u toho predošlého príkladu. No, nič, pmn to vzorcami riešiteľné je, ďaleko jednoduchšie a istejšie je ale v tomto prípade použitie UDF, 3 cykly - pre počítanie rokov, mesiacov a dní a je to. Tá funkcia je jednoduchá a i dostatočne rýchla. Pokus o riešenie vzorcom pokladám za výzvu, pokiaľ by som ale chcel mať istotu, že dostanem vždy správny výsledok, tak v tomto prípade by som ja osobne preferoval UDF.
@eLCHa: áno, 8R,7M,3D sedíme :)
ešte trebárs takto:
=YEAR(DatumDo)-YEAR(DatumOd)-(MONTH(DatumDo)-MONTH(DatumOd)<0)&"R-"&
IF(MONTH(DatumDo)-MONTH(DatumOd)>0; MONTH(DatumDo)-MONTH(DatumOd); 12+MONTH(DatumDo)-MONTH(DatumOd))-(DAY(DatumDo)-DAY(DatumOd)<0)&"M-"&
IF(DAY(DatumDo)-DAY(DatumOd)>0; DAY(DatumDo)-DAY(DatumOd); DAY(DATE(YEAR(DatumDo); MONTH(DatumDo); 0))+DAY(DatumDo)-DAY(DatumOd))&"D"
@lenn: tak ten hrůzostrašný vzorec mi hodil chybu (#NÁZEV?)
no, do češtiny to fakt prekladať nebudem, musíte si nájsť české ekvivalenty jednotlivých funkcií, t.j.
Date=Datum
Year=Rok
Day=Den
atd., nechcite po mne to, čo zvládnete pri troche snahy sama
S istým zjednodušením by sa dal asi použiť trochu hrôzostrašný vzorec :
=DATEDIF(DatumOd; DatumDo; "y")&"R-"&
DATEDIF(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd)); DatumDo; "m")&"M-"&
DATEDIF(DATE(YEAR(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd))); MONTH(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd)))+DATEDIF(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd)); DatumDo; "m"); DAY(DATE(YEAR(DatumOd)+DATEDIF(DatumOd; DatumDo; "y"); MONTH(DatumOd); DAY(DatumOd)))); DatumDo; "d")&"D"
Co se sešitů uložených jen pro čtení týká, tak to jsem již zkusil, ale není nic jednoduššího, než rozkliknout vlastnosti a odškrtnout, což se mi tu už stalo..
Neplatí pre postup zaheslovania, ktorý som uviedol vo svojom predošlom príspevku :)
Ospravedlňujem sa, že sa do toho pletiem, ale nestačilo by v uvedenom prípade uložiť súbor chránený heslom pre úpravy: F12->Nástroje->Možnosti->Obecné možnosti->Heslo pre úpravy? Áno, iste, ochranu heslom je v prípade Excelu (po verziu 2010 vrátane) pomerne ľahké prelomiť, ale toto pokiaľ niekto zvláda, tak bude zvládať i prípadné odstránenie záznamov z nejakého logu, pokiaľ tento nebude ukladaný v mieste, ku ktorému dotyčný nemá prístup. Pokiaľ by som to mal riešiť ja (zabránenie úprav v súbore iným užívateľom), tak by som volil hore uvedený postup - z mojich kolegov by takúto ochranu dokázal prekonať maximálne jeden, ale je fakt, že okolo mňa žiadni počítačoví géniovia nesedia :)
edit: než som to dopísal, tak ma elcha predbehol, no a elchovi by som ja osobne v otázkach excelu veril :)
Nemám prístup k SQL serveru, takže vyskúšať nedokážem. Vzhľadom k tomu, že píšeš, že dáta z SQL serveru do Excelu natiahnuť dokážeš, tak mám za to, že MS Query v tvojom prípade musí fungovať! Nič na tom nie je, stačí vedieť, ako na to, perfektný návod je tuná: https://www.youtube.com/watch?v=P9cUYpXIKsU
Mám za to, že tých 500000 riadkov z SQL ťaháš z jednej jedinej tabuľky, v tom prípade si v MS Query dotiahneš z danej tabuľky akurát požadované 3 stĺpce (polia) a výber obmedzíš parametrom (v tomto prípade budú parametre dva, t.j. dátum od-do), hodnoty ktorých budeš meniť v 2 bunkách v exceli, ako názorne popisuje vo svojom návode Craig Hatmaker. Toto zvládne pmn i človek s minimom znalostí SQL, okrem toho, stačí, pokiaľ to vytvoríš ty a kolegyne si potom budú meniť akurát rozsah od-do už v priamo v Exceli, oni o SQL nemusia vedieť ale naprosto nič :) Výsledok query vrátiš do Excelu samozrejme už rovno vo forme kontingenčnej tabuľky.
Inak, schématický zápis parametrického dotazu by v uvedenom prípade vyzeral približne takto:
SELECT Meno, TypFormulara, Datum
FROM Tabulka1
WHERE Datum>=[DatumOd] AND Datum<=[DatumDo];
prípadne takto:
SELECT Meno, TypFormulara, Datum
FROM Tabulka1
WHERE Datum BETWEEN [DatumOd] AND [DatumDo];
hranaté zátvorky v tomto prípade indikujú práve prítomnosť parametra. Ako hovorím, nič zložitého ani pre skoro úplného začiatočníka :)
btw, KT umožňuje okrem zoskupovania cez dátumy, čo zmieňuje lubo, dáta cez dátumy i filtrovať, t.j. nastaviť rozsah od-do priamo v KT tiež ide a pmn ani táto možnosť zložitá rozhodne nie je...
Zadaniu rozumiem a pochopil som ho, trúfam si tvrdiť, hneď z prvého príspevku. Rozumieš pre zmenu ty navrhovanému riešeniu (lubovmu, môjmu, to je fuk)? Asi nie, viď?
Ako najvhodnejší (najjednoduchší na zmenu parametru, ktorým je v tomto prípade rozsah dní od-do) sa mi javí z 3 mnou uvedených možností riešenia parametrický dotaz vytvorený v MS Query, kedy hodnotu parametru (v tomto prípade parametrov) je možno načítať priamo z konkrétnych buniek, v ktorých je potom možné rozsah od-do meniť. Do pivotky sa potom budú načítať rovno iba záznamy, spĺňajúce dané kritérium výberu.
Buď dotazom priamo v MS SQL obmedziť záznamy na rozsah požadovaných dátumov (ale píšeš, že to je user unfriendly), takže ďalšie možnosti, ktoré ma napadajú a sú pmn schodné (určite existujú i iné):
1. Ako medzistupeň použiť Access a vytvoriť príslušný dotaz v ňom
2. Do úvahy prichádza i MS Query, kde si môžeš parametrický dotaz vytvoriť, ale nie som si istý, či zvládne 500000 vstupných záznamov, asi zvládne, ale neskúšal som.
3. PowerPivot
@Palooo:
Stál som si trochu na vedení a zdalo sa mi, že ten LIKE proste fungovať v tomto prípade nebude, ale presvedčil si ma o opaku . Trochu sa hanbím za mierne zbytočnú poznámku.
@Palooo: if "Attack" LIKE "Attack, Charge, onslaught" Then
Takto sa to s LIKE pmn rozhodne napísať nedá. Pre porovnanie "Attack" s "Attack, Charge, onslaught" by šlo aplikovať trebárs InStr.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.