在PowerBI的查询编辑器(Query Editor)中,用户可以使用M语言修改Query,或修改Query字段的类型,或向Query中添加数据列(Column),对Query进行修改会导致PowerBI相应地更新数据模型(Data Model),这跟使用DAX表达式修改Data Model有本质的区别:前者是修改数据表,后者是修改数据视图。PowerBI通过查询编辑器来修改数据模型,对Query的每一次修改都是一个step,用户可以根据需要增加或删除step,调整step的顺序,并可以迭代引用先前创建的step,应用这些操作对数据进行再次加工和处理,以满足数据分析的需求。

我的PowerBI开发系列的文章目录:PowerBI开发

一,修改数据类型

每一个Query都是由一系列的列和行构成的数据表,每一列都有特定的数据类型,PowerBI为每个数据类型显示特定的图标,最常用的数据类型是number和text,例如:

123表示当前列是数字类型,ABC表示当前列是字符类型。有时,从外部数据源导入数据之后,PowerBI不能确定数据的类型,此时,它会在列前方同时标记为123和ABC,用户可以通过”Change Type“把该列转换为合适的数据类型。

二,添加数据列

用户可以添加计算列,从主菜单中切换到”Add Column“面板,点击”Custom Column“,基于M公式创建新的数据列。

从左侧可用的列中,添加列和公式,PowerBI基于用户输入的表达式创建新的计算列,并添加到数据模型(Data Model)中:

三,添加排序列

在对数据进行排序时,有时不能使用DAX表达式,此时必须使用M公式,例如,对班级(Class)进行排序,使用DAX的IF函数,按照班级(Class)名称新建一个字段(Class Ordinal),

Class Ordinal = IF(Schools[Class]="一年级",1,IF(Schools[Class]="二年级",2,3))

设置Class按照Class Ordinal排序,PowerBI会抛出错误:

在这种情况下,必须使用M公式,在Schools Query中新增字段:

= Table.AddColumn(KustoQuery, "Class Ordinal",
each if [Class]="一年级" then
else if [Class]="二年级" then
else if [Class]="三年级" then
else )

四,查询组合

查询的组合(Combine),用于在Query级别对数据进行修改,PowerBI支持Merge和Append,你使用Merge操作连接数据,或使用Append操作追加数据。

1,数据的连接

把查询连接到一起,可以使用Home菜单中”Merge Queries as New“,通过连接操作(Join)把两个Query合并,生成新的Query。

PowerBI在进行Merge时,只支持等值条件的连接操作,等相应字段的值相等时,匹配成功。

例如,选择 EventSoldService 作为其中一个Query,点击EventId,作为连接的条件,第一个表称作左表,第二标称作右表:

也可以选择多个数据列作为连接条件,摁住Ctrl,连续点击EventId,SoldServiceId,就可以把这个字段作为连接:

在进行Merge操作时,PowerBI提供多种连接的类型,如下:

在创建Merge查询之后,默认情况下,PowerBI会把连接的右表显示在左表字段的末尾,字段名为右表名,而字段值为"Table",如下图:

用户可以点击该列上方的图标, 对右表进行扩展(Expand)或聚合(Aggregate)操作,扩展操作是指在最终的查询中显示右表的字段,聚合操作是对右表的相应字段进行聚合操作,返回聚合值。

2,数据的追加

对于一个Query,使用PowerBI可以追加数据,把另一个Query的数据追加到当前Query之中,这相当于集合的Union操作。

选中当前Query,点击“Append Queries”,可以追加一个Query,或多个Query。

而用于追加的Query,可以不显示在Report视图中,使这些Query仅仅用于提供数据。

五,转换操作

在查询编辑器中,可以对数据做变换操作(Transform),例如,分组、字符的拆分、透视、逆透视、去重和替换值等。

1,分组

Group By用于按照特定的列对现有的查询进行分组聚合,产生新的Query。

2,拆分字符

把一个字符类型Column按照分隔符,或者特定数量的字符,分割成多个数据列。

3,透视和逆透视

Pivot Column 用于对数据进行透视操作,Unpivot Column 用于对数据进行逆透视操作,完成数据的行列转换。

六,Query的其他操作

对Query分组,分组的目的是组织Query,便于查找。当Query的数量非常多时,可以按照功能或Page对不同的Query分组。

Query是否启用加载,是否包含在报表刷新中?

