原创: 晴岚 2023-05-05 18:02
业务痛点 ① 关于货币换算,很多企业习惯于使用每个国家的货币符号展示该国家的币种,而不是单纯以某个单一国家的标准作为参照, 可以更灵活的展示每个国家的币种; ② 采用FORMAT格式化后往往会转换为文本字符串,这可能不适用于需要数值的视觉对象,如图表; ③用户希望基于格式化后的度量,在不改变原有的数据类型的情况下,仍可以继续参与到其他运算当中; 应用场景 需求:如何在 Power BI 中,动态的根据不同的国家,进行对应国家币种的汇率换算,并显示不同的币种单位。 解决办法:采用度量值的动态格式字符串,可以借助单独的 DAX 表达式有条件地应用格式字符串,从而决定度量值在视觉对象中的显示方式。且不会强制更改为字符串数据类型。会根据上下文环境对度量值应用不同的格式字符串。 案例介绍 请观察下方表格截图中,汇率换算前后的区别 其中一个度量采用通用的货币符号,另外一个度量经过汇率换算后,采用当前国家的货币符号。 基于两种不同的货币符号的情况 通用格式的实现 该场景的操作较为简单,通过格式设置即可实现,选中该度量值,按图中标出的操作顺序进行点击即可一次性应用。 各国家标准格式的实现 可以采用下面3种方式的任一一种实现: 预览功能--度量值的动态格式字符串功能 Format函数 计算组 今天主要讨论第一种方法,使用Power BI全新推出的预览功能--度量值的动态格式字符串进行实现。 一、准备工作 ① 启用功能 选项→预览功能→度量值的动态格式字符串 ② 需要有一个“国家—国家货币格式”的匹配表,如下表所示:Country、Currency、Format Strings(国家/地区的货币/格式字符串) ③ 需要有一个“年汇率”的记录表,如下表所示:Yearly Average Exchange Rates(by国家by年的汇率表) 二、概念模型 三、书写度量 度量1:基础度量,计算销售额 Sales Amount = SUM(Sales[Sales Amount]) 度量2:计算年均汇率:以美元作为标准,汇率为1,其他国家/地区按各自的年均汇率 年均值汇率= IF ( ISBLANK ( SELECTEDVALUE ( 'Country Currency Format Strings'[Country] ) ) || SELECTEDVALUE ( 'Country Currency Format Strings'[Country] ) = "United States", 1, AVERAGE ( 'Yearly Average Exchange Rates'[Yearly Average Exchange Rate] ) ) 度量3:对基础度量进行汇率换算 Converted Sales Amount = SUMX('Date', CALCULATE( [Sales Amount] * [Exchange Rate (Yearly Avg)])) 度量4:动态格式,应用于度量3的格式选项中 //选择国家币种格式,否则默认展示美元符号 SELECTEDVALUE ( 'Country Currency Format Strings'[Format], "\$#,0.00;(\$#,0.00);\$#,0.00" ) 前3个度量的含义比较容易理解,而动态格式化字符的实现主要体现在度量4的应用上,将度量4按下面步骤配置即可。其配置方式按如下步骤进行: ① 选中度量3,并在度量工具中找到动态: ③ 将度量4写入格式选项中,则度量3的货币单位会发生变化。 ④ 至此,货币的动态格式配置完成。相关维度字段既可以作为切片器使用,也可作为图表的轴使用。 其他操作 一、切回静态格式 因为该切回静态格式的操作不可撤销,所以会弹出对话框提示是否继续。动态格式和静态格式之间可以随意设置。 二、默认生成的隐藏文件夹 三、作为数值型度量继续参与其他运算 经过格式化后的度量,仍可以作为数值参与其他计算,而不是文本。 注意事项 ① 视觉对象的有些格式设置选项可能会影响格式字符串的显示方式。如果视觉对象中的格式设置显示不正确,请转到视觉对象“格式”选项,搜索“显示单位”并将其从“自动”更改为“无”; ② 可以通过使用度量值的名称直接在度量值的动态格式字符串中引用该度量值,也可以使用 SELECTEDMEASURE() 间接引用; ③ 度量值的动态格式字符串仅适用于模型度量值。可添加到实时连接报表的报表度量值不能具有度量值的动态格式字符串。 方式建议