Power BI 微课堂 | 第84课:为度量值创建动态格式字符串
今天,我们继续学习:为度量值创建动态格式字符串。了解如何借助 DAX 表达式和示例模型,实现根据国家/地区自动切换销售额的货币显示格式,从而提升多地区报表的可读性。
动态格式字符串的效用
通过对度量值使用动态格式字符串,你可以通过单独的 DAX 公式有条件地应用格式字符串,从而确定度量值在视觉对象中的显示方式。
动态格式字符串克服了使用 FORMAT 函数的固有缺点。也就是说,使用 FORMAT 时,即使是数值数据类型也会作为字符串返回,这可能不适用于需要数值的视觉对象,如图表。
使用动态格式字符串时,度量值会保留其数据类型,并且不会强制更改为字符串数据类型。 这会根据上下文对度量值应用不同的格式字符串。
动态格式字符串也可以与计算组一起使用。与计算组一起使用的相同 DAX 模式也可以在度量值的动态格式字符串中使用,但范围仅限于单个度量值,而不是模型中的所有度量值。
创建动态格式字符串
要创建动态格式字符串,得在“数据”窗格中,选择要为其指定动态格式字符串的度量值。
在“度量值工具”功能区“格式设置”部分>“格式”列表框中,选择“动态”。DAX 公式栏的左侧将出现一个已选中“格式”的新列表框。
通过此下拉列表可在静态度量值 DAX 表达式和动态格式字符串 DAX 表达式之间切换。无论在切换到“动态”之前使用的静态格式字符串是什么,都会在 DAX 公式栏中预填充为字符串。
使用 DAX 表达式替代字符串,以生成用于度量值的正确格式字符串。 例如,以下表达式将从“国家/地区货币格式字符串”表中查找所需的货币格式字符串:
接下来,验证动态格式字符串在可视化中是否有效。
若要删除动态格式字符串并返回到使用静态格式字符串,请在“格式设置”部分“格式”列表框中,选择其他格式选项。
由于此操作无法撤消,因此将出现一个对话框,询问你是否要继续。若要再次返回到使用动态格式字符串,必须重新输入 DAX 表达式。
结合示例了解实践效果
了解新功能的最佳方式是自行尝试,可以使用 DAX 示例模型提供的示例 Adventure Works 2020 PBIX 文件来执行此操作。
在此示例中,Adventure Works 是一家自行车制造商,向全球市场销售自行车及配件。使用示例模型可以添加货币换算,按年份显示换算后的销售额。如需跟随操作,请通过页面右侧按钮下载。
下载后,在 Power BI Desktop 中打开此文件。
》创建新表
示例模型不包含创建和使用动态格式字符串所需的所有数据。若要开始,首先需要添加两个表。在“主页”功能区上,选择“输入数据”。
在“创建表”对话框中,输入下方表名称,然后复制并粘贴下表:
表名称:Country Currency Format Strings
验证表是否正确,然后单击“加载”。
然后,对以下表重复上述步骤。表名称:Yearly Average Exchange Rates
》创建“年份”列
现有的日期表中需要新增“年份”列。在“模型”视图中,右键单击“日期”表,然后选择“新建列”。
在 DAX 公式栏中输入以下表达式:Year = YEAR([Date]),然后按 Enter。
》创建关系
需要在刚创建的新“年平均汇率”表与“国家/地区货币格式字符串”表之间,以及“年平均汇率”表与现有“日期”表之间建立关系。
如果已启用自动检测关系,则“国家/地区”列上的“国家/地区货币格式字符串”与“年平均汇率”之间的关系可能已创建完毕。
如果未创建,请创建此关系:
表 1:年平均汇率
表 1 列:国家/地区
基数:多对一
表 2:国家货币格式字符串
表 2 列:国家
激活此关系:是
交叉筛选器方向:单向
关系应如下所示:
如果已启用自动检测关系,则“国家/地区”列上的“国家/地区货币格式字符串”与“销售区域”之间的关系可能已创建完毕。但是,这种关系对于模型来说并不正确。
因此,需要在“模型”视图中,删除此关系。改为在“年份”列上创建“年平均汇率”与“日期”之间的关系。
表 1:年平均汇率
表 1 列:年份
基数:多对多
表 2:日期
表 2 列:年份
激活此关系:是
交叉过滤方向:单向过滤(“年平均汇率”过滤“日期”)
关系应如下所示:
保存模型。
》创建度量值组表
度量值组通过将不同的度量值放在一个表中,来帮助组织这些度量值。
在“主页”功能区中,选择“输入数据”。在“创建表”对话框中,将值留空。将表命名为“Sales measures”,然后单击“加载”。此表包含你的新度量值。
》创建度量值
在“数据”窗格中,展开并右键单击“Sales measures”表,然后选择“新建度量值”。 在 DAX 公式栏中输入以下 DAX 表达式,然后按 Enter:
Sales Amount = SUM(Sales[Sales Amount])
在“Sales measures”表中,右键单击“列1”,然后选择“在报表视图中隐藏”。
此操作会将“Sales measures”更改为度量组,该度量组现在显示在“数据”窗格的顶部,并带有一个度量组图标,如下所示:
现在,就可以创建度量值来计算汇率。右键单击“Sales measures”,选择“新建度量值”,在 DAX 公式栏中输入以下表达式,然后按 Enter:
Exchange Rate (Yearly Avg) =
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] )
)
现在,创建另一个度量值,将“销售额”度量值转换为其他货币。右键单击“Sales measures”,选择“新建度量值”,在 DAX 公式栏中输入以下表达式,然后按 Enter:
Converted Sales Amount =
SUMX('Date',
CALCULATE( [Sales Amount] * [Exchange Rate (Yearly Avg)]))
Sales measures 度量值组现在应如下所示:
》创建报表
转到“报表视图”,并向报表添加新的空白页面。
将折线图视觉对象添加到新报表页。在添加度量值的动态格式字符串之前,可以使用此视觉对象查看度量值。
在“数据”窗格 “Sales measures”中,选择“换算后的销售额”。 接着,不单击其他任何位置,在“日期”表中选择“年份”。
复制并粘贴视觉对象,此时有两个折线图视觉对象。将第二个折线图视觉对象更改为表格视觉对象,然后将其移到折线图下方,如下所示:
向报表页中添加切片器视觉对象。在“格式”功能区中,将“国家/地区货币格式字符串”表中的“国家/地区”添加到切片器。
重新排列视觉对象,使其布局更合理,如下所示:
虽然不是必须的,你可以更改视觉属性以改善报表效果:
切片器
切片器设置:单选
大小和样式,填充:10 像素,所有边缘
大小和样式,视觉对象边框:浅灰色,10 像素圆角
切片器设置,样式:图块
切片器标题:禁用
值,边框:左,#333333,6 行宽
表
大小和样式,填充:10 像素,所有边缘
大小和样式,视觉对象边框:浅灰色,10 像素圆角
网格,水平网格线:白色,2 宽度
网格,垂直网格线:白色,2 宽度
网格,边框:白色
网格,选项:2 行填充
值,值:背景色 #F6F4F4
值,值:替代背景色 #F6F4F4
列标题,文本:粗体,文本颜色白色,背景色 #0D6ABF
折线图
大小和样式,填充:10 像素,所有边缘
大小和样式,视觉边框:浅灰色,10像素圆角
标题,副标题:启用
Y 轴,标题:禁用
Y 轴:禁用
标记:启用
数据标签:启用
数据标签,值:粗体,蓝色
画布(可选)
画布背景:浅灰色,85% 透明度
借助这些视觉对象属性,可以获得视觉效果更佳的报表页,如下所示:
创建动态格式字符串
在切片器中选择不同的“国家/地区”名称时,会在视觉对象中显示“换算后的销售额”度量值结果,但对于该国家/地区,格式不正确。
在“数据”窗格 “销售额度量值”中,选择“换算后的销售额”。
在“度量工具”功能区中,单击“格式”下拉列表,然后选择“动态”。
公式栏左侧的下拉列表框现在应显示“格式”,且公式栏中的公式应具有格式字符串。将格式字符串替换为以下 DAX 表达式,然后按 Enter:
SELECTEDVALUE (
'Country Currency Format Strings'[Format],
"\$#,0.00;(\$#,0.00);\$#,0.00")
在切片器中选择不同的国家/地区。 表和折线图视觉对象现在应以正确的格式显示该国家或地区换算后的货币金额。 尝试在切片器中选择其他国家/地区以查看视觉对象的变化。
保存模型。
注意事项和疑难解答
1️⃣ 视觉对象的有些格式设置选项可能会影响格式字符串的显示方式。如果视觉对象中的格式设置显示不正确,请转到视觉对象“格式”选项,搜索“显示单位”并将其从“自动”更改为“无”。
2️⃣ 可通过使用度量值的名称(如 [Measure A])直接在度量值的动态格式字符串中引用该度量值,也可使用 SELECTEDMEASURE() 间接引用。
3️⃣ 度量值的动态格式字符串仅适用于模型度量值。可添加到实时连接报表的报表度量值不能具有度量值的动态格式字符串。
4️⃣ 使用适用于 Analysis Services 的 DirectQuery 时,如果在实时连接报表上单击“对此模型进行更改”,会将连接转移到 Analysis Services 上的 DirectQuery。通常,可以更改远程模型度量值的格式字符串。
5️⃣ 使用度量值的动态格式字符串:
已定义动态格式字符串的远程模型度量值无法对静态格式字符串或其他动态格式字符串 DAX 表达式进行格式字符串更改。
不能将远程模型度量值从静态格式字符串更改为在本地模型中定义的动态格式字符串 DAX 表达式。
本地模型度量值无法使用度量值的动态格式字符串。
以上就是关于「为度量值创建动态格式字符串」的全部内容。感谢您的耐心阅读,更多 Power BI 学习资源,请持续关注优阅达大数据生态。