适用范围: Power BI Desktop Power BI 服务
借助 Power BI Desktop 中的自定义格式字符串,可以自定义字段在视觉对象中的显示方式,并确保报表的外观与预期完全相同。
格式字符串分为三个级别:
- 模型。 可以为模型中的字段设置格式字符串,或使用动态格式字符串来设置度量值的格式。 在使用该字段的任何地方都会应用格式字符串,除非由视觉对象或元素级格式字符串替代。
- 视觉对象。 可以为视觉对象上的任何列、度量值或视觉计算设置格式字符串,即使它们已经有格式字符串。 在这种情况下,将替代模型级格式字符串,并使用视觉对象级格式字符串。 如果更改字段上的聚合,从而导致先前设置的视觉对象级格式字符串无效,则会移除该格式字符串。 字段的视觉对象级格式字符串为字段保留,但不为视觉计算保留。 如果在字段上设置了视觉对象级格式字符串,然后为同一视觉对象移除并重新添加该字段,则会恢复该视觉对象级格式字符串。 相反,对于视觉计算,格式字符串不会恢复。
- 元素。 可以为数据标签以及新卡片和新切片器视觉对象的特定元素设置格式字符串。 将来,这一级别将会扩大,以包含更多内容。 在此处设置的任何格式字符串都会替代在视觉对象和模型级别设置的格式字符串。
这些级别是分层的,模型级别是最低级别,元素级别是最高级别。 在较高级别的列、度量值或视觉计算上定义的格式字符串会替代在较低级别上定义的这些内容。
由于视觉计算不在模型中,因此它们不能在模型级别设置格式字符串,但可以在视觉对象或元素级别设置。 度量值和列可以在所有三个级别上具有格式字符串:
| Level | 影响 | 适用于 |
|---|---|---|
| 元素 | 选定视觉对象的选定元素 | 度量值、列、视觉计算 |
| 可视 | 所选视觉对象 | 度量值、列、视觉计算 |
| 模型 | 所有视觉对象、所有页面、所有报告均采用同一模型 | 度量值、列 |
元素级格式字符串目前仅适用于特定视觉对象和数据标签。
如何使用自定义格式字符串
若要使用自定义格式字符串,首先需要确定要处理哪个级别:模型、视觉对象或元素。
小窍门
如果看到 K 或 M 等意外后缀,它们来自视觉对象的 “显示单位 ”设置(自动),而不是自定义格式字符串本身,将“显示单位”设置为 “无 ”以显示完整数字。
添加模型级格式字符串
若要在模型中创建自定义格式字符串,请在“建模”视图中选择相应字段,然后选择“属性”窗格中“格式”下的下拉箭头。
从“格式”下拉菜单中选择“自定义”后,请从常用格式字符串列表中进行选择。
添加视觉对象级格式字符串
要创建视觉对象级格式字符串,请首先将字段或视觉计算添加到视觉对象。 然后,选择视觉效果后,打开格式窗格并转到格式窗格的“常规”部分。 找到“格式数据”设置并在那里配置格式字符串:
注意
目前,需要输入 .NET 格式字符串 而不是 VBA 格式字符串。 这是一个暂时性问题,将在将来的版本中解决。
添加元素级格式字符串
要创建元素级格式字符串,请打开格式窗格并找到要为其设置格式的元素的格式字符串部分。 请记住,并非所有元素都支持格式字符串。 此外,除非将其设置为 None,否则元素级显示单元仍可应用自动 K/M/B 缩放。 要在数据标签上设置格式字符串,请打开格式窗格的“视觉对象”部分,将“数据标签”“值”“显示单位”设置为自定义,然后输入格式代码>>:
支持的自定义格式语法
自定义格式字符串遵循 Excel 和其他 Microsoft 产品通用的 VBA 样式语法,但它们不支持其他产品中使用的所有语法。
注意
视觉级别格式字符串当前使用 .NET 日期/时间和数字格式标记(临时限制)。 这意味着大小写很重要(M = 月, m = 分钟)。 模型和元素级自定义格式字符串使用下表中记录的 VBA 样式标记。 将来的版本中将删除此限制,以便所有级别都使用统一的语法。
排查并解决意外月份或分钟值异常问题
如果自定义格式显示预期每月的分钟数:
- 请确认是否在视觉层级应用了格式(使用当前的 .NET 语法)。
- 如果是这样,请将
m更改为M以表示月份,或者将自定义格式字符串移动到模型级别以使用 VBA 样式的m。 - 在
nnVBA 样式上下文中使用分钟数,以避免与月份符号混淆。
排查不需要的自动扩展问题(K、M、B 后缀)
如果你的视觉对象显示后缀(如 K(千)、M(百万)或 B(十亿),即使你设置了自定义数字格式(例如 #.### 或 #,##0),后缀通常不是来自自定义格式字符串。 它由视觉对象或元素上的 显示单位 (自动缩放)设置应用。
典型原因:
- 卡片、KPI、仪表、新卡片、切片器值或数据标签的显示单位设置为 “自动 ”(默认值)。
- 应用了元素级格式,但元素的显示单位仍自动缩放。
- 更改格式后读取的视觉计算或聚合(显示单位还原为“自动”)。
如何删除 K/M/B 后缀:
- 选择视觉对象。
- 打开 “格式 ”窗格。
- 找到数值设置(例如 常规 > 数据格式、视觉 > 数据标签、 标注值或新卡片的 数据值)。
- 将 显示单位 (有时标记为 单位 或 值单位)设置为 “无 ”(而不是自动)。
- 重新应用(或确认)所需的自定义格式字符串(例如
#,##0,0,,0.0#,##0.###)。
如果仍然存在:
- 检查元素级覆盖(例如数据标签设置)是否也设置为“自动”。
- 确认您没有在自定义格式中嵌入字母“K”(例如
0" K")。 - 对于模型级度量,请确保没有任何 DAX 逻辑已经对这些值进行缩放处理(例如除以 1000)。
示例比较:
| 设置 | 显示单位 | 自定义格式 | 结果 |
|---|---|---|---|
| 卡片视图(默认) | Auto | #,##0 |
12K (缩放) |
| 卡片视觉对象(已更改) | 无 | #,##0 |
11,732 |
| 数据标签(聚集列) | Auto | 0 |
12K |
| 数据标签(簇状柱) | 无 | 0 |
11,732 |
| 新卡(数值格式化) | Auto | 0.0" °C" |
23.4K °C (不需要的) |
| 新卡(值格式化) | 无 | 0.0" °C" |
23.4 °C |
小窍门
如果想要自定义 缩写 ,但不想要默认的 K/M/B 逻辑,请保留 显示单位:无 ,并在格式字符串中追加文本(例如 0.0"k")。 这会保留原始数值精度控件。
注意
基于值大小的动态缩放(例如,在无后缀、K 和 M 之间切换)需要返回文本的度量值(例如,使用 FORMAT() 或条件逻辑)或动态格式字符串度量。 仅静态自定义格式字符串不提供条件后缀逻辑。
下表定义 Power BI 中支持的语法。
支持的日期符号(模型和元素级别使用的 VBA 样式语法)
以下符号适用于使用 VBA 样式(Excel-like)语法的自定义格式字符串。
重要
视觉级别的自定义格式字符串暂时需要 .NET 格式令牌(请参阅以下说明)。 在 .NET 自定义日期/时间格式中,大写表示月份,小写Mm表示分钟数。 在 VBA 样式格式(此处用于模型和元素级别),小写 m 表示月份。 这种差异是混淆的共同来源。
| 符号 | 含义或输出 |
|---|---|
| d | 在月份中不加前导零的日期(1-31)。 |
| dd | 带前导零的月份中的某一天(01-31)。 |
| m | 没有前导零的月份编号(1–12)。 如果紧跟 h 或 hh之后,它将解释为分钟数(请参阅后面的“分钟符号” )。 |
| mm | 带前导零(01–12)的月数。 如果紧接在 h 或 hh之后,则将其解释为前导零(00-59)的分钟数。 |
| mmm | 缩写月份名称(1-12 月)。 (伊斯兰历月名没有缩写。) |
| mmmm | 全月名称(1-12月)。 |
| yy | 两位数年份(00-99)。 |
| yyyy | 四位数年份(0001-9999)。 |
注意
如果您在预期显示月份的地方看到意外的分钟值,请确认是在视觉级别设置(当前为.NET样式)还是在模型/元素级别设置(VBA样式)中输入了格式。
支持的时间符号(VBA 样式)
| 符号 | 含义或输出结果 |
|---|---|
| h | 小时(0–23),无前导零。 与 AM/PM 结合使用时,表示 1-12。 |
| hh | 带前导零(00-23)的小时。 与 AM/PM 结合使用时,表示 01-12。 |
| n | 无前导零(0–59)的分钟。 |
| nn | 带有前导零(00-59)的分钟。 |
| m / mm | 分钟(0-59/00-59)仅当它们紧跟在 h 或 hh 之后时。 否则,它们被视为月符号(请参阅日期符号)。 |
| S | 秒数不加前导零(0-59)。 |
| ss | 第二个,前导零 (00–59)。 |
小窍门
首选 n / nn 分钟数,以避免月 m / mm 符号不明确。
日期和时间示例
假设示例时间戳:2025-09-04 15:07:08(2025 年 9 月 4 日,下午 3:07:08)。
| 格式字符串 | 上下文(VBA 样式与 .NET) | 预期输出 | 注释 |
|---|---|---|---|
| m/d/yy | VBA 样式 (模型) | 9/4/25 | 月份为数字;日期无前导零。 |
| mm/dd/yyyyy | VBA 样式(模型) | 09/04/2025 | 前导零。 |
| mmm d, yyy | VBA 风格(模型) | 2025 年 9 月 4 日 | 缩写月份。 |
| mmmm d | VBA 样式 (模型) | 9 月 4 日 | 完整月份名称。 |
| h:nn:ss | VBA 风格(模型) | 15:07:08 | 使用nn以避免月份歧义。 |
| h:m:s | VBA 样式(模型) | 15:7:8 |
m 解释为分钟数(后跟 h)。 |
| m | VBA 样式(模型) | 9 | 独立的月份编号。 |
| M | .NET 视觉级别 | 9 | 在 .NET 中,大写 M = month。 |
| m | .NET 可视层级 | 07 | 在 .NET 中,小写 m = 分钟。 |
| mm/dd | 混合误用(.NET 视觉层面) | 07/04 | 用户期望的是按月/天显示,但却显示为分钟/天,这可能引起混淆。 |
注意
如果您看到显示为“分钟”的数值(如 07),而您期待的是“月份”(如 09),这可能是因为您输入了一个 .NET 风格的格式,并误以为它是 VBA 风格。 将大小写(M 和 m)进行调整,或将格式移至模型级别。
添加 Unicode 或特殊符号(度、货币、上角标)
自定义格式字符串不支持十六进制或转义序列(例如 \u00B0, 0xB0或 °)。 若要包含符号,请在带引号的文字中插入(粘贴/键入)实际的 Unicode 字符,对于某些数字格式,如果它是尾随文字,则不加引号。
| 目标 | 格式字符串(模型/VBA 样式) | 输出示例 | 注释 |
|---|---|---|---|
| 在摄氏度之前添加空格 | 0.0" °C" |
23.4 °C |
空格位于引号内,以便保留。 |
| 添加百分比文本(非自动缩放) | 0.00" pct" |
12.34 pct |
不同于 % 占位符(乘以 100)。 |
| 以 KB 后缀显示千位数 | 0" KB" |
512 KB |
字面量“KB”。 |
| 具有显式符号的货币 | #,##0.00" €" |
1,234.00 € |
如果需要动态符号,首选基于区域设置的模型级货币。 |
| 微秒标签 | 0" µs" |
15 µs |
粘贴字符µ(U+00B5)。 |
| 无尾随单位的度量 | 0"°" |
90° |
未添加任何空间。 |
| 上标正方形 | 0" m²" |
25 m² |
粘贴 ² (字符码 U+00B2)。 |
小窍门
要插入符号,请执行以下步骤:
- Windows:按
Win + .(表情符号/符号面板)或使用 ALT 代码(例如,按住Alt,在数字键盘上键入0176°)。 - 从字符映射表中复制/粘贴。
字面值被放入格式字符串后,它被视为纯文本。
重要
不解释反斜杠(\)、 \uXXXX或 0xNN 转义模式 - Power BI 不会在自定义格式字符串中将其转换为 Unicode。 使用字符本身。 对于视觉级别(.NET)格式,规则相同:在引号内包括实际字符(例如 0.0" °C")。 反斜杠仅转义下一个字符;它不创建 Unicode 序列。
注意
对于动态符号逻辑(例如,基于切片器选择切换 °C/°F)使用返回文本值的 DAX 度量值或动态格式字符串度量值,而不仅仅是静态自定义格式字符串。
可以查看有关如何设置自定义值字符串格式的示例。
数字的用户定义格式表达式可以包含用分号分隔的一至三个部分。 如果分号之间没有任何内容,则不会显示缺少的部分,而是会看到 ""。 如果未指定分号,则使用正数格式。
下面是不同值字符串的不同格式的示例:
| 值 | 格式字符串 | 格式字符串 | 格式字符串 | 格式字符串 |
|---|---|---|---|---|
| 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 的数字,并带有百分号 ( % )。 小数分隔符后面始终显示两位数字。 |
| 科学 | 使用标准科学记数法。 |
其他日期/时间格式字符
以下补充字符适用(尚未涵盖):
| 字符 | Description |
|---|---|
| : | 时间分隔符(特定于区域设置)。 |
| / | 日期分隔符(特定于区域设置)。 |
| tt | AM/PM 指示符(12 小时制,大写)。 |
注意
其他已定义的日/月/年/小时/分钟/秒令牌在模型/元素级别遵循 VBA 样式语义,在显示层次遵循区分大小写的 .NET 语义。
下表标识了可用于创建用户定义的数字格式的字符 。
| 字符 | Description |
|---|---|
| 无 | 显示不带格式的数字。 |
| (0) | 数字占位符。 显示一个数字或零。 如果在格式字符串中出现 0 的位置处,表达式具有一个数字,则显示该数字。 否则,在该位置处显示零。 如果数字位数少于格式表达式中的零个数(小数任意一侧),则显示前导零或尾随零。 如果数字的位数多于小数分隔符后的零个数,则将数字四舍五入到与零个数相同的小数位数。 如果数字的位数多于小数分隔符前的零个数,则不加修改地显示多余的数字。 |
| .- . | 数字占位符。 显示一个数字或不显示任何内容。 如果在格式字符串中出现 # 的位置处,表达式具有一个数字,则显示该数字;否则,在该位置处不显示任何内容。 此符号的作用类似于零位占位符。 但是,如果数字位数等于或少于格式表达式中小数分隔符任意一侧的 # 字符数,则不会显示前导零或尾随零。 |
| .'. . | 小数点占位符。 在某些区域设置中,逗号用作小数点分隔符。 小数占位符确定小数分隔符前后显示的位数。 如果格式表达式只包含此符号左侧的数字符号,则小于 1 的数字以小数分隔符开头。 若要显示带有小数数字的前导零,请将 0 用作小数点分隔符左侧的第一个数字占位符。 在格式化的输出中用作小数点占位符的实际字符取决于系统所识别的数字格式。 |
| [.] | 百分比占位符。 将表达式乘以 100, 百分比字符 ( % ) 插入在格式字符串中出现的位置。 |
| .'. . | 数千个分隔符。 在某些区域设置中,句点用作千位分隔符。 千位分隔符用于将小数点左侧有四位或更多位数字的千位和百位分隔开来。 如果格式包含由数字占位符( 0 或 # )括起来的千位分隔符,则指定了千位分隔符的标准使用。 两个相邻的千位分隔符或紧邻小数分隔符左侧的千位分隔符(无论是否指定小数)表示“将数字除以 1000,并根据需要进行四舍五入”。例如,可以使用格式字符串“##0,,”将 1 亿表示为 100。 小于一百万的数字显示为 0。 除小数点分隔符左侧以外的任意位置有两个相邻的千位分隔符仅被视为指定使用千位分隔符。 用作格式化输出中的千位分隔符的实际字符取决于系统识别的数字格式。 |
| .'. . | 时间分隔符。 在某些区域设置中,其他字符可用于表示时间分隔符。 设置时间值格式时,时间分隔符用于分隔小时、分钟和秒。 在格式化的输出中用作时间分隔符的实际字符由你的系统设置来决定。 |
| .- . | 日期分隔符。 在某些区域设置中,其他字符可用于表示日期分隔符。 设置日期值格式时,日期分隔符用于分隔日期、月份和年份。 在格式化的输出中用作日期分隔符的实际字符由你的系统设置来决定。 |
| (E- E+ e- e+ ) | 科学记数格式。 如果格式表达式在 E-、E+、e- 或 e+ 后面至少包含一个数字占位符(0 或 #),则以科学记数法格式显示数字,并在数字及其指数之间插入 E 或 e。 数字占位符的数量确定指数的数字数量。 使用 E- 或 e- 在负指数旁边放置减号。 使用 E+ 或 e+ 在负指数旁边放置减号,在正指数旁边放置加号。 |
| - + $ ( ) | 显示这些文本字符。 通过在双引号内键入或粘贴 Unicode 字符(例如 °、€、μ、² 等),可以包括任何其他 Unicode 字符(例如 0.0" °C")。 仅在下一个字符会被解释的情况下,使用反斜杠来转义。这样不会引入十六进制或 \u 转义。 |
| .- . | 显示格式字符串中的下一个字符。 若要将具有特殊含义的字符显示为文字字符,请在该字符前加上一个反斜杠 (\)。 不会显示反斜杠本身。 使用反斜杠与将下一个字符放在双引号中的作用是相同的。 若要显示反斜杠,请使用两个反斜杠 (\\)。 不能显示为文本字符的字符示例包括日期格式和时间格式字符(a、c、d、h、m、n、p、q、s、t、w、y、/ 和 :)、数字格式字符(#、0、%、E、e、逗号和句点)以及字符串格式字符(@、&、<、>、!)。 |
| ("ABC") | 显示双引号 (" ") 中的字符串。 |
注意事项和限制
- 无法为字符串类型或布尔类型的字段设置自定义格式字符串。
相关内容
有关详细信息,请参阅: