无法通过某些值MDX查询正确乘法测量成员

时间:2014-09-20 08:38:18

标签: mdx

我的查询显示了某些商品的价格:

member Measures.[Price] as ([Goods].[Good].Properties( "Base price" )),
format_string = "0.000"
member Measures.[Control] as [Goods].[Good].Properties( "IsControlled" )
select 
{(Measures.[Price]),Measures.[Control]} on columns, ...//select goods on rows.

结果如下:

Price  Controll

172,19 not
193,54 not
172,57 not
326,49 not
438,77 not
139,25 not
72,11  controlled
165,76 controlled
233,32 not
655,05 not
607,58 not
201,92 not
126,2  not

现在我写了第二个查询,由于某种原因工作不正确,我不知道如何解决它 这是查询:

member Measures.[Control] as [Goods].[Good].Properties( "IsControlled" )
member Measures.[Price] as 
CASE Measures.[Control] 
WHEN 'Controlled' THEN [Goods].[Good].Properties( "Base price" )
ELSE ([Goods].[Good].Properties( "Base price" )*0.0095)
END
select {Measures.[Price]}

问题在于,由5个数字组成的价格乘以正确,但如果价格由4个数字组成,则乘以不正确。 结果:

 Price
 163.5805
 183.863
 163.9415
 310.1655
 416.8315
 132.2875
 72,11
 165,76
 221.654
 622.2975
 577.201
 191.824
 11.989

最后价格应该是119.89而不是11.989。我需要获得95%的基本价格。怎么做到这一点?

2 个答案:

答案 0 :(得分:0)

所以,我试图以不同的方式进行此查询并找到一些解决方案,这在我的情况下有所帮助。问题在点后面有不同的位数("。")。例如,172.19的95%是172.19 * 0.0095,但126%的95%是126.2 * 0.095。不知道为什么,但在我的MDX查询中,它以这种方式计算。我正在使用Visual Basic函数来实现此解决方案。这是我的解决方案:(点后可以只有1位数或2位数)

member Measures.[FixedPrice] as [Goods].[Good].Properties( "Base price" )
member Measures.[Digits] as vba!Len(Right(Measures.[FixedPrice], Len(Measures.[FixedPrice]) - InStr(1, Measures.[FixedPrice], ",")))
member Measures.[Control] as [Goods].[Good].Properties( "IsControlled" )
member Measures.[Price] as 
iif(Measures.[Control] <> 'Controlled' and Measures.[Digits]<2 ,Measures.[FixedPrice]*0.095,
iif(Measures.[Control] <> 'Controlled' and Measures.[Digits]>1,Measures.[FixedPrice]*0.0095,Measures.[FixedPrice]))
, format_string = '#,#0.00'
select {Measures.[Цена]}

结果我所有商品都有正确的95%价格。所有的时间都在使用SQL和T-SQL。而且它已经让人感觉MDX的多重运作。

答案 1 :(得分:0)

在处理非字符串属性时,您可能希望使用TYPED

WITH member Measures.[Control] as [Goods].[Good].Properties( "IsControlled" )
member Measures.[Price] as 
CASE Measures.[Control] 
WHEN 'Controlled' THEN [Goods].[Good].Properties( "Base price", TYPED )
ELSE ([Goods].[Good].Properties( "Base price", TYPED )*0.0095)
END
select {Measures.[Price]} ON COLUMNS
FROM [your cube]

如果您不使用TYPEDProperties会返回转换为字符串的结果。如果使用TYPED,则会获得关系数据原始列中的数据类型的数据。有关详细信息,请参阅the documentation for Properties