2017-09-08 8 views
1

20 ans SQL pro, nouveau sur MDX.Filtres multiples MDX

Essayer de créer une mesure pour obtenir des ventes pour les produits 30, 60, 90 jours etc. après le lancement, mais je veux exclure les périodes incomplètes. Ici serait le sql:

select ProductName, sum(sales) '60DaySales' 
from dimProduct p join factSales s on p.productkey = s.productkey 
    join dimCalendar c on s.orderDateKey = c.CalendarKey 
    where datediff(dd,p.LaunchDate,c.Date) between 31 and 62 
    and exists (select 1 from sales etc... where date >= 62 days) 

Fondamentalement, je veux seulement montrer « 60DaySales » pour les produits qui ont également des ventes au-delà de 62 jours.

Je possède ce MDX qui me fait la période de temps:

sum(
    filter(
    [Sales].[Days Since Launch].members 
    ,sales.[Days Since Launch].membervalue > 30 AND 
     sales.[Days Since Launch].membervalue < 63 
) 
,[Measures].[SalesBase] 
) 

mais je ne suis pas sûr de savoir comment exclure des éléments sans ventes au-delà de 62 jours. J'ai essayé quelques combinaisons de iif (existe ..) et non-vide mais pas de chance ...

Répondre

0

J'ajouterais des colonnes supplémentaires plutôt que des mesures calculées. J'ai eu des tâches similaires (ventes pour 30,60,90 jours, mais à partir de la première date de vente du client). La meilleure façon est d'ajouter des colonnes à votre table de vente mesure:

sales30 = iif(dateadd(day,30,p.LaunchDate) >= c.Date, sales, null), 
sales60 = iif(dateadd(day,60,p.LaunchDate) >= c.Date, sales, null), 
sales90 = iif(dateadd(day,90,p.LaunchDate) >= c.Date, sales, null) 

tâches telles que les ventes de 30 jours par chaque produit est faisable via MDX, mais ils sont des tueurs de performance pour les grandes dimensions. SQL Server le fait mieux en raison de sa nature concurrente. Pendant ce temps, MDX n'est pas bon pour de gros calculs comme ceux-ci. Donc, je ne fournis même pas le code.

+0

Merci pour la perspicacité, je crois que je vais le faire. J'ai pensé à le faire de cette façon auparavant, mais je pensais que c'était un peu faux parce que je ne fais que commencer avec MDX, mais je suppose que cela n'a pas de sens de rendre les choses plus difficiles qu'elles ne devraient l'être. – Ttro