SQLBI_精通DAX课程笔记_02_数据类型

PowerBi 和 Analysis Services 在数据加载环节,无论数据源是什么类型,都会自动将数据转化为DAX可用的数据类型集。

以下链接为微软官方文档,也可以参考浏览:

https://learn.microsoft.com/zh-cn/power-bi/connect-data/desktop-data-types

一:数据类型

1.1 数字类型

数字类型包含了,Integer(64 bit) 即整数型,,Decimal 十进制 (floating point) 即浮点型,日期时间型、货币型(以整数形式储存,整数的最后四位用作小数位数)、布尔型等等

1.2:其他类型

String (字符串型),“文本”数据类型是 Unicode 字符数据字符串,可以是字母、数字或以文本格式表示的日期。 根据 Power BI 的 Power Query 基础引擎及其对“文本”数据类型长度的限制,字符串长度的实际最大限制约为 32,000 个 Unicode 字符。 “文本”数据类型超出实际最大限制可能会导致错误。(偶尔在pq中会遇到超出资源等报错提示,就有可能是这个原因)

Binary Objects (二进制类型)等等

这里附一个对照表:

二:数据类型和格式有区别

数据类型和格式完全不是一回事。

格式(图中1号标记):控制一个数字的显示方式,而不以任何方式影响基础精度

数据类型(图中2号标记):控制数据的类型,将更改数值的精度,使之与所声明的数据类型一致。注意,更改数据类型会永久改变信息在表中的储存方式,可能会导致数据丢失。

视频案例中,以"8.99"元的单价列做了例子

2.1  修改列格式

当单价列,只修改格式,由货币调整为整数型时,显示的值变为了"9"

当我们手工调回2位显示时,仍旧显示为"8.99",这意味着,我们只刚刚修改的格式,并没有从根本上修改我们数字的储存方式,也就是所谓的保持了精度。

2.2  修改列数据类型

当单价列,我们修改数据类型为整数型时,首先我们收到了警告,如下图

点击确定后,显示的值同样变为了"9",但是我们试图手工调整数据格式为小数型时,我们发现值已经永久的被修改为了"9",除非我们重新加载原来的旧的的数据集,否则这个值就是被永久改变了。经过这个实验案例,我们明白了,上面的核心观点,修改数据类型,会直接永久性的更改数据精度。

三:运算符重载

运算符可以应用于不同的操作数(operand),DAX引擎会自动转化运算符的参数,已满足运算符的需要,最终结果的数据类型有运算符去定义。

如下图所示,我们创建两个度量值,将他们放入矩阵视觉对象,分别测试1和2的结果值,他们的区别在于分别有"+"和"&"去链接,我们可以看到结果,当用"+"好去连接时,返回了7(数字类型),即运算符重载返回了加法结果,而"&"号链接时,返回的结果是34(文本类型),所以返回的结果数的类型是由运算符去定义的。

正因为有运算符重载功能,所以我们最好是在书写代码时,或者是设置默认值时,就应该明确规定数据类型,以免因为数据重载导致的计算结果不一致的问题。(控制权得在咱们自己手里,不许引擎自己瞎算)

四:日期时间类型

日期时间型以浮点数储存,分为整数部分和小数部分。

4.1 整数部分

整数部分表示,1899年12月30日之后的天数,即在DAX中,整数"1"就代表了1899年12月30日当日。所以日期直接减去一个整数1,就代表日期减1,前一天。

4.2 小数部分

小数部分表示的是天的分数,在DAX中用1除以24来表示一个小时的(我算了一下,相当于1小时就是0.416......),0.25(0.416*6 约等于0.249)就代表是早上的6点。

4.3 简单案例(计算送货天数)

综合上诉两点,视频中,举了一个简单的例子。

假设我们有两个日期列,一个是发货日期,一个是收货日期。当我们需要送货天数时,我们直接新建了计算列(送货天数=收货日期-发货日期),毕竟日期就是数字,所以可以直接进行运算,得到的结果是XXXX年X月X天,并不是直接显示间隔天数,只需修改这个计算列的数据格式为整数,送货天数就以整数天数的形式展示了。

SQLBI_精通DAX课程笔记_02_数据类型的更多相关文章

  1. C#学习笔记_02_数据类型

    02_数据类型 基本数据类型 整型 有符号整型:最高位是正负号 字节型:sbyte 1byte:[-128,127] 短整型:short: 2byte:[-2^(位数-1),2^(位数-1)-1] 整 ...

  2. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  3. CS231n课程笔记翻译1:Python Numpy教程

    译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成,Flood Sung ...

  4. Spring框架 课程笔记

    Spring框架 课程笔记 第1章  Spring概述 1.1 Spring概述 1)        Spring是一个开源框架 2)        Spring为简化企业级开发而生,使用Spring ...

  5. Linux内核分析课程笔记(一)

    linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...

  6. (1/18)重学Standford_iOS7开发_iOS概述_课程笔记

    写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识.带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现, ...

  7. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...

  8. Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

    title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...

  9. Andrew Ng机器学习课程笔记--汇总

    笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...

  10. Andrew 机器学习课程笔记

    Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...

随机推荐

  1. Java学习之进制之间的转换

    import java.util.*; public class Jinzhi { public static void main(String[] args) { /** * 总结: * 二进制转换 ...

  2. ESP32C3 LEDC_PWM

    LEDC_PWM    LED 控制器 (LEDC) 主要用于控制 LED,也可产生 PWM 信号用于其他设备的控制,ESP32C3有 6 路通道.设置 LEDC 通道分三步完成.与 ESP32 不同 ...

  3. 定义一个函数,传入一个字典和一个元组,将字典的值(key不变)和元组的值交换,返回交换后的字典和元组

    知识点:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. li=[3,4,5] t=(7,8,9) print(list(zip(li,t ...

  4. 04.使用 github actions+docker 自动部署前后端分离项目 zhontai (.net core+vue)

    前言 Github Actions是什么?是 GitHub 提供的一种持续集成/持续部署(CI/CD)工作流程自动化服务,助力项目的自动化构建.测试和部署. 依托于平台,本文将分享使用 GitHub ...

  5. MindSponge分子动力学模拟——软件架构(2023.08)

    技术背景 在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用.这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者 ...

  6. SqlServer表添加字段

    IF NOT EXISTS (SELECT * FROM syscolumns WHERE id=object_id('表名') AND name='字段名') ALTER TABLE 表名 ADD ...

  7. 详细解释一下Spring是如何解决循环依赖问题的

    Spring是如何解决循环依赖问题的? 我们都知道,如果在代码中,将两个或多个Bean互相之间持有对方的引用就会发生循环依赖.循环的依赖将会导致注入死循环,这是Spring发生循环依赖的原因 循环依赖 ...

  8. 多主架构:VLDB技术论文《Taurus MM: bringing multi-master to the cloud》解读

    本文分享自华为云社区<多主创新,让云数据库性能更卓越>,作者: GaussDB 数据库. 华为<Taurus MM: bringing multi-master to the clo ...

  9. 真·Redis缓存优化—97%的优化率你见过嘛?

    本文通过一封618前的R2M(公司内部缓存组件,可以认为等同于Redis)告警,由浅入深的分析了该告警的直接原因与根本原因,并根据原因提出相应的解决方法,希望能够给大家在排查类似问题时提供相应的思路. ...

  10. 5.go语言函数提纲

    1 本篇前瞻 前端时间的繁忙,未曾更新go语言系列.由于函数非常重要,为此将本篇往前提一提,另外补充一些有关go新版本前面遗漏的部分. 需要恭喜你的事情是本篇学完,go语言中基础部分已经学完一半,这意 ...