Excel DAX - 使用文本和日期

DAX可用于涉及与文本一起工作,提取和组合日期和时间值或根据条件创建值的方案.您可以使用DAX : 执行以下操作;

  • 通过连接在表中创建一个键列.

  • 根据从文本日期中提取的日期部分撰写日期.

  • 定义自定义日期格式.

  • 使用公式更改数据类型.

    • 将实数转换为整数.

    • 将实数,整数或日期转换为字符串.

    • 将字符串转换为实数或日期.

通过连接创建密钥列

PowerPivot中的数据模型只允许一个密钥列.它不支持您可能在外部数据源中找到的复合键.因此,如果数据源中的表中存在任何复合键,则需要将它们组合到数据模型中表的单个键列中.

您可以使用DAX函数CONCATENATE将两列组合成数据模型中表中的单个列. DAX函数CONCATENATE将两个文本字符串连接成一个文本字符串.连接的项目可以是表示为文本的文本,数字或布尔值,也可以是这些项目的组合.如果列包含适当的值,您也可以使用列引用.

 
 = CONCATENATE([Column1],[Column2])

DAX CONCATENATE函数只接受两个参数.如果任何参数不是文本数据类型,则它将转换为文本. DAX CONCATENATE函数返回连接的字符串.

基于日期从文本日期提取的部分日期

Power Pivot中的数据模型支持数据类型日期时间用于日期和时间值.处理日期和/或时间值的DAX函数需要参数的日期时间数据类型.

如果您的数据源包含不同格式的日期,则需要首先提取日期使用DAX公式的零件并组合这些零件以构成有效的DAX日期时间数据类型.

您可以使用以下DAX函数来提取和组合日期和减号;

DATE : 以datetime格式返回指定日期.

DATEVALUE : 将文本形式的日期转换为日期时间格式的日期.

TIMEVALUE : 将文本格式的时间转换为日期时间格式的时间.

定义自定义日期格式

假设数据源中的日期未表示按标准格式.您可以定义自定义日期格式以确保正确处理值. DAX FORMAT函数允许您根据指定的格式将值转换为文本.

 
 FORMAT(< value>,< format_string>)

FORMAT函数返回一个字符串,其中包含格式化为format_string定义的值.

您可以使用预定义的日期和时间格式或您可以为FORMAT函数的参数format_string创建用户定义的日期和时间格式.

以下是预定义的日期和时间格式名称.如果您使用这些预定义字符串以外的字符串,它们将被解释为自定义日期和时间格式.

S.不.Format_String&说明
1

"一般日期"

显示日期和/或时间.例如,2/10/2015 10:10:32 AM

2

"长日期"或"中期日期"

根据日期显示日期长日期格式.例如,2016年3月7日星期三

3

"短日期"

使用短日期格式显示日期.例如,2/03/2016

4

"长时间"

使用长时间格式显示时间.

通常包括小时,分钟和秒.

例如,上午10:10:32

5

"中等时间"

以12小时格式显示时间.

例如,09:30

6

"短时间"

以24小时格式显示时间.

例如,14:15

或者,您可以使用下表中的字符创建用户定义的日期/时间格式.

S.不.字符&说明
1

:

时间分隔符.

时间分隔符.格式化时间值时分隔小时,分钟和秒.

2

/

日期分隔符.

分隔格式化日期值的日,月和年.

3

用于表示以下字符应作为单个字符读取 - 信件格式,不考虑任何尾随字母.也用于表示单字母格式被读取为用户定义的格式.

