格式

适用于:计算列计算表度量值视觉计算

根据指定的格式将值转换为文本。

语法

DAX
FORMAT(<value>, <format_string>[, <locale_name>])

参数

术语 定义
value 计算结果为单个值的值或表达式。
format_string 具有格式设置模板的字符串。
locale_name (可选)函数要使用的区域设置的名称。 可能的值为 Windows API 函数 LocaleNameToLCID()接受的字符串。

返回值

一个字符串,包含格式化为 format_string定义的 value

备注

如果 value 为 BLANK,该函数将返回一个空字符串。

如果 format_string 为 BLANK,则值为“常规数字”或“常规日期”格式(根据 value 数据类型)。

言论

  • 预定义的格式字符串在设置结果格式时使用模型区域性属性。 默认情况下,根据计算机的用户区域设置设置模型区域性属性。 对于新的 Power BI Desktop 模型,可以在选项 > 区域设置 > 模型语言中更改模型区域性属性。 对于 Analysis Services,模型区域性是根据实例最初定义的 Language 属性设置的。

  • 作为 DAX FORMAT 函数参数支持的格式字符串基于 Visual Basic(OLE 自动化)使用的格式字符串,而不是 .NET Framework 使用的格式字符串。 因此,如果参数与任何定义的格式字符串不匹配,则可能会收到意外结果或错误。 例如,不支持“p”作为“Percent”的缩写。 作为 FORMAT 函数的参数提供的字符串未包含在预定义格式字符串列表中,这些字符串作为自定义格式字符串的一部分或字符串文本进行处理。

  • 若要详细了解如何使用 FORMAT 指定区域设置,请查看此 视频

  • 使用 FORMAT 会将度量结果更改为文本数据类型。 如果度量值结果最初是数值数据类型,则使用 FORMAT 时,不能在值部分需要数值数据类型的视觉对象上使用度量值,例如图表。 在 Power BI 中,还可以对度量值使用 动态格式字符串, 指定一个条件格式字符串来维护度量值的数值数据类型。

  • 在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

例子

设置字符串格式

DAX
= 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“常规编号”显示没有格式的数字。

$12,345.67“Currency”显示带有货币区域设置格式的数字。 此处的示例显示了默认的美国货币格式。

12345.67“固定”显示小数分隔符左侧至少一位数字,小数分隔符右侧显示两位数字。

12,345.67“标准”显示小数分隔符左侧至少一位数字,小数点分隔符右侧显示两位数字,包括千位分隔符。 此处的示例显示了默认的美国数字格式。

1,234,567.00 %“百分比”将数字显示为百分比(乘以 100),其格式和数字右侧的百分比符号用一个空格分隔。

1.23E+04“科学”以科学表示法显示数字,其中包含两个十进制数字。

带可选locale_name的日期/时间

DAX
= 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" )

返回:

2020/12/15 下午 12:30:59 当月前一天和时间是 12 小时格式。

2020/15/12 12:30:59 月前的日期和时间是 24 小时格式。

2020/12/15 12:30:59 当月之前的日期和时间是 24 小时格式。 由于指定了非区域设置依赖格式字符串,因此不会应用区域设置并返回非区域设置格式。

预定义的数字格式

可以在 format_string 参数中指定以下预定义的数字格式:

Format 描述
"General Number" 显示没有千位分隔符的数字。
"Currency" 显示具有千位分隔符的数字(如果适用);显示小数分隔符右侧的两位数字。 输出基于系统区域设置。
"Fixed" 在小数点分隔符右侧至少显示一位数字和两位数字。
"Standard" 显示带千位分隔符的数字,左边至少有一位数字,小数点分隔符右侧至少有一位数字。
"Percent" 显示数字乘以 100,百分号(%)紧随右侧追加;始终显示小数分隔符右侧的两位数字。
"Scientific" 使用标准科学表示法,提供两个有效数字。
"Yes/No" 如果数字为 0,则显示“否”;否则,显示“是”。
"True/False" 如果数字为 0,则显示 False;否则,显示 True。
"On/Off" 如果数字为 0,则显示 Off;否则,显示“打开”。

自定义数值格式

数字的自定义格式表达式可以有一到三个部分,用分号分隔。 如果格式字符串参数包含一个命名的数字格式,则只允许一个节。

如果使用 结果为
仅一节 格式表达式适用于所有值。
两个部分 第一节适用于正值和零,第二部分适用于负值。
三个部分 第一节适用于正值,第二部分适用于负值,第三部分应用于零。
DAX
"$#,##0;($#,##0)"

如果将分号包含在两者之间没有任何值,则使用正值的格式定义缺失部分。 例如,以下格式使用第一节中的格式显示正值和负值,如果值为零,则显示“零”。

DAX
"$#,##0"

如果包含分号,且它们之间没有任何内容,则使用正值的格式显示缺失部分。

自定义数字格式字符

可以在 format_string 参数中指定以下自定义数字格式字符:

