Get Current Date in MDX Query - mdx

I am trying to get current date records and I have a query where a particular date is given , how can I put currentdate in that position.
I am new to MDX, if anyone answer that will be really helpful.
Below is the MDX query :
SELECT NON EMPTY { [Measures].[SHC] } ON COLUMNS, NON EMPTY { ([C].[RHC].[rhc].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM ( SELECT ( { [DHC].[DHC].&[01/01/1992] } ) ON COLUMNS FROM [TABULAR_EAL]) WHERE ( [DHC].[DHC].&[01/01/1992] ) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
I want to get records based on CurrentDate.

Something like this:
StrToMember('[DHC].[DHC].&[' + Format(Now(),'dd/MM/yyyy') + ']')
See my blogpost for more details.

I complete the answer :
With Member Measures.CurrentDate As
Format(
Now(),
'yyyyMMdd'
)
Member Measures.GetMemberCurrentDate as
'[Start Date].[Miladi Int Date].&['+ measures.CurrentDate + ']'
member Measures.GetCurrentDateBimehValue as
(StrToMember(Measures.GetMemberCurrentDate) ,[Measures].[BimehValue])
select Measures.GetCurrentDateBimehValue on columns
from [BimehCube]

Related

Return data between two dates from a MDX Query SSAS

I'm trying to filter data between two date ranges. Its data type is datetime.
I have generated the query via the Query designer in SSAS.
Below is sample of the dataset I have:
Sample image of Measure groups and dimensions:
Sample Filter I have used:
Generated MDX Query:
`SELECT NON EMPTY { [Measures].[Status] } ON COLUMNS, NON EMPTY { ([Lobby].[Added Local Time].[Added Local Time].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_VALUE, MEMBER_UNIQUE_NAME ON ROWS FROM ( SELECT ( [Lobby].[Added Local Time].&[2020-01-02T10:32:37.806667] : [Lobby].[Added Local Time].&[2020-02-19T13:43:13.833333] ) ON COLUMNS FROM ( SELECT ( { [Lobby].[Status].[All] } ) ON COLUMNS FROM [LTS KROI DEMO])) WHERE ( [Lobby].[Status].[All] ) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS`
Problem:
Issue is that it doesn't filter the data according to the given datetime ranges. Neither gives any error.
If I use the only the Filter - Status a specific value without giving all it all works fine.
Please try the Filter function. It will be slower but should work since the approach you took only works if the exact date time exists
SELECT { [Measures].[Status] } ON COLUMNS, NON EMPTY {
Filter(
[Lobby].[Added Local Time].[Added Local Time].ALLMEMBERS,
[Lobby].[Added Local Time].CurrentMember.MemberValue >= CDate("2020-01-02 10:32:37.806667")
and [Lobby].[Added Local Time].CurrentMember.MemberValue <= CDate("2020-02-19 13:43:13.833333")
)
} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_VALUE, MEMBER_UNIQUE_NAME ON ROWS
FROM [LTS KROI DEMO]
CELL PROPERTIES VALUE
I was able get the desired result by following the answer of
#GregGalloway by making a small change to the parameter I passed as
the date. When I removed time passing the date to the Cdate function
it work fine.
SELECT { [Measures].[Status] } ON COLUMNS, NON EMPTY {
Filter(
[Lobby].[Added Local Time].[Added Local Time].ALLMEMBERS,
[Lobby].[Added Local Time].CurrentMember.MemberValue >= CDate("2020-01-02")
and [Lobby].[Added Local Time].CurrentMember.MemberValue <= CDate("2020-02-19")
)
} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_VALUE, MEMBER_UNIQUE_NAME ON ROWS
FROM [LTS KROI DEMO]
CELL PROPERTIES VALUE

MDX Function (Excel PowerPivot) to Exclude Non Numeric Values from DB

I am quite new to MDX and I am trying hard to write a query that allows me to retrieve only numeric values.
My query at present is:
SELECT NON EMPTY {ISNUMERIC([Measures].[Average Booking Window])}
ON COLUMNS, NON EMPTY {
([Stay Date].[Year].[Year].ALLMEMBERS *
[Stay Date].[Month of Year].[Month of Year].ALLMEMBERS )
} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME
ON ROWS FROM (
SELECT ( [Booking Date].[Calendar].[Date].&[2018-01-01T00:00:00] :
[Booking Date].[Calendar].[Date].&[2018-08-31T00:00:00] )
ON COLUMNS FROM (
SELECT ( { [Hotel].[Market].&[Pisa City, Italy] } )
ON COLUMNS
FROM [MYCUBE]))
WHERE ( [Hotel].[Market].&[Pisa City, Italy])
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR,
FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE,
FONT_FLAGS
The error I get is:
Query (1, 18) The function expects a tuple set expression for the 1 argument. A string or numeric expression was used.
What I am expecting is to get data only when it's numeric and I want the MDX query to completely exclude the rows with non numeric data.
Thank you in advance

MDX Query: The Syntax for [Simple Cube] is incorrect

I'm pretty sure this is a syntax error, but I'm unfamiliar with MDX. Any help would be greatly appreciated. I keep getting the error "Parser: the syntax for [Simple Cube] in incorrect. The measure I'm using, [Cancel Disbursement Amount], returns three different values. I'm trying to select the value where the [Dim Disbursement Type] equals AGENT COMMISSION. Here's the query:
SELECT NON EMPTY { [Measures].[Cancel Disbursement Amount] }
ON COLUMNS, NON EMPTY { [Dim Disbursement Type].[Description].&[AGENT
COMMISSION]}
ON COLUMNS FROM ([Simple Cube])
CELL PROPERTIES VALUE, BACK_COLOR,
FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
Thank you!
I guess you should remove the () :
... ON COLUMNS FROM [Simple Cube] CELL ...

Mondrain MDX for records between date range where start and end date being separate columns

I want to search date between two columns of same dimension. Columns name is start date and end date. I tried every thing, following query give me this error : Mondrian Error:Internal error: Cannot deduce type of call to function ':'
MDX query :
WITH
SET [~ROWS] AS
Hierarchize
(
{
{[Location_Cluster.default].[All Location_Cluster.defaults]}
,{[Location_Cluster.default].[Location_Cluster].MEMBERS}
}
)
MEMBER [Measures].[QTY Percent] AS
[Measures].[Total_Quantity]
/
(
[Measures].[Total_Quantity]
,[Location_Cluster.default].[All Location_Cluster.defaults]
)
,format_string = '0.00%'
MEMBER [Measures].[Revenue Percent] AS
[Measures].[Total_Revenue]
/
(
[Measures].[Total_Revenue]
,[Location_Cluster.default].[All Location_Cluster.defaults]
)
,format_string = '0.00%'
MEMBER [Measures].[Margin Percent] AS
[Measures].[Total_Margin]
/
(
[Measures].[Total_Margin]
,[Location_Cluster.default].[All Location_Cluster.defaults]
)
,format_string = '0.00%'
SELECT
NON EMPTY
{
[Measures].[Sku_Count]
,[Measures].[Total_Quantity]
,[Measures].[QTY Percent]
,[Measures].[Total_Revenue]
,[Measures].[Revenue Percent]
,[Measures].[Total_Margin]
,[Measures].[Margin Percent]
} ON COLUMNS
,NON EMPTY
[~ROWS] ON ROWS
FROM [APCS_SALES_CUBE]
WHERE
(
{[Date].[Start_Date].&[2017-01-01] : NULL}
,{NULL : [Date].[End_Date].&[2017-03-01]}
,[Cluster.Cluster_Id].[2]
,[Taxonomy.default].[Taxonomy_ID].[3]
,[Company.Company_Name].[Compnay_Name].[1]
);
I followed following links to resolve this issue. But don't know how to apply specify function in Mondrian MDX
https://ask.sqlservercentral.com/questions/95478/mdx-for-records-between-date-range-where-start-and.html#answer-142811
https://www.purplefrogsystems.com/blog/2013/04/mdx-between-start-date-and-end-date/#comment-1981
Your query is not well formed. You need to make set out of the range you want to slice. Here is an example:
WITH SET [~ROWS] AS
(${dateFromParameter} : ${dateToParameter})
MEMBER Measures.[number] as
FORMAT([date].[godina].CurrentMember.PROPERTIES("datum"), "dd.mm.yyyy")
SET [ROOT] AS
FILTER([ORG].[org_id].Members, [ORG].[org_id].currentmember.parent.parent=[ORG].[org_id].currentmember.parent)
SELECT
NON EMPTY {[Measures].[total], Measures.[number]} ON COLUMNS,
NON EMPTY [ROOT] * [~ROWS] ON ROWS
FROM [svcs]

SSAS - Passing MDX Report Parameter to MDX DataSet Query

In my MDX report based on cube, the input help for date must be a calendar, therefore Date/Time type of parameter is essential. The field in time dimension by which I filter data is Integer. Example value: 20130827.
My dataset query looks like this:
SELECT NON EMPTY { [Measures].[Hours In Track] } ON COLUMNS, NON EMPTY {
([Dim Date].[Date ID].[Date ID].ALLMEMBERS * [Dim Division].[Hierarchy].[Division ID].ALLMEMBERS ) }
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM
( SELECT ( STRTOSET(#DimDivisionHierarchy, CONSTRAINED) ) ON COLUMNS FROM
( SELECT ( STRTOMEMBER(#FromDimDateDateID, CONSTRAINED) : STRTOMEMBER(#ToDimDateDateID, CONSTRAINED) ) ON COLUMNS FROM [BicepsArveCube]))
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
I used a text field, which showed me, that date/time type parameter value looks as follows:
2013-08-05 00:00:00, while my DateID is Integer type, so I need to do conversion.
When in dataset parameters tab I specify the parameter value as expression:
="[Dim Date].[Date ID].&["
& Replace(Replace("2013-08-05 00:00:00", "-", ""), " 00:00:00", "")
& "]"
I get the data as expected, everything works fine. But when I changed the hardcoded date/time value to parameter value (type date/time ):
="[Dim Date].[Date ID].&["
& Replace(Replace(Parameters!FromDimDateDateID.Value, "-", ""), " 00:00:00", "")
& "]"
I get a constraint violation error. I don't know why, because as written above, the Parameters!FromDimDateDateID.Value looks exactly the same as the hardcoded value I used.
I used text field to check what expression I get after conversion in both cases (hardcoded date and the same date chosen from calendar and passed as parameter value) and it looks exactly the same:
[Dim Date].[Date ID].&[20130805]
Try
STRTOMEMBER(
"[Dim Date].[Date ID].&["
+ Replace(Replace(#FromDimDateDateID, "-", ""), " 00:00:00", "")
+ "]",
CONSTRAINED)
In MDX - which is interpreted by Analysis Services - you cannot access Reporting Services objects like Parameters. Instead, their value is sent to the Analysis Services server along with the MDX statement, which can reference them with the # notation.