< návrat zpět

MS Excel


Téma: pocitanie opakovanych hodnot Dax rss

Zaslal/a 9.2.2021 19:58

Dobrý deň, už dlhšie sa borím s nasledujúcim problémom. Mám tabuľku, v ktorej sú stĺpec B - predstavujúci ID zákazníka, stĺpec C - to je dátum a čas kedy zákzaník volal. Ja potrebujem v stĺpci D zistiť, či to číslo zo stĺpca A volalo znovu do napr. 3 dní. V exceli je to tento vzorec =IF(COUNTIFS([Value];B3;[Date];"<"&C3+3;[Date];">="&C3)=1;0;1) - výstupom má byť flag 1 pre opakovaný a 0 pre neopakovaný.
Lenže ja mám tabuľku s 2 miliónmi riadkov a mám to v powerpivote. Toto isté potrebujem vypočítať cez DAX a tu je problém. Mám vzorec: =IF(CALCULATE(COUNT('Tabuľka1'[Value]);FILTER('Tabuľka1';'Tabuľka1'[Value]=EARLIER('Tabuľka1'[Value]));Filter('Tabuľka1';'Tabuľka1'[Date]>EARLIER('Tabuľka1'[Date]));Filter('Tabuľka1';'Tabuľka1'[Date]<EARLIER([Date])+3));1;0)

earlier je ale veľmi pomalý na 2 miliónov riadkov, navyše ja hodnotu 3 potrebujem dynamicky meniť podľa potreby cez slicery. Prepočítanie opäť trvá veľmi dlho. Čiže potrebujem niečo iné. Viete mi prosím niekto poradiť iný daxový vzorec, ktorý by toto mohol riešiť?

Čiastočne by mi pomohlo aj dotiahnuť nejakým excelovským vzorcom do stĺpca D dátum opakovaného hovoru, ak bol opakovaný, ešte lepšie to isté ale daxom, nech viem pracovať kompletne v ňom..

Ďakujem vopred za každý nápad.

Příloha: xlsx49775_example.xlsx (127kB, staženo 20x)
Zaslat odpověď >

#049792
avatar
Ten eralier pomalý není, jen 2000000x prohledáváš 2000000 x 3 položek. To chvíli trvá.

Možnosti:
a) skladovat v jednom sloupci datum a čas není zpravidla dobrý nápad. => rozděl datum a čas do různých sloupců, např. den a čas. Lépe se to zpracovává a ušetří se dost místa.

b) Pokud to máš rozdělené, vyrob tabulku kalendářních dat.
Můžeš automaticky, to ale vyrobí data od roku 01.01.1899. Pro začátek to stačí. Propoj relací den volání a date v generované tabulce.

Můžeš psát vzorečky. Ve vzorečku ponechávám generované názvy tabulky kalendářních dat.

Dopočítaný sloupec stejně nebude žádná sláva.
Neřeším více volání ve stejný den.

Var 1:
=CALCULATE(
COUNTA('Tabuľka1'[Value]); all('Tabuľka1');
'Tabuľka1'[Value]=earlier('Tabuľka1'[Value]);
DATESINPERIOD('Kalendář'[Date];'Tabuľka1'[Den];3;DAY))


Vzorec v tabulce vybírá řádky s datumem od data v řádku + 3 dny. tento výběr využívá relaci, je tedy o dost rychlejší než prohledání celé původní tabulky.

Počítá všechny výskyty, tj. opakování je, pokud výsledek je > 1.

Var 2:
=
var val = 'Tabuľka1'[Value] // místo earlier.. si zapamatuje co hledat
return
CALCULATE(
//--- vnitřní filtr - má vybrané řádky s datem, prohledá je a spočte počet výskytů
CALCULATE(
COUNTA('Tabuľka1'[Value]);
'Tabuľka1'[Value]=val
);
//--- Vnější filtr - pomocí relace vybere řádky s potřebným datem
all('Tabuľka1');
DATESINPERIOD('Kalendář'[Date];'Tabuľka1'[Den];3;DAY)
)


Pokud se by se počítaly i opakované hovory během dne budou výrazy trochu složitější. Základ je stejný + spočetly by se hovory během dne a pokud by jich bylo více než 1, tak by se zjistilo, kolik jich následuje.

Ps. Náhled na to, jak se vzorec zpracovává, poskytne DAX Studiocitovat
#049926
avatar
Lubo ďakujem ti za pomoc, pouvažujem nad rozdelením toho stĺpca. Zdroj ťahám asi z 36 excelov cez power query a trvá asi 2 hodiny, kým mi tie dáta natiahne, tak sa mi do toho moc nechce znova to ťahať :). Ešte som sa dostal k riešeniu, doťahovať do nového stlpca dátum opakovaného kontaktu, ak opakovaný bol. Len toto 2 milióny riadkov, tiež nepotiahne :/.



Next Date =
VAR vThisDate = Table[Date]
VAR vNextDate =
CALCULATE (
MIN ( Table[Date] ),
ALLEXCEPT (
Table,
Table[Value]
),
Table[Date] > vThisDate
)
RETURN
vNextDatecitovat
#049929
avatar
2 mil. řádků není problém, pracuji běžně se 100 - 150 mil. řádků. Nesmí se ale prohlížet základní tabulka řádek po řádku, ...

Sloupec se dá rozdělit i v datovém modelu. Bude to jen náročnější na paměť.

Připomínám, že pokud chceš optimalizovat výpočet, pak je DAX studio prakticky jediná volba (ukáže plán výpočtu včetně časů, ...).citovat

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