使用DAX根据存储在维度中的格式字符串格式化货币

时间:2014-12-10 17:00:26

标签: ssas dax ssas-tabular bism

我有来自多个国家/地区的销售事实'销售',我在该事实表中创建了一个名为'销售'[收入]

的衡量标准

我想创建一个基于国家/地区动态格式化的度量标准,因此美国销售额将为100美元,英国销售额为100英镑(如果过滤器上下文包含多个国家/地区,那么它可以省略货币符号或return blank())

我有一个国家/地区维度,我已将格式字符串添加为属性。

如何在DAX中实现这一目标?我知道的唯一选择是创建5个单独的度量[Revenue $],[Revenue£]等等,但这会在客户端工具中造成混乱。我已经看过使用FORMAT但是无法让它工作

由于

1 个答案:

答案 0 :(得分:0)

我使用查找表解决了类似的问题。 我会将我的解决方案应用到您的案例中。

创建一个名为currencycodes的表,其中包含列(符号,货币代码,ID)。它将存储每个货币代码及其符号。

确保您的销售表存储currencycodeid,该货币代码表示销售的货币。

使用以下算法为每个货币代码生成唯一ID

(((int)CurrencyCode [0])* 10000)

(((int)CurrencyCode [1])* 100)

(((int)CurrencyCode [2]))

E.x。:USD = 85 | 83 | 68 = 850000 + 8300 + 86 = 858386

我们将字符转换为ASCII码并将其设为数字​​。这允许我们使用MIN / MAX将DAX中的不同货币代码作为标量。

在您的指标中,您执行以下操作

如果

DISTINCTCOUNT(' Sales' [CurrencyCodeId])= 1,

LOOKUP(' CurrencyCodes' [Symbol],' CurrencyCodes' [Id],MIN(' Sales' [CurrencyCodeId]))& " " &安培; SUM('销售' [量]),

BLANK()

因此,在衡量标准中,我们获得了唯一的货币代码ID。 如果它们完全相同,我们使用查找函数来获取符号并将其与销售额的总和连接起来。

如果有某种方法将第一个值作为标量检索,则不需要MIN / MAX。 TOPN返回行。