how to get total along with the detail based on this query? It is similar to this but more complex. ssas 2005 mdx get total
select
{
[Measures].[Promo sold value]
,[Measures].[Promo units]
,[Measures].[Promo baskets]
,[Measures].[Promo ATV]
,[Measures].[Promo AUT]
,[Measures].[Promo discount]
} ON COLUMNS
,
non empty
[Branch].[Branch].[Branch]
*[Branch].[Branch Code].[Branch Code]
*[Time].[Finacial year].[Finacial year]
*{
[Time].[Finacial week no].&[27]&[12]
,[Time].[Finacial week no].&[28]&[12]
,[Time].[Finacial week no].&[29]&[12]
,[Time].[Finacial week no].&[30]&[12]
,[Time].[Finacial week no].&[31]&[12]
}
*{
[Promotions].[Promotion].[a]
,[Promotions].[Promotion].[b]
}
on rows
from [Rmis]
You can get that similar to the query referenced by you:
WITH set [weeks] as
{
[Time].[Finacial week no].&[27]&[12]
,[Time].[Finacial week no].&[28]&[12]
,[Time].[Finacial week no].&[29]&[12]
,[Time].[Finacial week no].&[30]&[12]
,[Time].[Finacial week no].&[31]&[12]
}
set [promos] as
{
[Promotions].[Promotion].[a]
,[Promotions].[Promotion].[b]
}
member [Time].[Finacial week no].[Total] as
Aggregate([weeks])
member [Promotions].[Promotion].[Total] as
Aggregate([promos])
SELECT
{
[Measures].[Promo sold value]
,[Measures].[Promo units]
,[Measures].[Promo baskets]
,[Measures].[Promo ATV]
,[Measures].[Promo AUT]
,[Measures].[Promo discount]
} ON COLUMNS
,
non empty
{(
[Branch].[Branch].[All],
[Branch].[Branch Code].[All],
[Time].[Finacial year].[All],
[Time].[Finacial week no].[Total],
[Promotions].[Promotion].[Total]
)}
+
(
[Branch].[Branch].[Branch]
*[Branch].[Branch Code].[Branch Code]
*[Time].[Finacial year].[Finacial year]
*[weeks]
*[promos]
)
on rows
from [Rmis]
Depending on your dimension configuration, you may have to adapt the names of the All members.
Related
I have 1 dimension Data with 2 hierarchies: Gregorian Calendar, Planning Calendar.
[Gregorian Year] - [Gregorian Month] - [Gregorian Day]
[Planning Year] - [Planning Month] - [Planning Day]
I have 2 MDX measures:
[Planning Stock] = Sum(PeriodsToDate([Data].[Planning Calendar].[(All)]), [amount])
[Gregorian Stock] = Sum(PeriodsToDate([Data].[Gregorian Calendar].[(All)]), [amount])
How to create one measure that will recognize the hierarchy?
I wrote something like that, but it does not work :(
iif(([Data].currentmember.level is [Data].[Planning Calendar].[(All)]),
(Sum(PeriodsToDate([Data].[Planning Calendar].[(All)]), [amount])),
(Sum(PeriodsToDate([Data].[Gregorian Calendar].[(All)]), [amount]))
)
Do you have any ideas?
You can do this using the level.hierarchy. Take a look at the example.
with member
measures.t
as
axis(1).item(0).hierarchy.name
select
{
[Measures].[Internet Sales Amount],measures.t
}
on columns,
{
[Date].[Fiscal].[Month].&[2014]&[7].children
--[Date].[Calendar].[Month].&[2013]&[6].children
}
on rows
from [Adventure Works]
Result
Lets change the hierarchy
with member
measures.t
as
axis(1).item(0).hierarchy.name
select
{
[Measures].[Internet Sales Amount],measures.t
}
on columns,
{
--[Date].[Fiscal].[Month].&[2014]&[7].children
[Date].[Calendar].[Month].&[2013]&[6].children
}
on rows
from [Adventure Works]
Result
I have an MDX Query running on the SSAS cube that returns lots of object codes and the period balances for them. I was able to add multiple period balances by using a crossjoin on the rows, however I would like to add one more row with the period end balance for the last fiscal period, and can't seem to figure out a way to do it.
The initial query is
select
non empty
{
[Object Code].[Object Code Number].[Object Code Number]
*
[Object Code].[Object Code Description].[Object Code Description]
*
[Object Code Pathing 1E 1R].[1E_R1 Value].[1E_R1 Value]
*
[Object Code Pathing 1E 1R].[1E_R2 Value].[1E_R2 Value]
*
[Object Code Pathing 1E 1R].[1E_R3 Value].[1E_R3 Value]
*
[Object Code Pathing 1E 1R].[1E_R4 Value].[1E_R4 Value]
}
on rows,
{
[Measures].[Current Period Balance]
}
*
{
[Date].[Fiscal].[Fiscal Period].&[2016]&[1]:[Date].[Fiscal].[Fiscal Period].&[2016]&[7]
}
on columns
from [Finance]
and when I am trying to add one more column
select
non empty
{
[Object Code].[Object Code Number].[Object Code Number]
*
[Object Code].[Object Code Description].[Object Code Description]
*
[Object Code Pathing 1E 1R].[1E_R1 Value].[1E_R1 Value]
*
[Object Code Pathing 1E 1R].[1E_R2 Value].[1E_R2 Value]
*
[Object Code Pathing 1E 1R].[1E_R3 Value].[1E_R3 Value]
*
[Object Code Pathing 1E 1R].[1E_R4 Value].[1E_R4 Value]
}
on rows,
{
[Measures].[Balance At Period End]
*
[Date].[Fiscal].[Fiscal Period]&[2016]&[7]
},
{
[Measures].[Current Period Balance]
}
*
{
[Date].[Fiscal].[Fiscal Period].&[2016]&[1]:[Date].[Fiscal].[Fiscal Period].&[2016]&[7]
}
on columns
from [Finance]
I get the
Parser: The statement dialect could not be resolved due to ambiguity. error
and if I add it like
{
[Measures].[Current Period Balance],
[Measures].[Balance At Period End]
}
*
{
[Date].[Fiscal].[Fiscal Period].&[2016]&[1]:[Date].[Fiscal].[Fiscal Period].&[2016]&[7]
}
on columns
I get Period end Balances for all periods, and this is not needed in the report, I only need the Balance at Period End for the very last period
Here is your first piece of troublesome code:
crossjoin (
[Measures].[Current Period Balance]
,{
[Date].[Fiscal].[Fiscal Period].&[2016]&[1]
,[Date].[Fiscal].[Fiscal Period].&[2016]&[2]
,[Date].[Fiscal].[Fiscal Period].&[2016]&[3]
}
), //<<1
crossjoin(
[Measures].[Balance At Period End]
,{[Date].[Fiscal].[Fiscal Period].&[2016]&[3]}
) on columns
from [Finance]
At point 1 you have closed the first crossjoin and then put a comma - this is a syntax error.
You could try moving that brace from 1 to the end of the statement:
crossjoin (
[Measures].[Current Period Balance]
,{
[Date].[Fiscal].[Fiscal Period].&[2016]&[1]
,[Date].[Fiscal].[Fiscal Period].&[2016]&[2]
,[Date].[Fiscal].[Fiscal Period].&[2016]&[3]
}
, //<<1
crossjoin(
[Measures].[Balance At Period End]
,{[Date].[Fiscal].[Fiscal Period].&[2016]&[3]}
)
) on columns //<<now closing initial crossjoin here
from [Finance]
Ok I just tested the above via the following and it is not a valid approach:
SELECT
CrossJoin
(
[Measures].[Internet Sales Amount]
,{
[Date].[Calendar].[Date].&[20060628]
,[Date].[Calendar].[Date].&[20060629]
}
,CrossJoin
(
[Measures].[Internet Order Quantity]
,{[Date].[Calendar].[Date].&[20060629]}
)
) ON COLUMNS
,[Product].[Product Categories].[All] ON ROWS
FROM [Adventure Works];
We get the following error:
Query (2, 3) The Measures hierarchy is used more than once in the
Crossjoin function.
You could switch to the following structure, creating a set of tuples. This does run:
SELECT
{
[Measures].[Internet Sales Amount]
*
{
[Date].[Calendar].[Date].&[20060628]
,[Date].[Calendar].[Date].&[20060629]
}
,(
[Measures].[Internet Order Quantity]
,{[Date].[Calendar].[Date].&[20060629]}
)
} ON COLUMNS
,[Product].[Product Categories].[All] ON ROWS
FROM [Adventure Works];
Result:
I am using Built in time intelligence feature and I would like to calculate measures for the Full Year.
Eg if current member of date is at 2015/03/01; I want to have a calculated measure from 2015/01/01 till 2015/12/31.
CREATE MEMBER CurrentCube.[DimTime].[FY-FQ-FM DimTime Calculations].[Full Year] AS "NA" ;
(
[DimTime].[FY-FQ-FM DimTime Calculations].[Year to Date]
, [DimTime].[Fiscal Year].[Fiscal Year].Members
, [DimTime].[Date].Members
, { [Measures].[Forecasts], [Measures].[Budget] }
)
= Aggregate(
{ [DimTime].[FY-FQ-FM DimTime Calculations].[Current DimTime] }
* PeriodsToDate(
[DimTime].[FY-FQ-FM].[Fiscal Year]
, [DimTime].[FY-FQ-FM].CurrentMember
)
) ;
Thanks #whytheq and #AkshayRane for the help.
I was able to do the full year using below.
(
[DimTime].[FY-FQ-FM DimTime Calculations].[Full Year],
[DimTime].[Fiscal Year].[Fiscal Year].Members,
[DimTime].[Date].Members,
{
[Measures].[Forecasts],
[Measures].[Budget]
}
)
=
Aggregate(
{ [DimTime].[FY-FQ-FM DimTime Calculations].[Current DimTime] }
*
PeriodsToDate(
[DimTime].[FY-FQ-FM].[Fiscal Year],
(
ANCESTOR(
[DimTime].[FY-FQ-FM].CURRENTMEMBER,
[DimTime].[FY-FQ-FM].[Fiscal Year]
)
)
)
)
I'm new to MDX and I'm currently trying to filter [Measures].[Sales Invoice Line Amount] by
{
[NAV CINNOST].[DIM_Code_Cinnost].&[AAA],
[NAV CINNOST].[DIM_Code_Cinnost].&[BBB],
[NAV CINNOST].[DIM_Code_Cinnost].&[CCC]
}
I only need to filter THIS measure (Sales Invoice Line Amount). Not the others. Can you guide me how to rewrite the query?
SELECT
NON EMPTY [Customer].[Customer No].[Customer No] DIMENSION PROPERTIES
member_name, parent_unique_name ON ROWS,
{
[Measures].[Value Entry Item Ledger Entry Quantity],
[Measures].[Unit Margin],
[Measures].[Sales Invoice Line Amount]
} ON COLUMNS
FROM [QTY Margin]
WHERE (
{
[Date].[Calendar Month].&[201407]
},
{
[NAV CINNOST].[DIM_Code_Cinnost].&[AAA],
[NAV CINNOST].[DIM_Code_Cinnost].&[BBB],
[NAV CINNOST].[DIM_Code_Cinnost].&[CCC]
}
) CELL PROPERTIES value, formatted_value, fore_color, back_color
The quickest solution is using a calculated member that does the job you're looking for. Assuming you add over this dimension :
WITH
MEMBER [My Sales Invoice Line Amount] AS Sum( {[NAV CINNOST].[DIM_Code_Cinnost].&[AAA],[NAV CINNOST].[DIM_Code_Cinnost].&[BBB], [NAV CINNOST].[DIM_Code_Cinnost].&[CCC]},
[Measures].[Sales Invoice Line Amount])
SELECT
NON EMPTY [Customer].[Customer No].[Customer No] ON ROWS,
{[Measures].[Value Entry Item Ledger Entry Quantity],
[Measures].[Unit Margin],
[Measures].[My Sales Invoice Line Amount]
} ON COLUMNS
FROM
[QTY Margin]
WHERE
[Date].[Calendar Month].&[201407]
I have this MDX query
select
{
[Measures].[Sold value]
,[Measures].[Units]
,[Measures].[Sales baskets]
,[Measures].[ATV]
,[Measures].[AUT]
} on columns
, filter(
nonempty(
{[Branch].[Branch].&[5] *[Receipt No - Sales].[Receipt No].[Receipt No]}
),
[Measures].[Sold value] >= 50
) on rows
from Rmis
where [Time].[Day].&[20131218]
Which generates following result:
How can I get the total of these measures of the above result set? The total should use the aggregation defined in the cube.
with set [rows] as
filter(
nonempty(
{[Branch].[Branch].&[5] *[Receipt No - Sales].[Receipt No].[Receipt No]}
),
[Measures].[Sold value] >= 50
)
member [Receipt No - Sales].[Receipt No].[Total] as
aggregate([rows])
select
{
[Measures].[Sold value]
,[Measures].[Units]
,[Measures].[Sales baskets]
,[Measures].[ATV]
,[Measures].[AUT]
} on columns
,
{ ([Branch].[Branch].&[5], [Receipt No - Sales].[Receipt No].[Total]) }
+
[rows]
on rows
from Rmis
where [Time].[Day].&[20131218]