SSAS MDX расчет - PullRequest
       19

SSAS MDX расчет

0 голосов
/ 28 декабря 2018

Мне нужна вычисленная мера (SSAS MD) для расчета процента значений счетчика.

Я пробовал приведенное ниже выражение, но не получил желаемого результата. Дайте мне знать, если я что-то пропустил, и я хочучтобы вычислить процентную долю возраста для группы по сумме автомобилей:

    ( [DimCar].[Car], [DimAge].[Age], [Measure].[Count])/ 
sum([DimCar].[Car].[All].children), ([DimAge].[Age].[All], [Meaures].[Count])}*100

Ниже приведены значения даты выборки в кубе:

Car     Age   Count
-----  -----  -----
Benz     1      2
Camry           37
Honda    1      18
Honda    6      10

Expected output:


Car    Age    Count Percent  TotalCount 
----- -----  ----- ------ ---------- 
Benz   1       2   100%       2   
Camry         37   100%       37    
Honda  1      18   64.28%     28    
Honda  6      10   35.71%     28    



   
Forumula для расчета процента:
18/28*100 =64.28% 
10/28*100 =35.71%   

Honda  1  18   64.28%  28    
Honda  6  10   35.71%  28 

Ответы [ 2 ]

0 голосов
/ 04 января 2019

with Member  [Measures].[Total Sales Count] 
as iif (isempty([Measures].[Sales]),NUll, sum([Model].[Modelname].[All].children ,[Measures].[Sales]))

Member [Measures].[Total Sales%]
as ([Measures].[Sales]/[Measures].[Total Sales Count]),FORMAT_STRING = "Percent"

select {[Measures].[Sales],[Measures].[Total Sales Count],[Measures].[Total Sales%]
}on 0
,non empty{[Car].[Carname].[Carname]*[Model].[Modelname].[Modelname]} on 1
from [Cube]

Output :

Car     Model     Sales	 Total Sales Count	 Total Sales%
Benz	 New Model	  2	    2	                  100.00%
Camry	 Old Model	 37	    37	                100.00%
Honda	 New Model	 18	    28	                 64.29%
Honda	 Top Model	 10	    28	                 35.71%

Вместо атрибута «Возраст» я добавил измерение «Модель».Ниже приведен код для получения точного ожидаемого результата.

введите описание изображения здесь

0 голосов
/ 28 декабря 2018

Насколько я понимаю, для конкретного автомобиля, например, Honda, вы хотите разделить на общее количество Honda независимо от их возраста.В данном случае 28. Итак, для Age: шесть Honda вы используете 10/28.Что касается Benz, так как все Benz имеют возраст: 1, вы используете 2. Используйте следующий код

 Round(
(
    ( [DimCar].[Car].currentmember, [DimAge].[Age].currentmember, [Measure].[Count])
    / 
    ([DimCar].[Car].currentmember,root([DimAge]),[Measure].[Count])
    )*100
,2)

Ниже приведен аналогичный пример для приключенческих работ

with member 
measures.t as 
(
( [Product].[Category].currentmember, [Delivery Date].[Calendar Year].currentmember, [Measures].[Internet Order Quantity])
/ 
([Product].[Category].currentmember,root([Delivery Date]),[Measures].[Internet Order Quantity])
)*100
select {[Measures].[Internet Order Quantity],measures.t} 
on columns ,

non empty
([Product].[Category].[Category],[Delivery Date].[Calendar Year].[Calendar Year])
on rows 
from [Adventure Works]

enter image description here

...