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

Ssas 使用DAX根据存储在维度中的格式字符串格式化货币,ssas,dax,ssas-tabular,bism,Ssas,Dax,Ssas Tabular,Bism,我有一个来自多个国家/地区的销售事实“sales”,我在该事实表中创建了一个称为“sales”[收入]的度量值 我想创建一个基于国家/地区动态格式化的度量值,这样美国销售额将格式化为100美元,英国销售额将格式化为100英镑(如果筛选上下文包括多个国家/地区,则可以省略货币符号或返回空白() 我有一个国家维度,其中我添加了格式字符串作为属性 如何在DAX中实现这一点?我知道唯一可行的方法是创建5个单独的度量值[Revenue$]、[Revenue]等,但这会在客户端工具中造成混乱。我已经考虑过使

我有一个来自多个国家/地区的销售事实“sales”,我在该事实表中创建了一个称为“sales”[收入]的度量值

我想创建一个基于国家/地区动态格式化的度量值,这样美国销售额将格式化为100美元,英国销售额将格式化为100英镑(如果筛选上下文包括多个国家/地区,则可以省略货币符号或返回空白()

我有一个国家维度,其中我添加了格式字符串作为属性

如何在DAX中实现这一点?我知道唯一可行的方法是创建5个单独的度量值[Revenue$]、[Revenue]等,但这会在客户端工具中造成混乱。我已经考虑过使用格式,但还不能很好地使用它


谢谢

我通过使用查找表解决了一个类似的问题。 我会把我的解决办法应用到你的案子上

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

确保您的sales表存储currencycodeid,该ID指示进行销售时使用的货币

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

((int)货币代码[0])*10000)

((国际)货币代码[1])*100)

((int)货币代码[2]))

E.x.:美元=85 | 83 | 68=850000+8300+86=858386

我们正在将字符转换为ASCII码,并使其成为一个数字。这允许我们使用MIN/MAX来获取DAX中的不同货币代码作为标量

在您的度量范围内,您可以执行以下操作

如果

(

DISTINCTCOUNT('Sales'[CurrencyCodeId])=1

查找('CurrencyCodes'[Symbol]、'CurrencyCodes'[Id]、最小('Sales'[CurrencyCodeId])和“&SUM('Sales'[Amount])

空白()

)

因此,在度量中,我们得到了唯一货币代码ID的#。 如果它们都相同,我们使用lookup函数获取符号,并将其与销售额的总和连接起来

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