Comment puis-je définir une Mesure Calculée en MDX basé sur un Attribut de Dimension?

Je voudrais créer un indicateur calculé que résume uniquement un sous-ensemble d'enregistrements dans ma table de faits basé sur un attribut de dimension.

Donné:

Dimension

  • Date
  • LedgerLineItem {La Charge, Le Paiement, De La Radiation, De La Quote-Part De Crédit,}

Mesures

  • LedgerAmount

Relations
* LedgerLineItem est un dégénéré dimension de FactLedger

Si je suis en panne LedgerAmount par LedgerLineItem.Type, je peux facilement voir combien est facturé, payés, de crédit, etc, mais quand je ne le décomposer par LedgerLineItem.De Type I ne peut pas facilement ajouter le crédit, payé, crédit, etc ... dans un tableau croisé dynamique. Je voudrais créer des mesures calculées somme seul type spécifique (ou plusieurs) types de livre des faits.

Un exemple de la sortie souhaitée serait:

| Year  | Charged | Total Paid | Amount - Ledger |
| 2008  | $1000   | $600       | -$400           |
| 2009  | $2000   | $1500      | -$500           |
| Total | $3000   | $2100      | -$900           |

J'ai essayé de créer l'indicateur calculé un couple de façons et de chacun, dans certaines circonstances, mais pas dans d'autres. Maintenant avant que quelqu'un dit cela, dans l'ETL, je l'ai déjà fait dans d'ETL et il fonctionne très bien. Ce que j'essaie de faire dans le cadre de l'apprentissage de la compréhension MDX mieux, c'est de comprendre comment dupliquer ce que j'ai fait dans l'ETL dans MDX comme jusqu'à présent, j'en suis incapable.

Voici deux tentatives que j'ai faites et les problèmes avec eux.
Cela fonctionne uniquement lorsque le livre est de type dans le tableau croisé dynamique. Il renvoie le montant correct de le grand livre des entrées (bien que dans ce cas, il est identique à la somme de [montant grand livre] mais lorsque j'essaie de supprimer le type et viens d'obtenir la somme de toutes les écritures, il retourne inconnu.

CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS CASE WHEN ([Ledger].[Type].currentMember = [Ledger].[Type].&[Credit]) 
OR ([Ledger].[Type].currentMember = [Ledger].[Type].&[Paid])
OR ([Ledger].[Type].currentMember = [Ledger].[Type].&[Held Money: Copay])
THEN [Measures].[Amount - ledger] 
ELSE 0
END 
, FORMAT_STRING = "Currency"
, VISIBLE = 1 
, ASSOCIATED_MEASURE_GROUP = 'Ledger'  ; 

Cela fonctionne uniquement lorsque le livre n'est pas de type dans le tableau croisé dynamique. Elle renvoie toujours le montant du paiement total, ce qui est incorrect lorsque je suis découpage par type que je voudrais seulement s'attendre à voir le crédit partie en vertu de crédit, la partie payée, sous payés, $0, en vertu de la charge, etc.

CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS sum({([Ledger].[Type].&[Credit]), ([Ledger].[Type].&[Paid])
, ([Ledger].[Type].&[Held Money: Copay])}
,  [Measures].[Amount - Ledger])
, FORMAT_STRING = "Currency"
, VISIBLE = 1 
, ASSOCIATED_MEASURE_GROUP = 'Ledger'  ;  

Est-il un moyen de faire revenir les numéros appropriés, indépendamment de si Livre.Le Type est inclus dans mon tableau croisé dynamique ou pas?

OriginalL'auteur Shane Delmore | 2010-04-16