FORMAT
根据所指定的格式将值转换为文本。
语法
FORMAT(<value>, <format_string>[, <locale_name>])
parameters
术语 | 定义 |
---|---|
值 | 计算结果为单个值的值或表达式。 |
format_string | 具有格式设置模板的字符串。 |
locale_name | (可选)函数要使用的区域设置的名称。 可能的值为 Windows API 函数 LocaleNameToLCID() 接受的字符串。 |
返回值
包含其格式由“format_string”来定义的“值”的字符串 。
注意
如果值为 BLANK,则函数返回空字符串。
如果“format_string”为 BLANK,则使用“常规数字”或“常规日期”格式(根据“值”数据类型)设置值的格式 。
备注
设置结果的格式时,预定义的格式字符串使用模型区域性属性。 默认情况下,根据计算机的用户区域设置设置模型区域性属性。 对于新的 Power BI Desktop 模型,可以在“选项”>“区域设置”>“模型语言”中更改模型区域性属性。 对于 Analysis Services,模型区域性根据实例最初定义的语言属性进行设置。
格式字符串作为 DAX FORMAT 函数的支持参数,以 Visual Basic(OLE 自动化)使用的格式字符串为基础,而不以 NET Framework 使用的格式字符串为基础。 因此,如果参数与任何定义的格式字符串都不匹配,则可能会出现意外结果或错误。 例如,不支持将“p”作为“Percent”的缩写。 作为 FORMAT 函数的参数提供,且未包括在预定义格式字符串中的字符串将作为自定义格式字符串的一部分或字符串文本处理。
要详细了解如何使用 FORMAT 指定区域设置,请观看此视频。
使用 FORMAT 将度量结果更改为文本数据类型。 如果度量结果最初为数值数据类型,则使用 FORMAT 时,无法在值部分需要数值数据类型的视觉对象上使用度量值,如图表所示。 在 Power BI 中,也可以对度量值使用动态格式字符串,指定保留度量值数值数据类型的条件格式字符串。
在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
示例
格式字符串
= FORMAT( 12345.67, "General Number")
= FORMAT( 12345.67, "Currency")
= FORMAT( 12345.67, "Fixed")
= FORMAT( 12345.67, "Standard")
= FORMAT( 12345.67, "Percent")
= FORMAT( 12345.67, "Scientific")
返回:
12345.67 “General Number”显示不带格式的数字 。
$12,345.67 “Currency”显示带货币区域设置格式的数字 。 此处的示例显示默认的美国货币格式。
12345.67 “Fixed”显示小数点分隔符左侧至少一位,小数点分隔符右侧两位 。
12,345.67 “Standard”显示小数点分隔符左侧至少一位,小数点分隔符右侧两位,并包括千位分隔符。 此处的示例显示默认的美国数字格式。
1,234,567.00 % “Percent”将数字显示为带格式的百分比(乘以 100),百分比符号在数字的右侧并用一个空格分隔 。
1\.23E+04 “Scientific”以科学计数法显示数字,并带有两位十进制数字 。
具有可选 locale_name 的日期/时间
= FORMAT( dt"2020-12-15T12:30:59", BLANK(), "en-US" )
= FORMAT( dt"2020-12-15T12:30:59", BLANK(), "en-GB" )
= FORMAT( dt"2020-12-15T12:30:59", "mm/dd/yyyy", "en-GB" )
返回:
12/15/2020 12:30:59 PM,其中月份在日期之前,时间为 12 小时格式。
15/12/2020 12:30:59,其中日期在月份之前,时间为 24 小时格式。
12/15/2020 12:30:59,其中月份在日期之前,时间为 24 小时格式。 由于指定了非区域设置依赖格式字符串,因此不会应用区域设置并返回非区域设置格式。
预定义的数字格式
可在 format_string 参数中指定以下预定义的数字格式:
格式 | 说明 |
---|---|
"General Number" |
显示不带千位分隔符的数字。 |
"Currency" |
显示带有千位分隔符的数字(如果适用);显示小数点分隔符右侧两位数。 输出基于系统区域设置。 |
"Fixed" |
小数点分隔符左侧至少显示一个数字,右侧至少显示两个数字。 |
"Standard" |
显示带有千位分隔符的数字,小数点分隔符左侧至少一位数,小数点分隔符右侧两位数。 |
"Percent" |
显示乘以 100 的数字,并在右侧立即附加百分号 (%);始终显示小数点分隔符右侧两位数。 |
"Scientific" |
使用标准科学表示法,提供两位有效数。 |
"Yes/No" |
如果数字是 0,则显示 No;否则,显示 Yes。 |
"True/False" |
如果数字是 0,则显示 False;否则,显示 True。 |
"On/Off" |
如果数字是 0,则显示 Off;否则,显示 On。 |
自定义数字格式
数字的自定义格式表达式可包含用分号分隔的一至三个部分。 如果格式字符串参数包含一个命名数字格式,则只允许有一部分。
如果使用 | 结果为 |
---|---|
仅一个部分 | 格式表达式应用于所有值。 |
两部分 | 第一部分应用于正值和零,第二部分应用于负值。 |
三部分 | 第一部分应用于正值,第二部分应用于负值,第三部分应用于零。 |
"$#,##0;($#,##0)"
如果包含分号,而分号之间没有内容,则使用正值格式定义缺失部分。 例如,下面的格式用第一部分的格式显示正值和负值,如果值为零,则显示“Zero”。
"$#,##0"
如果使用分号且分号之间没有内容,则采用正值格式显示缺失的部分。
自定义数字格式字符
可在 format_string 参数中指定以下自定义数字格式字符:
字符 | 说明 |
---|---|
无 | 显示不带格式的数字。 |
(0) | 数字占位符。 显示一个数字或零。 如果表达式在格式字符串中出现 0 的位置有一个数字,则显示它;否则,将在该位置显示 0。如果数字的位数少于格式表达式中 0 的个数(在小数两侧),则显示前导零或尾随零。 如果小数点分隔符右侧的数字位数多于格式表达式中小数点分隔符右侧的零个数,则将该数字舍入为与零个数相同的小数位数。 如果小数点分隔符左侧的数字位数多于格式表达式中小数点分隔符左侧的零个数,则不加修改地显示额外的数字。 |
(#) | 数字占位符。 显示一个数字或不显示任何内容。 如果在格式字符串中出现 # 的位置处,表达式具有一个数字,则显示该数字;否则,在该位置处不显示任何内容。 此符号的工作原理与 0 数字占位符类似,不同之处在于,如果数字位数等于或少于格式表达式中小数点分隔符任意一侧的 # 字符数,则不会显示前导零或尾随零。 |
(.) | 小数点占位符。 在某些区域设置中,逗号用作小数点分隔符。 小数点占位符用于确定小数点分隔符左侧和右侧显示的位数。 如果格式表达式只包含此符号左侧的数字符号,则小于 1 的数字以小数点分隔符开头。 若要显示带有小数数字的前导零,请将 0 用作小数点分隔符左侧的第一个数字占位符。 在格式化的输出中用作小数点占位符的实际字符取决于系统所识别的数字格式。 |
(%) | 百分比占位符。 将表达式乘以 100, 百分比字符 (%) 插入在格式字符串中出现的位置。 |
(,) | 千位分隔符。 在某些区域设置中,句点用作千位分隔符。 千位分隔符用于在小数点分隔符左侧具有四位或更多位数的数字中分隔千位与百位。 如果格式包含由数字占位符(0 或 #)包围的千位分隔符,则指定千位分隔符的标准用法。 两个相邻千位分隔符或紧接在小数点分隔符左侧的千位分隔符(无论是否指定小数)表示“通过将数字除以 1000 来缩小数字,并根据需要进行舍入”。例如,可以使用格式字符串“##0,,”将 100,000,000 表示为 100。 小于 1,000,000 的数字显示为 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") | 显示双引号 (" ") 中的字符串。 |
预定义的日期/时间格式
可在 format_string 参数中指定以下预定义的日期/时间格式。 使用上述格式之外的格式时,它们会被解释为自定义日期/时间格式:
格式 | 说明 |
---|---|
"General Date" |
显示日期和/或时间。 例如,2008/3/12 上午 11:07:31。 日期显示取决于应用程序的当前区域性值。 |
"Long Date" 或 "Medium Date" |
根据你当前区域性的长日期格式显示日期。 例如,2008 年 3 月 12 日,星期三。 |
"Short Date" |
使用你当前区域性的短日期格式显示日期。 例如,2008/3/12。 |
"Long Time" 或 |
使用你当前区域性的长时间格式显示时间;通常包括小时、分钟、秒。 例如,上午 11:07:31。 |
"Medium Time" |
以 12 小时格式显示时间。 例如,上午 11:07。 |
"Short Time" |
以 24 小时格式显示时间。 例如,11:07。 |
自定义日期/时间格式
可在 format_string 中指定以下格式字符来创建自定义日期/时间格式:
字符 | 说明 |
---|---|
(:) | 时间分隔符。 在某些区域设置中,其他字符可用于表示时间分隔符。 设置时间值格式时,时间分隔符用于分隔小时、分钟和秒。 在格式化的输出中用作时间分隔符的实际字符由你的系统设置来决定。 |
(/) | 日期分隔符。 在某些区域设置中,其他字符可用于表示日期分隔符。 设置日期值格式时,日期分隔符用于分隔日期、月份和年份。 在格式化的输出中用作日期分隔符的实际字符由你的系统设置来决定。 |
(\) | 反斜杠。 将下一个字符显示为文字字符。 因此,它不会被解释为格式字符。 |
(") | 双引号。 将显示括在双引号中的文本。 因此,它不会被解释为格式字符。 |
c | 将日期显示为 ddddd ,并按此顺序将时间显示为 ttttt 。 如果日期序列号没有小数部分,则只显示日期信息;如果没有整数部分,则只显示时间信息。 |
d | 将日期显示为不带前导零的数字 (1-31)。 |
dd | 将日期显示为带有前导零的数字 (01-31)。 |
ddd | 以缩写形式 (Sun–Sat) 显示日期。 已本地化。 |
dddd | 以全称形式 (Sunday–Saturday) 显示日期。 已本地化。 |
ddddd | 将日期显示为完整日期(包括日、月和年),根据用户系统的短日期格式设置进行格式化。 默认短日期格式为 mm/dd/yyyy 。 |
dddddd | 将日期序列号显示为完整日期(包括日、月和年),根据系统所识别的长日期设置进行格式化。 默认的长日期格式为 dddd, mmmm d, yyyy 。 |
w | 将一周中的天显示为数字(1 代表星期天,依次排列到 7,7 代表星期六)。 |
ww | 将一年中的周显示为数字 (1-54)。 |
m | 将月份显示为不带前导零的数字 (1-12)。 如果 m 紧接在 h 或 hh 之后,则显示分钟而不是月份。 |
MM | 将月份显示为带有前导零的数字 (01-12)。 如果 mm 紧接在 h 或 hh 之后,则显示分钟而不是月份。 |
mmm | 以缩写形式 (Jan–Dec) 显示月份。 已本地化。 |
mmmm | 以全称形式 (January–December) 显示月份。 已本地化。 |
q | 将一年中的季度显示为数字 (1-4)。 |
y | 将每年的某一日显示为数字 (1-366)。 |
yy | 将年份显示为 2 位数字 (00-99)。 |
yyyy | 将年份显示为 4 位数字 (100-9999)。 |
h | 将小时显示为不带前导零的数字 (0-23)。 |
hh | 将小时显示为带有前导零的数字(00-23)。 |
n | 将分显示为不带前导零的数字 (0-59)。 |
nn | 将分显示为带有前导零的数字(00-59)。 |
s | 将秒显示为不带前导零的数字 (0-59)。 |
ss | 将秒显示为带有前导零的数字 (00-59)。 |
ttttt | 将时间显示为完整的时间(包括小时、分钟和秒),使用系统所识别的时间格式定义的时间分隔符进行格式化。 如果选择了前导零选项,并且时间早于上午(或下午)10:00,则显示前导零。默认时间格式为 h:mm:ss 。 |
AM/PM | 使用 12 小时制时钟并显示大写的 AM 以及中午之前的任意小时;显示大写的 PM 以及中午到晚上 11:59 之间的任意小时。 |
AM/PM | 使用 12 小时制并为中午之前的任何小时显示小写的 AM;为中午到晚上 11:59 之间的任何小时显示小写的 PM。 |
A/P | 使用 12 小时制并为中午之前的任何小时显示大写的 A;为中午和晚上 11:59 之间的任何小时显示大写的 P。 |
A/P | 使用 12 小时制并为中午之前的任何小时显示小写的 A;为中午到晚上 11:59 之间的任何小时显示小写的 P。 |
AMPM | 使用 12 小时制,并为中午之前的任何小时显示系统定义的 AM 字符串文本;为中午和晚上 11:59 之间的任何小时显示系统定义的 PM 字符串文本。AMPM 可以为大写或小写,但显示的字符串的大小写与系统设置定义的字符串匹配。 默认格式为 AM/PM。 如果系统设置为 24 小时制,则字符串通常设置为空字符串。 |
日期/时间格式使用当前用户区域设置来设置字符串的格式。 例如,假设日期为 2020 年 6 月 25 日。 当使用格式字符串“m/d/yyyy”设置格式时,它将为:
- 用户区域设置为美国 (en-US):“6/25/2020”
- 用户区域设置为德国 (de-DE):“6.25.2020”
自定义日期/时间格式示例
以下示例使用日期/时间:2020 年 6 月 25 日星期四下午 1:23:45。 德语 (de-DE) 采用 24 小时制系统。 不存在 AM/PM 的等效项。
格式 | 结果 (en-US) | 结果 (de-DE) |
---|---|---|
"c" |
06/25/2020 13:23:45 | 25.06.2020 13:23:45 |
"d" |
25 | 25 |
"dd" |
25 | 25 |
"ddd" |
Thu | 应做事项 |
"dddd" |
星期四 | Donnerstag |
"ddddd" |
06/25/2020 | 25.06.2020 |
"dddddd" |
Thursday, June 25, 2020 | Donnerstag, 25. Juni 2020 |
"w" |
5 | 5 |
"ww" |
26 | 26 |
"m" |
6 | 6 |
"mm" |
06 | 06 |
"mmm" |
Jun | Jun |
"mmmm" |
June | Juni |
"q" |
2 | 2 |
"y" |
177 | 177 |
"yy" |
20 | 20 |
"yyyy" |
2020 | 2020 |
"""Year"" yyyy" |
Year 2020 | Year 2020 |
"yyyy \Qq" |
2020 Q2 | 2020 Q2 |
"dd/mm/yyyy" |
2020/06/25 | 25.06.2020 |
"mm/dd/yyyy" |
06/25/2020 | 06.25.2020 |
"h:nn:ss" |
13:23:45 | 13:23:45 |
"h:nn:ss AMPM" |
1:23:45 PM | 1:23:45 |
"hh:nn:ss" |
13:23:45 | 13:23:45 |
"hh:nn:ss AMPM" |
01:23:45 PM | 01:23:45 |
"ttttt" |
13:23:45 | 13:23:45 |
"ttttt AMPM" |
13:23:45 PM | 13:23:45 |
"mm/dd/yyyy hh:nn:ss AMPM" |
06/25/2020 01:23:45 PM | 6.25.2020 01:23:45 |