加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Power Query M函数(3)--数据类型转换、元数据及错误处理

(2017-05-24 15:59:50)
标签:

it

教育

分类: PowerQuery

http://s16/mw690/005uckTVzy7bkaPBlxlaf&690Query M函数(3)--数据类型转换、元数据及错误处理" TITLE="Power Query M函数(3)--数据类型转换、元数据及错误处理" />

http://s3/mw690/005uckTVzy7bcDV1mYW42&690Query M函数(3)--数据类型转换、元数据及错误处理" TITLE="Power Query M函数(3)--数据类型转换、元数据及错误处理" />

 
Power Query以往文章:

 

数据类型转换 

M函数有一类负责数据类型转换的函数,此类函数列表如下:

 

数值类型:

函数

描述

Number.FromText(text as text) as number

将文本型转换为数值型

Number.ToText(number as number) as text

将数值型转换为文本型

Number.From(value as any) as number

将参数值转换为数值

Int32.From(value as any) as number

将参数值转换为32位整数值

Int64.From(value as any) as number

将参数值转换为64位整数值

Single.From(value as any) as number

将参数值转换为单一数值

Double.From(value as any) as number

将参数值转换为双数值

Decimal.From(value as any) as number

将参数值转换为小数值

Currency.From(value as any) as number

将参数值转换为货币值

 

文本类型:

函数

描述

Text.From(value as any) as text

将参数值转换为文本值

 

逻辑类型:

函数

描述

Logical.FromText(text as text) as logical

将文本值转换为逻辑值

Logical.ToText(logical as logical) as text

将逻辑值转换为文本值

Logical.From(value as any) as logical

将参数值转换为逻辑值

 

日期、时间、日期时间以及时区类型:

函数(Date\DateTime\DateTimeZone

描述

.FromText(text as text) as date, time, datetime, or datetimezone

将文本值转换为日期时间类数值

.ToText(date, time, dateTime, or dateTimeZone as date, time, datetime, or datetimezone) as text

将日期时间类数值转换为文本值

.From(value as any)

将参数值转换为日期时间类数值

.ToRecord(date, time, dateTime, or dateTimeZone as date, time, datetime, or datetimezone)

将日期时间类数值转换为包含各部分的记录

 

元数据(中继数据):

元数据是一种描述数据的数据,它可以用来描述数据属性等相关信息。元数据以记录的形式表示。元数据记录中的字段用来存储元数据值。从系统角度讲,其实每个值都有一个与其关联的元数据记录,当没有为某个值指定特定的元数据记录时,元数据记录为空(即没有字段的记录)。在实际应用中使用“值 meta [record]”的方式为一个值指定与其关联的元数据。下例就是为文本值“Mozart”指定“Rating”以及“Tags”元数据记录的方法。

 

例:为文本值"Mozart"关联元数据记录

"Mozart" meta [ Rating = 5,  

Tags = {"Classical"} ]

 

使用“Value.Metadata”函数可以将元数据记录中的值引用出来使用。下例就是将与“Mozart”值关联的元数据记录中的“Rating”字段中的值引用出来并付给“ComposerRating”使用的方法。

 

例:元数据记录值的引用方法

    Composer = "Mozart" meta [ Rating = 5, Tags = {"Classical"} ], 

    ComposerRating = Value.Metadata(Composer)[Rating]   // 5 

]

 

元数据不能被用来关联计算结果,比如当使用“&”运算符关联两个文本值时,得到的计算结果值的元数据记录为空。

可以使用“Value.RemoveMetadata”函数清空值中的元数据记录,使用“Value.ReplaceMetadata”函数修改值中的元数据记录内容。

 

错误处理:

在M函数中,当某个表达式无法得到正确的计算结果时我们可以用“error”来发生错误事件。用“error”发生的错误事件可以用“Try”表达式来获取,并对其进行处理及显示详细错误信息。

 

“Try”表达式:

“Try”表达式可以将由error发生的错误信息封装在一个记录内。下例就是使用“Try”处理由error发生的错误事件的案例。

 

例:

try error "negative unit count" 

 

上例会生成一个由[HasError]、[Error]以及[Meesage]三个字段构成的记录,字段中的值用来对错误进行解释说明。

 

“Otherwise”运算符:

一般情况下上述案例中,“Try”表达式执行后产生的记录内容如下:

http://s2/mw690/005uckTVzy7bkc3zLah51&690Query M函数(3)--数据类型转换、元数据及错误处理" TITLE="Power Query M函数(3)--数据类型转换、元数据及错误处理" />

但我们也可以使用“otherwise”运算符来重新定义Try的显示结果。

 

例:

try error "negative unit count" otherwise 42   // equals 42

 

错误处理案例:

以下案例是一个Try的实际应用案例:
let Sales = 

       

        ProductName = "Fishing rod",  

            Revenue = 2000, 

            Units = 1000, 

            UnitPrice = if Units = 0 then error "No Units

                    else Revenue / Units 

        ], 

        textUnitPrice = try Number.ToText(Sales[UnitPrice]), 

    Label = "Unit Price: " &  

        (if textUnitPrice[HasError] then textUnitPrice[Error][Message] 

        else textUnitPrice[Value]) 

in 

    Label

 

上述案例的执行结果为"Unit Price: 2",若将Sales记录中的Units改为0,则显示结果为"Unit Price: No Units"

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有