为度量值创建动态格式字符串

适用范围:Power BI Desktop Power BI 服务

通过使用 度量值的动态格式字符串,可以控制度量值在视觉对象中的显示方式。 有条件地使用单独的数据分析表达式(DAX)公式来应用格式字符串。

动态格式字符串解决了 FORMAT 函数的问题。 FORMAT 将所有结果作为字符串返回,即使是数值数据类型。 此行为可能会导致图表等需要数值的视觉对象出现问题。

使用动态格式字符串时,度量值会保留其数据类型,并且不会更改为字符串数据类型。 根据上下文,将不同的格式字符串应用于度量值。

还可以将动态格式字符串与计算组一起使用。 使用于计算组的相同 DAX 模式也适用于度量值的动态格式字符串。 但是,范围仅限于单个度量值,而不是模型中的所有度量值。 有关详细信息,请参阅 计算组 - 动态格式字符串

创建动态格式字符串

  1. 在“数据”窗格中,选择要为其指定动态格式字符串的度量值。
  2. “度量工具”功能区中的“格式”部分下,在“格式”列表框中选择“动态”。 一个已选择 “格式” 的新下拉列表显示在 DAX 编辑栏的左侧。 此下拉列表介绍如何在静态度量值 DAX 表达式和动态格式字符串 DAX 表达式之间切换。 切换到 Dynamic 之前使用的静态格式字符串会被预填充为 DAX 公式栏中的字符串。

使用文本框的值部分

处理报表中的文本框时,可以使用动态格式显示度量值。 若要使用文本框的值部分,

  1. 选择报表中的文本框。

  2. “格式 ”窗格中的“ ”下,选择字段按钮(fx 图标)。

  3. 选择应用动态格式字符串的度量值。

  4. 文本框使用动态格式字符串显示度量值。

    有关文本框和动态内容的详细信息,请参阅 向 Power BI 报表添加文本框和形状

    “格式”下拉列表的屏幕截图。

  5. 使用 DAX 表达式替代字符串,以生成用于度量值的正确格式字符串。 例如,以下表达式从 国家/地区货币格式字符串 表中查找所需的货币格式字符串:

    动态格式度量值表达式的屏幕截图。

  6. 验证动态格式字符串在可视化中是否有效。

    若要删除动态格式字符串并返回到使用静态格式字符串,请在“格式”部分>的“格式”下拉列表中选择其他格式选项。 由于此操作无法撤消,因此将出现一个对话框,询问你是否要继续。 若要再次返回到使用动态格式字符串,必须重新输入 DAX 表达式。

    格式更改警告的屏幕截图。

示例

了解新功能的最佳方式是自行尝试。 可以使用 DAX 示例模型提供的示例 Adventure Works 2020 PBIX 文件来执行此操作。 使用示例模型可以添加货币换算,按年份显示换算后的销售额。 下载后,在 Power BI Desktop 中打开文件。

创建新表

示例模型不包含创建和使用动态格式字符串所需的所有数据。 若要开始,需要添加两个表。

  1. 在“主页”功能区上,选择“输入数据”。

  2. 在“创建表”对话框中,在“名称”字段中输入国家/地区货币格式字符串,然后复制并粘贴下表:

    国家/地区 货币 格式
    澳大利亚 AU$#,0.00
    加拿大 C$#,0.00
    丹麦 克朗 kr#,0
    欧元区 欧元 € #,0.00
    日本 日元 ¥ #,0
    瑞典 克朗 kr#,0
    瑞士 法郎 CHF#,0.00
    英国 £ #,0
    美国 US$#,0.00
  3. 验证表是否正确,然后选择“ 加载”。

    “创建表”对话框的屏幕截图。

  4. 对以下表重复上述步骤:

    表名称:年平均汇率

    国家/地区 货币 年份 年平均汇率
    澳大利亚 2022 1.442
    澳大利亚 2021 1.332
    澳大利亚 2020 1.452
    澳大利亚 2019 1.439
    澳大利亚 2018 1.34
    澳大利亚 2017 1.358
    加拿大 2022 1.301
    加拿大 2021 1.254
    加拿大 2020 1.341
    加拿大 2019 1.327
    加拿大 2018 1.297
    加拿大 2017 1.35
    丹麦 克朗 2022 7.077
    丹麦 克朗 2021 6.29
    丹麦 克朗 2020 6.538
    丹麦 克朗 2019 6.67
    丹麦 克朗 2018 6.319
    丹麦 克朗 2017 6.864
    欧元区 欧元 2022 0.951
    欧元区 欧元 2021 0.846
    欧元区 欧元 2020 0.877
    欧元区 欧元 2019 0.893
    欧元区 欧元 2018 0.848
    欧元区 欧元 2017 0.923
    日本 日元 2022 131.454
    日本 日元 2021 109.817
    日本 日元 2020 106.725
    日本 日元 2019 109.008
    日本 日元 2018 110.424
    日本 日元 2017 116.667
    瑞典 克朗 2022 10.122
    瑞典 克朗 2021 8.584
    瑞典 克朗 2020 9.205
    瑞典 克朗 2019 9.457
    瑞典 克朗 2018 8.703
    瑞典 克朗 2017 8.894
    瑞士 法郎 2022 0.955
    瑞士 法郎 2021 0.914
    瑞士 法郎 2020 0.939
    瑞士 法郎 2019 0.994
    瑞士 法郎 2018 0.979
    瑞士 法郎 2017 1.024
    英国 2022 0.811
    英国 2021 0.727
    英国 2020 0.779
    英国 2019 0.784
    英国 2018 0.75
    英国 2017 0.808

