在 Power BI Desktop 中使用自定义格式字符串

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

借助 Power BI Desktop 中的自定义格式字符串,可以自定义字段在视觉对象中的显示方式,并确保报表的外观与预期完全相同。

“建模”视图中 Power BI Desktop 的屏幕截图,其中突出显示了“格式”下拉菜单中的“自定义”。

格式字符串分为三个级别:

  • 模型。 可以为模型中的字段设置格式字符串,或使用动态格式字符串来设置度量值的格式。 在使用该字段的任何地方都会应用格式字符串,除非由视觉对象或元素级格式字符串替代。
  • 视觉对象。 可以为视觉对象上的任何列、度量值或视觉计算设置格式字符串,即使它们已经有格式字符串。 在这种情况下,将替代模型级格式字符串,并使用视觉对象级格式字符串。 如果更改字段上的聚合,从而导致先前设置的视觉对象级格式字符串无效,则会移除该格式字符串。 字段的视觉对象级格式字符串为字段保留,但不为视觉计算保留。 如果在字段上设置了视觉对象级格式字符串,然后为同一视觉对象移除并重新添加该字段,则会恢复该视觉对象级格式字符串。 相反,对于视觉计算,格式字符串不会恢复。
  • 元素。 可以为数据标签以及新卡片和新切片器视觉对象的特定元素设置格式字符串。 将来,这一级别将会扩大,以包含更多内容。 在此处设置的任何格式字符串都会替代在视觉对象和模型级别设置的格式字符串。

这些级别是分层的,模型级别是最低级别,元素级别是最高级别。 在较高级别的列、度量值或视觉计算上定义的格式字符串会替代在较低级别上定义的这些内容。

由于视觉计算不在模型中,因此它们不能在模型级别设置格式字符串,但可以在视觉对象或元素级别设置。 度量值和列可以在所有三个级别上具有格式字符串:

Level 影响 适用于
元素 选定视觉对象的选定元素 度量值、列、视觉计算
可视 所选视觉对象 度量值、列、视觉计算
模型 所有视觉对象、所有页面、所有报告均采用同一模型 度量值、列

图表显示了可用的三种级别的格式字符串(模型、视觉对象、元素)。它表明视觉计算只能具有视觉对象和元素级别的格式字符串,而度量值和列可以具有所有级别的格式字符串。

元素级格式字符串目前仅适用于特定视觉对象和数据标签。

如何使用自定义格式字符串

要使用自定义格式字符串,首先需要决定要在哪个级别工作:模型、视觉对象还是元素。

添加模型级格式字符串

若要在模型中创建自定义格式字符串,请在“建模”视图中选择相应字段,然后选择“属性”窗格中“格式”下的下拉箭头

“属性”窗格的屏幕截图,其中突出显示了“格式”菜单。

从“格式”下拉菜单中选择“自定义”后,请从常用格式字符串列表中进行选择。

“格式设置”菜单的屏幕截图,其中突出显示了“自定义”。

添加视觉对象级格式字符串

要创建视觉对象级格式字符串,请首先将字段或视觉计算添加到视觉对象。 然后,选择视觉效果后,打开格式窗格并转到格式窗格的“常规”部分。 找到“格式数据”设置并在那里配置格式字符串

视觉对象的“格式”窗格的屏幕截图,其中显示了“常规”部分中的数据格式设置。

注意

现在,需要输入 .NET 格式字符串而不是 VBA 格式字符串。 这是一个暂时性问题,将在将来的版本中解决。

添加元素级格式字符串

要创建元素级格式字符串,请打开格式窗格并找到要为其设置格式的元素的格式字符串部分。 请记住,并非所有元素都支持格式字符串。 要在数据标签上设置格式字符串,请打开格式窗格的“视觉对象”部分,将“数据标签”>“值”>“显示单位”设置为自定义,然后输入格式代码

视觉对象的“格式”窗格的屏幕截图,其中显示了“视觉对象”部分中数据标签的值格式设置。

支持的自定义格式语法

自定义格式字符串遵循 Excel 和其他 Microsoft 产品通用的 VBA 样式语法,但它们不支持其他产品中使用的所有语法。

注意

目前,视觉对象级格式字符串要求输入 .NET 格式字符串。 这是一个暂时性问题,将在将来的版本中解决。

下表定义 Power BI 中支持的语法。

支持的日期符号

