我的查询显示了某些商品的价格:
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%的基本价格。怎么做到这一点?
答案 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]
如果您不使用TYPED
,Properties
会返回转换为字符串的结果。如果使用TYPED
,则会获得关系数据原始列中的数据类型的数据。有关详细信息,请参阅the documentation for Properties
。