创建“年份”列

向现有 Date 表添加新的“年份”列。

  1. “模型 ”视图中,右键单击 “日期 ”表,然后选择“ 新建”列

  2. 在 DAX 编辑栏中,输入以下表达式: Year = YEAR([Date]),然后按 Enter

    DAX 公式栏中“年份”公式的屏幕截图。

创建关系

在新的“年平均汇率”和“国家/地区货币格式字符串”表之间以及“年平均汇率”表和现有“日期”表之间创建关系。

  1. 如果为关系启用“自动检测”(在“列工具”选项卡上,选择“管理关系”,然后选择“自动检测”),则可能会为你创建“国家/地区”列中的国家/地区平均汇率和“国家/地区”列中的国家/地区平均汇率之间的关系。 如果没有,请使用“列工具>”中的“新建关系”按钮创建此关系:

    • 表 1:年平均汇率
    • 表 1 列: 国家/地区
    • 基数:多对一
    • 表 2: 国家/地区货币格式字符串
    • 表 2 列: 国家/地区
    • 激活此关系:是
    • 交叉筛选器方向:单向

    关系应如下所示:

    国家/地区货币格式字符串与年度平均汇率之间的关系属性的屏幕截图。

  2. 如果为关系启用“自动检测”,则可能会创建“国家/地区货币格式字符串”和“国家/地区”列中的销售区域之间的关系。 删除此关系,因为它对模型不正确。

  3. 改为在“年份”列上创建“年平均汇率”与“日期”之间的关系。

    • 表 1:年平均汇率
    • 表 1 列:年份
    • 基数:多对多
    • 表 2:日期
    • 表 2 列:年份
    • 激活此关系:是
    • 交叉筛选方向: 单向(“每年平均汇率”过滤“日期”)

    关系应如下所示:

    关系屏幕截图。

  4. 保存模型。

创建度量值组表

度量值组通过将不同的度量值放在一个表中,来帮助组织这些度量值。

  1. 在“主页”功能区上,选择“输入数据”。
  2. 在“创建表”对话框中,将值留空。 为表 “销售”度量值命名,然后选择“ 加载”。 此表包含您的新度量值。

创建度量值

  1. “数据 ”窗格中,展开并右键单击 “销售度量值”,然后选择“ 新建度量值”。 在 DAX 公式栏中输入以下 DAX 表达式,然后按 Enter:

    Sales Amount = SUM(Sales[Sales Amount])
    

    它应如下所示:

    销售金额度量 DAX 公式的屏幕截图。

  2. “销售”度量值中,右键单击 Column1 并选择“ 在报表视图中隐藏”。 此更改使 Sales 度量值 成为度量组,该度量组现在显示在“数据”窗格顶部,带有度量组图标,如下所示:

    “销售”度量组中 Column1 的屏幕截图。

  3. 现在可以创建度量值来计算汇率。 右键单击 “销售度量值”,选择“ 新建度量值”,在 DAX 公式栏中输入以下表达式,然后按 Enter

    Exchange Rate (Yearly Avg) = 
    IF (
        ISBLANK ( SELECTEDVALUE ( 'Country/Region Currency Format Strings'[Country/Region] ) )
            || SELECTEDVALUE ( 'Country/Region Currency Format Strings'[Country/Region] ) = "United States",
        1,
        AVERAGE ( 'Yearly Average Exchange Rates'[Yearly Average Exchange Rate] )
    )
    
    

    它应如下所示: DAX 编辑器中汇率 DAX 公式的屏幕截图。

  4. 现在,创建另一个度量值,将 Sales Amount 度量值转换为其他货币。 右键单击 “销售度量值”,选择“ 新建度量值”,在 DAX 公式栏中输入以下表达式,然后按 Enter

        Converted Sales Amount = 
        SUMX('Date',
        CALCULATE( [Sales Amount] * [Exchange Rate (Yearly Avg)]))
    
    

    销售度量值 度量值组现在应如下所示:转换后的销售额度量值公式的屏幕截图。

