MicroStrategy calculate date from prompt
06 Jan 2023
Dificulty ★★★☆☆
INTRO
This case shows example how to caclucate dates from database with date from prompt without seperate date table.
First lets create some basic data
CREATE VIEW F_Data_V AS
SELECT CAST('2000-01-01' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2023-01-01' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2023-01-02' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2023-01-03' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2023-01-04' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2023-01-05' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2022-12-01' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2022-12-31' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue UNION
SELECT CAST('2022-12-30' AS DATE) AS Day_Date , CONVERT(DECIMAL(10,2),RAND(CHECKSUM(NEWID())) * 10000) AS Revenue
Then register atribute and metric normaly
Create a new value prompt
Select date and time
Enter name of prompt
Save prompt
Register new metric
ApplySimple("max(#0)"; ?[Comparison date]; Revenue)
?[Comparison date] is created prompt
Revenue is rendom metric (needed for FROM statement)
Convert date atribute into metric
Do not forget to set it to MAX
Calculate difference
DateDiff(Date; [Comparison date]; "d")
Example
And now we can set clusters of data
Case((DateDiff < 0); Revenue; 0) Less then selected
Case((DateDiff = 0); Revenue; 0) Selected date
Case(((DateDiff >= 1) And (DateDiff <= 30)); Revenue; 0) Between 1-30
Case(((DateDiff >= 31) And (DateDiff <= 60)); Revenue; 0) Between 31-60
Case(( DateDiff >= 61); Revenue; 0) Greater then 60