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

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

使用度量值的动态格式字符串,可以借助单独的 DAX 表达式有条件地应用格式字符串,从而决定度量值在视觉对象中的显示方式。

注意

度量值的动态格式字符串目前为预览版。 在预览版期间,功能和文档可能会更改。

动态格式字符串克服了使用 FORMAT 函数的固有缺点。 也就是说,使用 FORMAT 时,即使是数值数据类型也会作为字符串返回,这可能不适用于需要数值的视觉对象,如图表。 使用动态格式字符串时,度量值会保留其数据类型,并且不会强制更改为字符串数据类型。 而使用动态格式字符串会根据上下文对度量值应用不同的格式字符串。

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

创建动态格式字符串

创建动态格式字符串

  1. 在“数据”窗格中,选择要为其指定动态格式字符串的度量值。

  2. 在“度量值工具”功能区>“格式设置”部分>“格式”列表框中,选择“动态”。 DAX 公式栏的左侧将出现一个已选中“格式”的新列表框。 通过此下拉列表可在静态度量值 DAX 表达式和动态格式字符串 DAX 表达式之间切换。 无论在切换到“动态”之前使用的静态格式字符串是什么,都会在 DAX 公式栏中预先填充为 string。

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

  3. 使用 DAX 表达式覆盖 string,该表达式用于输出度量值的正确格式字符串。 例如,以下表达式将从“国家/地区货币格式字符串”表中查找所需的货币格式字符串:

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

  4. 验证动态格式字符串在视觉对象中是否有效。

    若要删除动态格式字符串并返回到使用静态格式字符串,请在“格式设置”部分>“格式”列表框中,选择其他格式选项。 由于此操作无法撤消,因此将出现一个对话框,询问你是否要继续。 若要再次返回到使用动态格式字符串,必须重新输入 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
    英国 Pound £ #,0
    美国 US$#,0.00
  3. 验证表是否正确,然后单击“加载”。

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

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

    表名称:年平均汇率

    国家/地区 货币 Year 年平均汇率
    澳大利亚 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
    英国 Pound 2022 0.811
    英国 Pound 2021 0.727
    英国 Pound 2020 0.779
    英国 Pound 2019 0.784
    英国 Pound 2018 0.75
    英国 Pound 2017 0.808

创建“年份”列

现有“日期”表中需要新的“年份”列。

  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”,然后选择“在报表视图中隐藏”。 此操作会将“销售”度量更改为度量组,该度量组现在显示在“数据”窗格的顶部,并带有一个度量组图标,如下所示:

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

  3. 现在可以创建度量值来计算汇率。 右键单击“销售度量值”,选择“新建度量值”,在 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] )
    )
    
    

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

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

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

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

创建报表

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

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

  3. 在“数据”窗格 >“销售额度量值”中,选择“换算后的销售额”。 接着,不单击其他任何位置,在“日期”表中选择“年份”。

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

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

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

  5. 向报表页中添加切片器视觉对象。 在“格式”功能区中,将“国家/地区货币格式字符串”表中的“国家/地区”添加到切片器。

    “国家/地区”切片器的屏幕截图。

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

    “重新排列视觉对象”的屏幕截图。

  7. 还可以选择更改视觉对象属性使报表更美观:

    切片器

    • 切片器设置:单选
    • 大小和样式,填充:10 像素,所有边缘
    • 大小和样式,视觉对象边框:浅灰色,10 像素圆角
    • 切片器设置,样式:图块
    • 切片器标题:禁用
    • 值,边框:左,#333333,6 行宽

    • 大小和样式,填充:10 像素,所有边缘
    • 大小和样式,视觉对象边框:浅灰色,10 像素圆角
    • 网格,水平网格线:白色,2 宽度
    • 网格,垂直网格线:白色,2 宽度
    • 网格,边框:白色
    • 网格,选项:2 行填充
    • 值,值:背景色 #F6F4F4
    • 值,值:替代背景色 #F6F4F4
    • 列标题,文本:粗体,文本颜色白色,背景色 #0D6ABF

    折线图

    • 大小和样式,填充:10 像素,所有边缘
    • 大小和样式,视觉对象边框:浅灰色,10 像素圆角
    • 标题,副标题:启用
    • Y 轴,标题:禁用
    • Y 轴:禁用
    • 标记:启用
    • 数据标签:启用
    • 数据标签,值:粗体,蓝色

    画布(可选)

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

    借助这些视觉对象属性,可以获得视觉效果更佳的报表页,如下所示:

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

创建动态格式字符串

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

  1. 在“数据”窗格 >“销售额度量值”中,选择“换算后的销售额”。

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

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

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

    它看起来应该如下所示:

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

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

    “转换后的销售额”视觉对象的屏幕截图。

  5. 保存模型。

已知问题和注意事项

在预览期间,将解决以下问题和限制:

  • 视觉对象的有些格式设置选项可能会影响格式字符串的显示方式。 如果视觉对象中的格式设置显示不正确,请转到视觉对象“格式”选项,搜索“显示单位”并将其从“自动”更改为“无”。

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

  • 可以通过使用度量值的名称(如 [Measure A])直接在度量值的动态格式字符串中引用该度量值,也可以使用 SELECTEDMEASURE() 间接引用。

  • 度量值的动态格式字符串仅适用于模型度量值。 可添加到实时连接报表的报表度量值不能具有度量值的动态格式字符串。

  • 使用适用于 Analysis Services 的 DirectQuery 时,如果在实时连接报表上单击“对此模型进行更改”,会将连接转移到 Analysis Services 上的 DirectQuery。 通常,可以更改远程模型度量值的格式字符串。 预览期间:

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