符号 范围
d 1-31(每月的某一日,不带前导零)
dd 01-31(每月的某一日,带有前导零)
m 1-12(每年的某一月,不带前导零,从 1 月 = 1 开始)
mm 01-12(每年的某一月,带有前导零,从 1 月 = 01 开始)
mmm 显示缩写的月份名称(回历月份名称没有缩写)
mmmm 显示完整的月份名称
yy 00-99(年份的最后两位数)
yyyy 100-9999(三位数或四位数年份)

支持的时间符号

符号 范围
h 0 - 23(附加了“AM”或“PM”的 1 - 12)(一天中的时间,不带前导零)
hh 00 - 23(附加了“AM”或“PM”的 1 - 12)(一天中的时间,带有前导零)
n 0-59(每小时的某一分钟,不带前导零)
nn 00-59(每小时的某一分钟,带有前导零)
m 0-59(每小时的某一分钟,不带前导零)。 仅当前面带有 hhh
mm 00-59(每小时的某一分钟,带有前导零)。 仅当前面带有 hhh
s 0-59(一分钟中的某一秒,不带前导零)
ss 00-59(一分钟中的某一秒,带有前导零)

可以查看有关如何设置自定义值字符串格式的示例

数字的用户定义格式表达式可以包含用分号分隔的一至三个部分。 如果分号之间没有任何内容,则不会显示缺少的部分,而是会看到 ""。 如果未指定分号,则使用正数格式。

下面是不同值字符串的不同格式的示例:

格式字符串 格式字符串 格式字符串 格式字符串
0.00;-0.0;“零” 0.00;; 0.00;-0.0; 0.00;
-1.234 -1.2 "" -1.2 ""
0 “零” "" "" 0.00
1.234 1.23 1.23 1.23 1.23

下表标识了预定义的命名日期和时间格式:

格式名称 说明
常规日期 显示日期和时间,例如 4/3/93 05:34 PM。 如果没有小数部分,则仅显示日期,例如 4/3/93。 如果没有整数部分,则仅显示时间,例如 05:34 PM。 日期显示由你的系统设置来决定。
长日期 根据系统的长日期格式显示日期。
短日期 使用系统的短日期格式显示日期。
长时间 使用系统的长时间格式显示时间;包括小时、分钟、秒。
短时间 使用 24 小时格式显示时间,例如 17:45。

命名数字格式

下表标识了预定义的命名数字格式:

格式名称 说明
常规数字 显示不带千位分隔符的数字。
货币 显示带千位分隔符的数字。 在小数分隔符后面显示两位数字。 输出基于系统区域设置。
固定 在小数分隔符前至少显示一位数字,在小数分隔符后至少显示两位数字。
标准 显示带有千位分隔符的数字,小数分隔符前面至少一位数字,小数点分隔符后面至少两位数字。
百分比 显示乘以 100 的数字,并带有百分号 ( % )。 小数分隔符后面始终显示两位数字。
科学 使用标准科学记数法。

下表标识了可用于创建用户定义的日期/时间格式的字符 。

字符 说明
( : ) 时间分隔符。 在某些区域设置中,其他字符可用于表示时间分隔符。 设置时间值格式时,时间分隔符用于分隔小时、分钟和秒。 在格式化的输出中用作时间分隔符的实际字符由你的系统设置来决定。
( / ) 日期分隔符。 在某些区域设置中,其他字符可用于表示日期分隔符。 设置日期值格式时,日期分隔符用于分隔日期、月份和年份。 在格式化的输出中用作日期分隔符的实际字符由你的系统设置来决定。
d 将日期显示为不带前导零的数字 (1–31)。
dd 将日期显示为带有前导零的数字 (01–31)。
ddd 以缩写形式 (Sun–Sat) 显示日期。 已本地化。
dddd 以全称形式 (Sunday–Saturday) 显示日期。 已本地化。
m 将月份显示为不带前导零的数字 (1–12)。 如果 m 紧接在 h 或 hh 之后,则显示分钟而不是月份。
mm 将月份显示为带有前导零的数字 (01–12)。 如果 m 紧接在 h 或 hh 之后,则显示分钟而不是月份。
mmm 以缩写形式 (Jan–Dec) 显示月份。 已本地化。
mmmm 以全称形式 (January–December) 显示月份。 已本地化。
yy 将年份显示为两位数的数字 (00-99)。
yyyy 将年份显示为四位数的数字 (100-9999)。
h 将小时显示为不带前导零的数字 (0–23)。
hh 将小时显示为带有前导零的数字 (00–23)。
n 将分显示为不带前导零的数字 (0–59)。
nn 将分显示为带有前导零的数字 (00–59)。
S 将秒显示为不带前导零的数字 (0–59)。
ss 将秒显示为带有前导零的数字 (00–59)。
tt 使用 12 小时制时钟并显示大写的 AM 以及中午之前的任意小时;显示大写的 PM 以及中午到晚上 11:59 之间的任意小时。

