首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多到多单位转换SSAS多维

多到多单位转换SSAS多维
EN

Stack Overflow用户
提问于 2016-12-21 20:35:37
回答 2查看 295关注 0票数 0

我有一个销售事实表,销售可以发生在不同的重量单位: ST,MT,lb,kg等。用户喜欢在不同的测量单位(UOM),取决于他们通常居住的地方。我希望他们能够选择一个UOM,它将显示UOM中的所有数量。同样,你也会对许多货币进行转换。但是,它与货币略有不同,因为在这两个事实表之间没有日期表。

总之,我将如何设计UOM维数、事实转换率表、它们与事实销售表之间的关系。最后,我如何把这个放在立方体里。我是否可以用一个度量表达式来处理多到多的关系,或者我需要进行某种计算?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-01 20:34:41

终于弄明白了。抱歉我没有截图。我目前还没有这个项目。如果需要的话,让我知道,我可以稍后再加。

您必须与两个UOM维度表、一个from和一个到UOM维度表之间的uom转换表创建多到多个关系,并为每个方向的转换速率输入一个条目。当UOM相同时,在事实转换表中包含一个速率为1的转换,就像ST到ST速率是1一样。

关系外键是这样的。

  1. fact_sales <- 2. dim_from_UOM -> 3. fact_OUM_conversion <- 4. dim_to_uom

创建之后,然后在“关系使用”选项卡中设置“多到多”,然后使用度量值表达式将转换率乘以。

类似设置为典型的多到多货币换算,如下面的youtube视频所示,但dim_from_uom取代了您的日期表。https://www.youtube.com/watch?v=gMCIu5Nh93M

票数 0
EN

Stack Overflow用户

发布于 2016-12-21 21:59:50

如果有帮助,下面是我的转换函数的简化版本。这里只显示质量,但技术很容易扩展。

简单的技巧是将所有的转换因子存储在基本单位中,那么数学就很简单。您可能会注意到,我存储为varchar(),然后执行重铸。这样,精度是动态的。

代码语言:javascript
复制
Declare @Conversion table (MapType varchar(50),ConvUnit varchar(50),ConvFactor varchar(50))
Insert Into @Conversion values
('Mass','tonnes (metric)','1000'),
('Mass','tons (US)'      ,'907.18474'),
('Mass','tons (UK)'      ,'1016.0469088'),
('Mass','stones'         ,'6.35029318'),
('Mass','slugs(g-pounds)','14.593903'),
('Mass','Solar masses'   ,'1.989e30'),
('Mass','pounds (troy)'  ,'0.3732417216'),
('Mass','pounds'         ,'0.45359237'),
('Mass','picograms'      ,'1e-15'),
('Mass','ounces'         ,'0.028349523'),
('Mass','ounces (troy)'  ,'0.0311034768'),
('Mass','nanograms'      ,'1e-12'),
('Mass','milligrams'     ,'1e-6'),
('Mass','micrograms'     ,'1e-9'),
('Mass','megatonnes'     ,'1e9'),
('Mass','kilotonnes'     ,'1e6'),
('Mass','kilograms'      ,'1'),               --- << Base
('Mass','hundredweights' ,'50.80234544'),
('Mass','hectograms'     ,'0.1'),
('Mass','grams'          ,'1e-3'),
('Mass','grains'         ,'0.00006479891'),
('Mass','femtograms'     ,'1e-18'),
('Mass','Earth masses'   ,'5.980e24'),
('Mass','decagrams'      ,'0.01'),
('Mass','cental'         ,'45.359237'),
('Mass','carats (metric)','0.0002')

,例如,一个转换

代码语言:javascript
复制
Declare @Value float      = 1
Declare @From  varchar(50)= 'tonnes (metric)'
Declare @To    varchar(50)= 'pounds'

-- For just the single conversion
Select @Value * Max(IIF(ConvUnit=@From,cast(ConvFactor as float),null))  / Max(IIF(ConvUnit=@To,cast(ConvFactor as float),null)) 
      ,@To
 From  @Conversion 
 Where ConvUnit in(@From,@To)

返回

代码语言:javascript
复制
2204.62262184878    pounds

现在,如果您想要对值进行所有转换

代码语言:javascript
复制
-- To Convert ALL
Select Concat(@Value,' ',@From)
      ,@Value * (Select cast(ConvFactor as float) from @Conversion where ConvUnit=@From) / cast(ConvFactor as float)
      ,ConvUnit
 From  @Conversion 

返回

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41271488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档