【问题标题】:SSAS MDX calculationSSAS MDX 计算
【发布时间】:2018-12-28 15:13:55
【问题描述】:

我需要一个计算量度(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    



   
计算百分比的公式:
18/28*100 =64.28% 
10/28*100 =35.71%   

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

【问题讨论】:

  • 你的问题是什么?
  • 我需要所需输出的计算表达式
  • 我尝试了下面的表达式,但没有得到想要的输出。如果我遗漏了什么,请告诉我,我想用汽车总数计算该组的年龄百分比.. ( [ DimCar].[Car], [DimAge].[Age], [Measure].[Count])/ sum([DimCar].[Car].[All].children), ([DimAge].[Age]. [全部], [测量值].[计数])}*100

标签: ssas mdx


【解决方案1】:

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%

我添加了“模型”维度,而不是“年龄”属性。 下面的代码得到了预期的准确输出。

enter image description here

【讨论】:

  • 欢迎来到 Pinku 并感谢您的回答!请尝试使用代码格式来评论代码,并仅链接非文本结果的图像 - 这会使您的评论更有用且更易于阅读。
  • 我有另一个相关的问题,但不确定我是否可以在这里提问或创建一个新问题..
  • 我想要命名集的 MDX(Query) 表达式或以下 tsql Tsql 的计算度量:当 [product].[Name] in (car1,car2,car3,car4,car5) 然后 [Measure]。 [Factcount] =0 ELSE [Measure].[Factcount] =0 我在 MDX IIF 下尝试过 ({[product].[Name].&[car1],[product].[Name].&[car2], [product] ].[名称].&[car3],[product].[Name].&[car4], [product].[Name].&[car5]},[Measure].[Factcount] =0,[Measure ].[Factcount] =1)
【解决方案2】:

我的理解是,对于一个特定的汽车示例本田,你想除以本田的总和,而不管他们的年龄。在本例中为 28。因此对于 Age:six Honda,您使用 10/28。至于奔驰,因为所有奔驰都是年龄: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]

【讨论】:

  • 非常感谢它的工作,它产生了带有百分比的预期输出......我想限制输出中的百分比输出小数..
  • ex:90.6777777% 到 90.67%
  • @Kusu 不客气,编辑了地址四舍五入的答案。您可以考虑将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
相关资源
最近更新 更多