Forum Discussion
Performance : calculating Moving average, percentile
- 7 years ago
Can you try changing the last 2 bits:
'Fact'[TimeID] >= MovingWindowStart
&& 'Fact'[TimeID] <= MovingWindowEndto
'DimTime'[TimeKey] >= MovingWindowStart
&& 'DimTime'[TimeKey] <= MovingWindowEndIn addition, make sure TimeKey should be an integer.
You should have a Date dimension (365 rows for 1 year) & a time dimension (86400 rows for one day), and link it to your fact table.
Afterwards, you can derive your moving Average based on the Time dimension table which has all the time.
AverageMoving2s =
VAR MovingWindowEnd =
MAX ( 'Time'[TimeID] )
VAR MovingWindowStart = MovingWindowEnd - 2
VAR MaxTimeinFact =
CALCULATE ( MAX ( 'Fact'[TimeID] ), ALLSELECTED ( 'Time' ) )
VAR MinTimeinFact =
CALCULATE ( MIN ( 'Fact'[TimeID] ), ALLSELECTED ( 'Time' ) )
RETURN
IF (
MovingWindowEnd <= MaxTimeinFact
&& MovingWindowEnd >= MinTimeinFact,
CALCULATE (
AVERAGEX (
VALUES ( 'Time'[TimeID] ),
VAR Total = [M1 Total] RETURN IF ( ISBLANK ( Total ), 0, Total )
),
ALL ( 'Time' ),
'Time'[TimeID] >= MovingWindowStart
&& 'Time'[TimeID] <= MovingWindowEnd
)
)Thank you AkhilAshok !
It looked good! But the average doesn't work.
You can see below.
AverageMoving2sTest =
VAR MovingWindowEnd =
MAX ( 'DimTime'[TimeKey] )
VAR MovingWindowStart = MovingWindowEnd - 2
VAR MaxTimeinFact =
CALCULATE ( MAX ( 'Fact'[TimeID] ); ALLSELECTED ( 'DimTime' ) )
VAR MinTimeinFact =
CALCULATE ( MIN ( 'Fact'[TimeID] ); ALLSELECTED ( 'DimTime' ) )
RETURN
IF (
MovingWindowEnd <= MaxTimeinFact
&& MovingWindowEnd >= MinTimeinFact;
CALCULATE (
AVERAGEX (
VALUES ( 'DimTime'[TimeKey] );
VAR Total = [Total bets/s] RETURN IF ( ISBLANK ( Total ); 0; Total )
);
ALL ('DimTime');
'Fact'[TimeID] >= MovingWindowStart
&& 'Fact'[TimeID] <= MovingWindowEnd
)
)
Regards,
- AkhilAshok7 years ago
Solution Sage
Can you try changing the last 2 bits:
'Fact'[TimeID] >= MovingWindowStart
&& 'Fact'[TimeID] <= MovingWindowEndto
'DimTime'[TimeKey] >= MovingWindowStart
&& 'DimTime'[TimeKey] <= MovingWindowEndIn addition, make sure TimeKey should be an integer.
- v-frfei-msft7 years ago
Community Support
Hi Anonymous,
Does that make sense? Kindly mark the answer to close the case. Thanks in advance.
Regards,
Frank