如果启用了“Enable load”,那么Query的数据会显示在Report View中;如果启用了”Include in report refresh“中,Query可以随着报表的刷新而自动刷新数据。

参考文档:

Power Query M Reference

Add a custom column in Power BI Desktop

PowerBI 第九篇:修改查询的更多相关文章

  1. Neo4j 第九篇:查询数据(Match)

    Cypher使用match子句查询数据,是Cypher最基本的查询子句.在查询数据时,使用Match子句指定搜索的模式,这是从Neo4j数据库查询数据的最主要的方法.match子句之后通常会跟着whe ...

  2. ElasticSearch入门 第九篇:实现正则表达式查询的思路

    这是ElasticSearch 2.4 版本系列的第九篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  3. Spring Cloud第九篇 | 分布式服务跟踪Sleuth

    ​ ​本文是Spring Cloud专栏的第九篇文章,了解前八篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  4. 第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  5. 第九篇 Integration Services:控制流任务错误

    本篇文章是Integration Services系列的第九篇,详细内容请参考原文. 简介在前面三篇文章,我们创建了一个新的SSIS包,学习了脚本任务和优先约束,并检查包的MaxConcurrentE ...

  6. 第九篇 Replication:复制监视器

    本篇文章是SQL Server Replication系列的第九篇,详细内容请参考原文. 复制监视器允许你查看复制配置组件的健康状况.这一篇假设你遵循前八篇,并且你已经有一个合并发布和事务发布.启动复 ...

  7. 第九篇 SQL Server安全透明数据加密

    本篇文章是SQL Server安全系列的第九篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  8. Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy   Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...

  9. [老老实实学WCF] 第九篇 消息通信模式(上) 请求应答与单向

    老老实实学WCF 第九篇 消息通信模式(上) 请求应答与单向 通过前两篇的学习,我们了解了服务模型的一些特性如会话和实例化,今天我们来进一步学习服务模型的另一个重要特性:消息通信模式. WCF的服务端 ...

随机推荐

  1. JAVA_SE基础——61.字符串入门

    public class Demo1 { public static void main(String[] args) { String str1 = "hello"; Strin ...

  2. 看到一个对CAP简单的解释

    一个分布式系统里面,节点组成的网络本来应该是连通的.然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域.数据就散布在了这些不连通的区域中.这就叫分区.当你一个数据项只在一个节点中 ...

  3. Let's Encrypt,免费好用的 HTTPS 证书

    很早之前我就在关注 Let's Encrypt 这个免费.自动化.开放的证书签发服务.它由 ISRG(Internet Security Research Group,互联网安全研究小组)提供服务,而 ...

  4. ssh整合之一spring的单独运行环境

    这是本人第一次写博客,不足之处,还希望各位园友指出,在此先谢谢各位了! 先说我们的这三大框架,即struts,spring,hibernate,我们要进行整合的话,第一步是先单独搭建我们的Spring ...

  5. Linux系统的基本使用

    曾经在网上看到一个一篇文章,说到了Linux学习的入门与学习技巧,也就是:初学者可以自己安装虚拟机,然后把linux常用命令例如cd.ls.chmod.useradd.vi等等多练习几十遍,把自己敲打 ...

  6. python Django学生管理

    Django 学生管理系统 1. 一对一 班级  模态增加 编辑 <!DOCTYPE html> <html lang="en"> <head> ...

  7. Why deep learning?

    1. 深度学习中网络越深越好么? 理论上说是这样的,因为网络越深,参数也越多,拟合能力也越强(但实际情况是,网络很深的时候,不容易训练,使得表现能力可能并不好). 2. 那么,不同什么深度的网络,在参 ...

  8. urllib.parse

    1 url分解 import urllib.parse result = urllib.parse.urlparse('http://www.baidu.com') print(result) 结果为 ...

  9. 用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程

    让我们首先了解下什么时候用到C#异步调用: .NET Framework 允许您C#异步调用任何方法.定义与您需要调用的方法具有相同签名的委托:公共语言运行库将自动为该委托定义具有适当签名的Begin ...

  10. 使用Vertx重构系统小结

    背景 前几个月,使用Vertx重构了公司的一个子系统,该系统负责公司核心数据subscriber的采集.处理.存储和搜索.这里介绍下重构该系统时的一些关键点. 架构 重构前系统部署图: 重构前系统主要 ...