MDX AllMembers doesn't show calculated members - mdx

Say I have as hierarchy [Rank].[Rank] with three members
[Rank].[Rank].&[Boss]
[Rank].[Rank].&[Manager]
[Rank].[Rank].&[Supervisor]
[Rank].[Rank].&[Serf]
Then create a calcuated member in the query
MEMBER [Rank].[Rank].[Middle Managers] AS
[Rank].[Rank].&[Manager] + [Rank].[Rank].&[Supervisor]
if I say
with
member [Rank].[Rank].[Middle Managers] AS
[Rank].[Rank].&[Manager] + [Rank].[Rank].&[Supervisor]
select
{
[Measures].[Hours]
}
on 0
, [Rank].[Rank].[Rank].ALLMEMBERS
on 1
from
some_cube
I don't get the [Rank].[Rank].[Middle Managers] appearing in resultset, but if I use
with
member [Rank].[Rank].[Middle Managers] AS
[Rank].[Rank].&[Manager] + [Rank].[Rank].&[Supervisor]
select
{
[Measures].[Hours On Stack Overflow]
}
on 0
, [Rank].[Rank].[Rank].ALLMEMBERS + [Rank].[Rank].[Middle Managers]
on 1
from
some_cube
I do get it.
But I was under the impression that ALLMEMBERS includes calculated members. Can anyone see what I'm doing wrong please?

Your naming is a bit confusing ([Rank].[Rank].[Rank] vs [Rank].[Rank] usage); you might try (notice the extra [Rank] in the name):
with member [Rank].[Rank].[Rank].[Middle Managers] AS
[Rank].[Rank].&[Manager] + [Rank].[Rank].&[Supervisor]
[edit] is attaching your calc. member into a member that is the level above [Rank] working:
with member [Rank].[Rank].&[Boss].parent.[Middle Managers] AS
[Rank].[Rank].&[Manager] + [Rank].[Rank].&[Supervisor]

Related

How to tuple with Member_Key MDX SSAS?