下表标识了可用于创建用户定义的数字格式的字符 。

字符 说明
显示不带格式的数字。
(0) 数字占位符。 显示一个数字或零。 如果在格式字符串中出现 0 的位置处,表达式具有一个数字,则显示该数字。 否则,在该位置处显示零。 如果数字位数少于格式表达式中的零个数(小数任意一侧),则显示前导零或尾随零。 如果数字的位数多于小数分隔符后的零个数,则将数字四舍五入到与零个数相同的小数位数。 如果数字的位数多于小数分隔符前的零个数,则不加修改地显示多余的数字。
( # ) 数字占位符。 显示一个数字或不显示任何内容。 如果在格式字符串中出现 # 的位置处,表达式具有一个数字,则显示该数字;否则,在该位置处不显示任何内容。 此符号的作用类似于零位占位符。 但是,如果数字位数等于或少于格式表达式中小数分隔符任意一侧的 # 字符数,则不会显示前导零或尾随零。
( . ) 小数点占位符。 在某些区域设置中,逗号用作小数点分隔符。 小数占位符确定小数分隔符前后显示的位数。 如果格式表达式只包含此符号左侧的数字符号,则小于 1 的数字以小数分隔符开头。 若要显示带有小数数字的前导零,请将 0 用作小数点分隔符左侧的第一个数字占位符。 在格式化的输出中用作小数点占位符的实际字符取决于系统所识别的数字格式。
(%) 百分比占位符。 将表达式乘以 100, 百分比字符 ( % ) 插入在格式字符串中出现的位置。
( , ) 千位分隔符。 在某些区域设置中,句点用作千位分隔符。 千位分隔符用于在小数点分隔符左侧具有四位或更多位数的数字中分隔千位与百位。 如果格式包含由数字占位符(0 或 #)包围的千位分隔符,则指定千位分隔符的标准用法。 两个相邻千位分隔符或紧接在小数点分隔符左侧的千位分隔符(无论是否指定小数)表示“通过将数字除以 1000 来缩小数字,并根据需要进行舍入”。例如,可以使用格式字符串“##0,,”将 100,000,000 表示为 100。 小于一百万的数字显示为 0。 除紧接在小数点分隔符左侧以外的任何位置中的两个相邻千位分隔符仅被视为指定千位分隔符的使用。 在格式化的输出中用作千位分隔符的实际字符取决于系统所识别的数字格式。
( : ) 时间分隔符。 在某些区域设置中,其他字符可用于表示时间分隔符。 设置时间值格式时,时间分隔符用于分隔小时、分钟和秒。 在格式化的输出中用作时间分隔符的实际字符由你的系统设置来决定。
( / ) 日期分隔符。 在某些区域设置中,其他字符可用于表示日期分隔符。 设置日期值格式时,日期分隔符用于分隔日期、月份和年份。 在格式化的输出中用作日期分隔符的实际字符由你的系统设置来决定。
(E- E+ e- e+ ) 科学记数格式。 如果格式表达式在 E-、E+、e- 或 e+ 后面至少包含一个数字占位符(0#),则以科学记数法格式显示数字,并在数字及其指数之间插入 E 或 e。 数字占位符的数量确定指数的数字数量。 使用 E- 或 e- 在负指数旁边放置减号。 使用 E+ 或 e+ 在负指数旁边放置减号,在正指数旁边放置加号。
- + $ ( ) 显示文本字符。 若要显示其他字符,请在开头加上一个反斜杠 (\) 或用双引号 (" ") 将它括起来。
( \ ) 显示格式字符串中的下一个字符。 若要将具有特殊含义的字符显示为文字字符,请在该字符前加上一个反斜杠 (\)。 不会显示反斜杠本身。 使用反斜杠与将下一个字符放在双引号中的作用是相同的。 若要显示反斜杠,请使用两个反斜杠 (\\)。 不能显示为文本字符的字符示例包括日期格式和时间格式字符(a、c、d、h、m、n、p、q、s、t、w、y、/ 和 :)、数字格式字符(#、0、%、E、e、逗号和句点)以及字符串格式字符(@、&、<、>、!)。
("ABC") 显示双引号 (" ") 中的字符串。

注意事项和限制

  • 无法为字符串类型或布尔类型的字段设置自定义格式字符串。

有关详细信息,请参阅: