MDX: dimensioni calcolate?
-
05-07-2019 - |
Domanda
Non so se sia possibile o meno, o se la mia conoscenza limitata di MDX mi sta spingendo nella direzione sbagliata ...
Il cubo con cui ho a che fare ha due dimensioni diverse per le date, [Date Dichiarazione]
e [Date Premium]
. Più avanti nella gerarchia di ciascuno assomiglia a questo:
[Statement Dates].[Statement Year].[2008]
[Payment Dates].[Payment Year].[2008]
Per la logica aziendale che sto implementando, devo fare qualcosa del tipo:
select
({ [Measures].[Commission] }) on columns,
({[Products].[Product Category]}) on rows
from [Cube]
where
(
IIF( [Products].[Product Category].CurrentMember.Name = "Some Category",
[Statement Dates].[Statement Year].[2008],
[Payment Dates].[Payment Year].[2008] )
)
Quindi ne ho bisogno per discriminare quale dimensione utilizzare per filtrare l'anno in base alla categoria di prodotto utilizzata.
Questo analizza ok e la query viene eseguita, ma i numeri sembrano suggerire che l'istruzione IIF
restituisce sempre false.
Soluzione
Poiché la clausola WHERE viene valutata per prima, la funzione .CurrentMember nell'IIF vedrà solo "Tutte le categorie di prodotti". Nel qual caso il [Prodotti]. [Categoria prodotto] .CurrentMember.Name non sarà mai uguale a " Some Category " poiché l'unica categoria di prodotti nel contesto è " Tutte le categorie di prodotti " ;.
Una possibile soluzione sarebbe quella di fare un calcolo come il seguente:
WITH MEMBER Measures.Commission2 as
SUM(
{[Products].[Product Category].[Product Category].Members}
, IIF( [Products].[Product Category].CurrentMember.Name = "Some Category"
, ([Statement Dates].[Statement Year].[2008],[Measures].[Commission])
, ([Payment Dates].[Payment Year].[2008].[Measures].[Commission]) )
)
select
({ [Measures].[Commission2] }) on columns
, ({[Products].[Product Category]}) on rows
from [Cube]
Potresti anche fare un'assegnazione con ambito nello script di calcolo nel tuo cubo per fare questo genere di cose.