以下是各种角色的详细信息.

  • %d : 将日期显示为不带前导零的数字(例如5).

  • %dd : 将日期显示为带前导零的数字(例如05).

  • %ddd : 将日期显示为缩写(例如Sun).

  • %dddd : 将日期显示为全名(例如星期日).

  • %M : 将月份显示为不带前导零的数字(例如,1月表示为1).

  • %MM : 将月份显示为前导零的数字(例如,1月表示为01).

  • %MMM : 将月份显示为缩写(例如,1月表示为1月).

  • %MMMM : 将月份显示为完整月份名称(例如,1月份).

  • %gg : 显示句点/时代字符串(例如A.D.).

  • %h : 使用12小时制(例如1:15:15 PM)将小时显示为不带前导零的数字.如果这是用户定义的数字格式中的唯一字符,请使用%h .

  • %hh : 使用12小时制(例如01:15:15 PM)将小时显示为带前导零的数字.

  • %H : 使用24小时制(例如13:15:15,1:15:15)将小时显示为不带前导零的数字.如果这是用户定义的数字格式中的唯一字符,请使用%H.

  • %HH : 使用24小时制将小时显示为带前导零的数字(例如13:15:15,1:15:15).

  • %m : 将分钟显示为不带前导零的数字(例如2:1:15).如果这是用户定义的数字格式中的唯一字符,请使用%m.

  • %mm : 将分钟显示为带前导零的数字(例如2:01:15).

  • %s : 将第二个显示为不带前导零的数字(例如2:15:5).如果这是用户定义的数字格式中的唯一字符,请使用%s.

  • %ss : 将第二个显示为带前导零的数字(例如2:15:05).

  • %f : 显示秒数.对于例如 ff 显示百分之几秒,而 ffff 显示万分之几秒.您最多可以使用用户定义格式的七个 f 符号.如果这是用户定义的数字格式中的唯一字符,请使用%f .

  • %t : 使用12小时制,在中午前的任何一小时显示大写字母A;在中午和晚上11:59之间的任何一小时显示大写字母P.如果这是用户定义的数字格式中的唯一字符,请使用%t.

  • %tt : 对于使用12小时制的语言环境,在中午前的任何一小时显示大写的AM;在中午和晚上11:59之间的任何时间显示一个大写的PM.对于使用24小时制的语言环境,不显示任何内容.

  • %y : 显示没有前导零的年份编号(0-9).如果这是用户定义的数字格式中的唯一字符,请使用%y .

  • %yy : 如果适用,以两位数字格式显示年份,前导零.

  • %yyy : 以四位数字格式显示年份.

  • %yyyy : 以四位数字格式显示年份.

  • %z : 显示没有前导零的时区偏移(例如-8).如果这是用户定义的数字格式中的唯一字符,请使用%z .

  • %zz : 显示.时区偏移带前导零(例如-08)

  • %zzz : 显示完整的时区偏移量(例如-08:00).

如您所见,格式化字符串区分大小写.通过使用不同的大小写可以获得不同的格式.

更改DAX公式输出的数据类型

在DAX公式中,输出的数据类型由源列确定,您无法显式指定结果的数据类型.这是因为最佳数据类型由Power Pivot确定.但是,您可以使用Power Pivot执行的隐式数据类型转换来操作输出数据类型.否则,您可以使用某些DAX函数来转换输出数据类型.

使用隐式数据类型转换

  • 要将日期或数字字符串转换为数字,请乘以1.0.例如,=(TODAY()+ 5)* 1.0.此公式计算当前日期加5天并将结果转换为整数值.

    • 转换日期,数字或者字符串的货币值,将值与空字符串连接起来.例如,= Today()& ""

使用数据的DAX函数类型转换

您可以使用DAX函数进行以下 :

  • 将实数转换为整数.

  • 将实数,整数或日期转换为字符串.

  • 将字符串转换为实数或日期.

您将在以下部分中了解到这一点.

将实数转换为整数

您可以使用以下DAX函数将实数转换为整数和减号;

ROUND(< number>,< num_digits>) : 将数字舍入到指定的位数并返回一个十进制数.

CEILING(< number>,< significant>) : 将数字向上舍入到最接近的整数或最接近的有效倍数并返回十进制数.

FLOOR(< number>,< significant>) : 将数字向下舍入,向零舍入到最接近的有效倍数并返回十进制数.

将实数,整数或日期转换为字符串

您可以使用以下DAX函数将实数,整数或日期转换为字符串和减号;

FIXED(< number>,[< decimals>], [< no_comma>]) : 舍入一个数字并将结果作为文本返回.小数点右边的位数是2或指定的小数位数.结果是使用逗号或可选地没有逗号.

FORMAT(< value>,< format_string>) : 根据指定的格式将值转换为文本.

您已经学习了如何使用Format函数将日期转换为字符串.

将字符串转换为实数或日期

您可以使用以下DAX函数将字符串转换为实数或日期和减号;

VALUE(<text>) : 将表示数字的文本字符串转换为数字.

DATEVALUE(date_text) : 将文本形式的日期转换为日期时间格式的日期.

TIMEVALUE(time_text) : 将文本格式的时间转换为日期时间格式的时间.