字符 描述
没有 显示没有格式的数字。
0 数字占位符。 显示数字或零。 如果表达式在格式字符串中显示 0 的位置有一个数字,则显示它;否则,在该位置显示零。如果数字的位数少于格式表达式中的零(在小数的两侧),则显示前导或尾随零。 如果小数点分隔符右侧的数字数多于格式表达式中小数分隔符右侧的零,则数字将数字舍入为与零相等的十进制位数。 如果小数分隔符左侧的数字数大于格式表达式中小数分隔符左侧的零,则显示额外的数字而不进行修改。
# 数字占位符。 显示数字或无内容。 如果表达式在格式字符串中显示 # 的位置有一个数字,则显示它;否则,不在该位置显示任何内容。 此符号的工作方式类似于 0 位占位符,但是如果数字与格式表达式中小数分隔符两侧的 #字符相同或更少,则不显示前导和尾随零。
. 十进制占位符。 在某些区域设置中,逗号用作小数分隔符。 小数占位符确定小数点分隔符左侧和右侧显示的数字数。 如果格式表达式仅包含此符号左侧的数字符号,则小于 1 的数字以小数分隔符开头。 若要显示以小数显示的前导零,请使用 0 作为小数分隔符左侧的第一个数字占位符。 格式输出中用作小数占位符的实际字符取决于系统识别的数字格式。
% 百分比占位符。 表达式乘以 100。 百分比字符(%)插入其出现在格式字符串中的位置。
, 千位分隔符。 在某些区域设置中,句点用作千位分隔符。 千位分隔符在小数点分隔符左侧有四个或更多个位置的数字中,将数千个分隔符与数百个分隔符分开。 如果格式包含由数字占位符括起来的千位分隔符(0#),则指定了对千位分隔符的标准使用。 两个相邻的千位分隔符或紧邻小数点分隔符左侧的千位分隔符(无论是否指定小数点)表示“通过将数字除以 1000 来缩放数字,并根据需要舍入。例如,可以使用格式字符串“##0”将 1 亿表示为 100。 小于 100 万的数字显示为 0。 除小数点分隔符左侧以外的任意位置有两个相邻的千位分隔符被视为指定千位分隔符的使用。 用作格式化输出中的千位分隔符的实际字符取决于系统识别的数字格式。
: 时间分隔符。 在某些区域设置中,其他字符可用于表示时间分隔符。 当设置时间值的格式时,时间分隔符分隔小时、分钟和秒。 用作格式化输出中的时间分隔符的实际字符由系统设置确定。
/ 日期分隔符。 在某些区域设置中,其他字符可用于表示日期分隔符。 日期分隔符分隔日期值的格式时,日期、月份和年份。 用作格式化输出中的日期分隔符的实际字符由系统设置确定。
E- E+ e- e+ 科学格式。 如果格式表达式至少包含一个数字占位符(0#),E-、E+、e-或 e+右侧,则数字以科学格式显示,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 周六)。
ww 将年份的一周显示为数字(1-54)。
m 将月份显示为没有前导零的数字(1-12)。 如果 m 紧跟 hhh,则显示分钟而不是月份。
mm 将月份显示为带前导零的数字(01-12)。 如果 mm 紧跟 hhh,则显示分钟而不是月份。
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 或下午 10:00 之前,将显示前导零。默认时间格式为 h:mm:ss
AM/PM 使用 12 小时制,并在中午前任意小时显示大写 AM;显示一个大写的 PM,中午到下午 11:59 之间任意一小时。
am/pm 使用 12 小时制,并在中午前任意一小时显示小写 AM;显示一个小写的 PM,中午到晚上 11:59 之间有一个小时。
A/P 使用 12 小时制,并在中午前任意一小时显示大写 A:显示一个大写 P,中午到下午 11:59 之间任意一小时。
a/p 使用 12 小时制,并在中午前任意小时显示小写 A:显示一个小写 P,中午到晚上 11:59 之间的任意小时。
AMPM 使用 12 小时制,并在中午前任意小时显示系统定义的 AM 字符串文本;显示系统定义的 PM 字符串文本,中午到晚上 11:59 之间的任意小时,AMPM 可以是大写或小写,但显示的字符串的大小写与系统设置定义的字符串匹配。 默认格式为 AM/PM。 如果系统设置为 24 小时制,则字符串通常设置为空字符串。

日期/时间格式使用当前用户区域设置来设置字符串的格式。 例如,请考虑日期 2020 年 6 月 25 日。 当使用格式字符串“m/d/yy”进行格式化时,它将是:

  • 用户区域设置是美国(en-US): “2020/6/25”
  • 用户区域设置是德国(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" 2020 年 6 月 25 日星期四 唐纳斯塔格, 25. Juni 2020
"w" 5 5
"ww" 26 26
"m" 6 6
"mm" 06 06
"mmm" 六月 六月
"mmmm" 六月 朱尼
"q" 2 2
"y" 177 177
"yy" 20 20
"yyyy" 2020 2020
"""Year"" yyyy" 2020 年 2020 年
"yyyy \Qq" 2020 年第 2 季度 2020 年第 2 季度
"dd/mm/yyyy" 25/06/2020 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 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 13:23:45
"mm/dd/yyyy hh:nn:ss AMPM" 2020/06/25 下午 01:23:45 6.25.2020 01:23:45