I want to tuple using member key of [Dim].[Country]
{[Dim].[Country].CurrentMember.Member_Key},
STRTOSET("[User].[ID].&[" + mid(username, instr(username, "\")+1) + "]")
But when I use CurrentMember.Member_Key function I get the following error:
The function expects a tuple set expression for the 1 argument. A string or numeric expression was used.
If I write it like this using "members" is works. But then it will tuple with the full name (100 - Norway) but my goal is to tuple it with just the key part e.g "100"
{[Dim].[Country].members},
STRTOSET("[User].[ID].&[" + mid(username, instr(username, "\")+1) + "]")
Best regards,
Rubrix
Instead of [Dim].[Country].CurrentMember.Member_Key you should do something like this:
with member [Measures].CountryKey as [Dim].[Country].CurrentMember.Member_Key
So something like this could work (on Adventure Works):
with member [Measures].CountryKey as [Geography].[Country].CurrentMember.Member_Key
SELECT ([Measures].CountryKey, StrToSet ('[Geography].[State-Province].Members') )
ON 0
FROM [Adventure Works]

MDX currentMember get me error

This MDX function raise error :
with member measures.x as
(
[Date].[Date].[Date].&[20160101] : [Date].[Date].[Date].currentmember.value
,
[Measures].[current balance]
)
select measures.x on columns,
[Branch].[HeadOffice Branch].[Head Office Code] on rows
from MyCube
Error is :
The CURRENTMEMBER function expects a hierarchy expression for the 1 argument. A member expression was used.
But when I use
[Date].[Date].[Date].&[20160101] : [Date].[Date].[Date].&[20160131]
It works good
why?
This is valid mdx:
[Date].[Date].[Date].&[20160101] : [Date].[Date].currentmember
Although this is not:
WITH member measures.x AS
(
[Date].[Date].[Date].&[20160101] : [Date].[Date].currentmember
,
[Measures].[current balance]
)
It is not valid because round braces (...) signify a tuple but a tuple requires exact co-ordinates so the first argument cannot be a set.
You could add an aggregation such as SUM:
WITH member measures.x AS
SUM
(
[Date].[Date].[Date].&[20160101] : [Date].[Date].currentmember
,
[Measures].[current balance]
)
This is valid mdx but if you do not have [Date].[Date] in context i.e. in the WHERE or SELECT clause then all it is returning is the All member.
Why are you using [Date].[Date].currentmember ?
CURRENTMEMBER works on an attribute hierarchy (in your case [Date].[Date]). So [Date].[Date].CURRENTMEMBER will work.
Also you will need to take out the value selector, as your expression returns a set of dates (member : member returns a set of all the members between those two members).

How to build a dynamic MDX formula for a calculated member?

I am trying to create a Calculated Member to get a sum up to last week.
No problem to get the week value (I need it to be two digits i.e. '05', so adding 100-1 )
with
Member [Measures].Week as
'right(str(int(99+datepart ( ''ww'', Now()))),2)'
-- That works as expected
member [Measures].SalesUpToWeek as
'strtomember(
"aggregate(periodstodate([Dim].[2015],[Dim].[2015].[" + ([Measures].Week) + "]),[Measures].[Sales])")'
I get the literal value
aggregate(
periodstodate([Dim].[2015],[Dim].[2015].[25])
,[Measures].[Sales]
)
What I need is the value of this MDX calculation.
All other attempts end up with a syntax error. Just as an example
member [Measures].SumToWeek as
'aggregate(
periodstodate(
[Dim].[2015],[Dim].[2015].[' + strtomember([Measures].Week) + '])
,[Measures].[Sales])'
Error
Lexical error at line 2, column 0. Encountered: after : "[\n"
Any idea?
[Measures].Week is already a string entity. You don't need to put StrToMember around it. Instead you should have it outside the string you dynamically defined.
with
Member [Measures].Week as
"right(str(int(99+datepart ( ''ww'', Now()))),2)"
member [Measures].SumToWeek as
aggregate(
periodstodate(
[Dim].[2015],
StrToMember("[Dim].[2015].[" + [Measures].Week + "]")
)
,
[Measures].[Sales]
)
This is your error:
strtomember([Measures].Week)
Let us say that [Measures].Week is equal to 15 then you are trying to do this:
strtomember(15)
So there are two errors in the above:
You're feeding a numeric into a functions that converts Strings to Memebers
You need to feed in the full string representation of the member i.e."[Dim].[2015].[15]"
Maybe try putting the strToMember function around the string that is the representation of the member:
MEMBER[Measures].SumToWeek AS
'aggregate(
periodstodate(
[Dim].[2015],
strtomember('[Dim].[2015].[' + [Measures].Week + ']', constrained)
)
,[Measures].[Sales])'
Here is the MSDN reference for the function strtomember:
https://msdn.microsoft.com/en-us/library/ms146022.aspx?f=255&MSPPError=-2147217396
Edit
Looking at this previous post: (StrToMember does not accept calculated measure (mdx))
...you need to create the member before feeding it into the new measure, so:
WITH
MEMBER [Measures].[Week] AS
Right
(
Str(Int(99 + Datepart('ww',Now())))
,2
)
MEMBER [Dim].[2015].[TargetWeek] AS
StrToMember
(
'[Dim].[2015].[' + [Measures].Week + ']'
,constrained
)
MEMBER [Measures].SumToWeek AS
Aggregate
(
PeriodsToDate
(
[Dim].[2015]
,[Dim].[2015].[TargetWeek]
)
,[Measures].[Sales]
)
Edit2
Ok if you wish to use PeriodsToDate then we need to use StrToSet and then use the member in this set inside the function. This is because custom members lose their family ties and are therefore useless inside some mdx functions.
Here is a working script in AdvWrks illustrating the approach I'm suggesting:
WITH
MEMBER [Measures].[Wk] AS
Right
(
Str(Int(99 + Datepart('ww',Now())))
,2
)
SET [TargetWeek] AS
StrToSet
(
'[Date].[Calendar Weeks].[Calendar Week].[Week ' + cstr([Measures].[Wk]) + ' CY 2007]'
)
MEMBER [Measures].[SumToWeek] AS
Aggregate
(
PeriodsToDate
(
[Date].[Calendar Weeks].[Calendar Year]
,[TargetWeek].item(0).item(0)
)
,([Measures].[Internet Sales Amount])
)
SELECT
{[Measures].[SumToWeek]} ON 0,
[Product].[Product Categories].[All] ON 1
FROM [Adventure Works];
I got an interesting suggestion on Pentaho forums that pointed me to a nice blog post which allowed to write an elegant solution:
http://diethardsteiner.blogspot.com.es/2009/10/current-date-function-on-mondrian.html
with
member [Measures].sm as aggregate(
periodstodate(
currentdatemember([Dim],'["Dim"]\.[yyyy]'), -- current year
currentdatemember([Dim],'["Dim"]\.[yyyy]\.[ww]').lag(1) -- previous week
),
[Measures].[Sales])
Thks

how to set caption for calculated measure in MDX

i have a MDX query in Mondrian like below
with member [Measures].[a] as '([Measures].[LCount] * 2)'
member [Measures].[b] as '([Measures].[a] * 3)'
select {[Rate].[Rate].Members} ON COLUMNS,
{[Measures].[a], [Measures].[b]} ON ROWS
from [c];
and i want to set caption for my calculated measures that is different with their uniqeName
what should i do?
NOTICE :
with member [Measures].[a] as '([Measures].[LCount] * 2)',
CAPTION = "my measure"
doesn't work!
I tried a statement similar to
with member [Measures].[a] as '([Measures].[Internet Sales Amount] * 2)', Caption = 'my measure'
member [Measures].[b] as '([Measures].[a] * 3)'
select {[Customer].[Customer Geography].[Country].members} ON COLUMNS,
{[Measures].[a], [Measures].[b]} ON ROWS
from [Adventure Works];
and it worked without problems. Note: I used single quotes for the caption text.
Just a remark unrelated to this: You can omit the quotes around the member definition if you do not need compatibility with Analysis Services in the 2000 version. This sometimes (but not in this case) gives you better syntax error messages.

MDX CurrentMember with SSAS 2008 doesn't work as stated by MSDN

First of all I use the SQL Management Studio for this query (no Excel 2007 that seems to have problems):
WITH
SET [Project period dates] AS
{
StrToMember("[Time].[Date].&[" + [Project].[ParentProject].CURRENTMEMBER.PROPERTIES("Project Start Iso") + "]"):
StrToMember("[Time].[Date].&[" + [Project].[ParentProject].CURRENTMEMBER.PROPERTIES("Project End Iso") + "]")
}
MEMBER [Measures].[Test] AS ([Project period dates].COUNT)
SELECT
{
[Measures].[Test]
}
on 0,
NONEMPTY ([Project].[ParentProject].MEMBERS)
DIMENSION PROPERTIES [Project].[ParentProject].[Project Duration], [Project].[ParentProject].[Project Start Iso], [Project].[ParentProject].[Project End Iso]
on 1
FROM
[MyCube]
WHERE
(
[Orgunit].[Orgunit].&[448]
)
This query delivers a list of projects with its three properties and a calculated member that is based upon my calculated set. The properties show the right values, but the calculated member shows always the same: the result of the very first project it should be calculated for.
I don't really understand why, because MSDN says:
The current member changes on a hierarchy used on an axis in a query.
Therefore, the current member on other hierarchies on the same
dimension that are not used on an axis can also change; this behavior
is called 'auto-exists'.
They give examples with calculated members, but I think that should also work with calculated sets, I have read that query-based calculated sets are dynamic by nature. Maybe somebody can tell me if I understood that wrong or what else is my problem here.
The named set are only computed once within a query. That is why your calculated member always return the same value.
You just have to remove the named set from your query:
MEMBER [Measures].[Test] AS {
StrToMember("[Time].[Date].&[" + [Project].[ParentProject].CURRENTMEMBER.PROPERTIES("Project Start Iso") + "]"):
StrToMember("[Time].[Date].&[" + [Project].[ParentProject].CURRENTMEMBER.PROPERTIES("Project End Iso") + "]")
}.COUNT