创建报表

  1. 转到“报表视图”。 向报表添加新的空白页。

  2. 将折线图视觉对象添加到新报表页。 在为度量值添加动态格式字符串之前,使用此可视化工具查看度量值。

  3. 在“数据”窗格 “销售额度量值”中,选择“换算后的销售额”。 如果不选择任何其他位置,还可以在“日期”表中选择“年份”。

    报表视图中折线图视觉对象的屏幕截图。

  4. 复制并粘贴视觉对象,以便有两个折线图视觉对象。 将第二个折线图视觉对象更改为表格视觉对象,然后将其移到折线图下方,如下所示:

    “复制折线图”视觉对象的屏幕截图。

  5. 通过在“可视化效果”窗格中选择“列表切片器”,将列表切片器视觉对象添加到报表页。 在“数据”窗格中,从“国家/地区货币格式字符串”表中选择“国家/地区”,以将其添加到切片器。

    国家/地区筛选器的屏幕截图。

  6. 重新排列视觉对象,使其布局更合理,如下所示:

    重新排列图像的屏幕截图。

  7. 虽然不需要,但可以更改视觉属性以生成更漂亮的报表。 使用“可视化效果”窗格中的“设置视觉对象格式”按钮进行以下更改:

    Slicer

    • 视觉选项卡>切片器设置>单选>打开
    • 常规 选项卡 >属性>填充:10 像素,所有边缘
    • 常规 标签页 >效果>视觉边框启用,浅灰色,10 像素圆角
    • “常规”选项卡>关闭
    • 视觉 选项卡 >按钮>边框:#333333,6 行宽

    • 常规 选项卡 >属性>填充:10 像素,所有边缘
    • 常规 选项卡 >效果>视觉边框,浅灰色,10 像素圆角
    • 视觉选项卡>网格>水平网格线,白色,宽度 2
    • 视觉选项卡>>,颜色:白色,宽度:2
    • 视图 选项卡 >网格>边框:白色
    • 视觉 选项卡 >网格>选项:2 行间距
    • 可视 选项卡 >数值>背景色:#F6F4F4
    • 视觉 选项卡 >>备用背景色:#F6F4F4
    • 视觉 选项卡列 >标题>文本: 粗体、文本颜色白色、背景色 #0D6ABF

    折线图

    • 常规 选项卡 >属性>填充:10 像素,所有边缘
    • 常规 选项卡 >效果>视觉边框开启,浅灰色,10px 圆角
    • “常规”选项卡“>属性>标题>副标题打开
    • 视图选项卡 >Y 轴>标题关闭
    • 视觉 选项卡 >Y 轴>关闭
    • 视觉 标签 >标记启用
    • 视觉 选项卡 >数据标签打开
    • 图形 选项卡 >数据标签>:粗体、蓝色

    画布(可选)

    • 画布设置>画布背景:浅灰色,85% 透明度

    使用这些视觉对象属性,可以创建如下所示的报表页:

    视觉对象的灰色画布背景的屏幕截图。

创建动态格式字符串

在切片器中选择不同的 国家/地区 名称时,视觉对象会显示“已转换的销售额”度量结果,但不以正确的格式显示该国家/地区。

  1. “数据 ”窗格中的 “销售度量值”下,选择“ 已转换的销售金额”。

  2. “度量工具”功能区中,从“格式”下拉列表中选择“动态”。

  3. 编辑栏左侧的下拉现在显示 “格式”,编辑栏中的公式具有格式字符串。 将格式字符串替换为以下 DAX 表达式,然后按 Enter

    SELECTEDVALUE ( 'Country/Region Currency Format Strings'[Format], "\$#,0.00;(\$#,0.00);\$#,0.00" )
    

    它应如下所示:

    国家/地区货币格式字符串动态公式的屏幕截图。

  4. 在切片器中选择其他国家/地区。 表格和折线图视觉对象现在以正确的格式显示该国家/地区或区域的已转换货币金额。 尝试在切片器中选择其他国家/地区以查看视觉对象的变化。

    转换后的销售金额图表的屏幕截图。

  5. 保存模型。

已知问题和注意事项

  • 视觉对象具有可能会影响格式字符串显示方式的格式设置选项。 如果格式意外出现在可视化中,请转到可视化设计>格式可视化选项,搜索显示单位,并将其从自动更改为

    “显示单位”从“自动”更改为“无”的屏幕截图。

  • 可以直接使用其名称(如 [度量值 A]),或通过使用 SELECTEDMEASURE() 来间接引用度量值本身的动态格式字符串。

  • 度量值的动态格式字符串仅适用于模型度量值。 无法为实时连接报表中的 报表度量 值添加动态格式字符串。

  • 通过使用 DirectQuery for Analysis Services,当您在实时连接报表中选择 “对此模型进行更改” 时,连接将从 Analysis Services 转为使用 DirectQuery。 通常,可以更改远程模型度量值的格式字符串。 通过使用动态格式字符串来处理度量值:

    • 已定义动态格式字符串的远程模型度量值无法对静态格式字符串或其他动态格式字符串 DAX 表达式进行格式字符串更改。
    • 无法将远程模型度量值从静态格式字符串更改为本地模型中定义的动态格式字符串 DAX 表达式。
    • 本地模型度量值无法使用度量值的动态格式字符串。