题记:这篇文章不只是Power BI的入门教程,同时相对于Qlik Sense进行了简单比较。前端
最近把一个Qlik Sense的示例应用手动转成了Power BI的应用,把相关步骤和遇到的问题记录以下,权看成一个入门教程。数据库
因为Qlik Sense的示例应用只有一个单独的qvf文件,那么原始数据只有经过qvf来导出。此qvf中的数据模型以下图所示:json
Qlik Sense并无提供数据模型包含数据的完整导出功能,因此只能采用最麻烦和原始的方式,即:建立表格,在表格中添加某个数据表的全部字段,而后再利用可视化对象的导出功能导出数据为xlsx文件。经过这种方式,把全部表都导出。注:但在实际操做当中,未必全部表都导出,由于有些表能够在Power BI中生成(好比日期表DateParts),有些表在Power BI中也用不到(好比月份顺序表Month Sort Order)。安全
固然,若是你拿获得原始数据的文件或者数据库,那么就能够跳过这一步。编辑器
这步比较简单,在Power BI中新建一个文档,经过“获取数据”-“Excel”来选择须要导入的xlsx文件。函数
选择文件以后,会显示“导航器”对话框。在这里选择须要导入的工做表(能够选择多个)。选择工做表以后,能够直接点“加载”,也能够点“编辑”来打开“查询编辑器”修改ETL脚本(固然在加载以后仍是能够从新编辑脚本)。若是直接点“加载”以后,Power BI就会把选择的工做表中的数据加载进来,这个时候就能够在“数据”视图中预览其中的数据,右侧的“字段”边栏也会显示表及其包含的字段:字体
这个时候,你会发现表名称是xlsx文件中默认的Sheet1,修改表名称的最简单方式就是,在表名称上点右键选择“重命名”。另外,有些xlsx文件导入以后,数据可能会出现下面这种没有正常识别列名称的问题,这个时候就须要用到“查询编辑器”中的“提高的标题”(把第一行数据看成标题/列名)的功能:ui
“查询编辑器”是一个强大的UI操做界面,帮你自动生成Power Query的M语言脚本,能够经过“高级编辑器”来查看每一个表的Power Query脚本。而Power Query的第一步就是经过“源”和“导航”脚原本实现Extract-Load的步骤。对于Power BI而言,Extract-Load能够实现的能力有:人工智能
在加载数据的过程当中或者以后,还能够继续利用“查询编辑器”来对加载的数据进行转换和塑造(即Transform)。所谓转换和塑造就是利用Power Query的M语言脚原本对数据的加载过程,进行额外处理。我大体把这个过程当中Power BI能提供的能力整理了一下:spa
从上面整理的内容来看,Power BI因为沿用了SQL Server和Excel中已经存在的Power Query,因此它的ETL功能仍是很是强大的,而且几乎不用你手动编写ETL脚本便可完成复杂的ETL工做。
想对Power Query的功能有详细了解的,建议查看Excel的文档:https://support.office.com/zh-cn/article/%E8%8E%B7%E5%8F%96%E5%92%8C%E8%BD%AC%E6%8D%A2%E5%9C%A8-Excel-2016-%E4%B8%AD-881c63c6-37c5-4ca2-b616-59e18d75b4de?ui=zh-CN&rs=zh-CN&ad=CN
在完成数据的ETL以后,须要的步骤就是对数据进行建模。通常而言,在导入数据以后,Power BI会根据字段的名称自动推断出表之间的关系的。好比下图就是导入示例数据以后自动构建的关系图:
建模的工做和ETL的工做是两个不一样的步骤,虽然有些功能达到的效果是同样,可是背后实现的机理是不同的。最明显的一个地方就是数据类型的修改,在查询编辑器中对数据类型进行修改会替换或产生新的ETL脚本,而在数据视图中修改数据类型不会影响ETL脚本。
Power BI支持的建模能力整理以下:
在建模的过程当中,尤为和公式计算相关的东西都涉及到数据分析表达式(Data Analysis Expressions,DAX)的使用,详细的说明能够参考MSDN官方文档:https://msdn.microsoft.com/library/gg413422.aspx
(updated 2016.12.20)更完整的文档在这里:https://msdn.microsoft.com/en-us/library/mt244090.aspx
对于个人这个示例,我实际用到了以下几种建模能力:
DateKey = ADDCOLUMNS( CALENDAR(FIRSTDATE(Details[EpisodeAdmissionDate]),LASTDATE(Details[EpisodeAdmissionDate])), "DateAsInt",FORMAT([Date],"YYYYMMDD"), "Year",YEAR([Date]), "Quarter",VALUE(FORMAT([Date],"Q")), "YearQuarter",FORMAT ( [Date],"YYYY" ) & "/Q" & FORMAT ( [Date],"Q" ), "Month",MONTH([Date]), "MonthName",FORMAT([Date],"mmm"), "Day",DAY([Date]), "WeekNum",WEEKNUM([Date]), "WeekDay",WEEKDAY([Date]), "WeekDayName",FORMAT([Date],"ddd"), "Fiscal Year",IF(MONTH([Date])>3,YEAR([Date]) +1,YEAR([Date])), "Fiscal Year Name",IF(MONTH([Date])>3,YEAR([Date]) & "-" & (YEAR([Date]) + 1),(YEAR([Date]) - 1) & "-" & YEAR([Date])) )
把日期表添加到模型中后,就能够手动把日期表的Date字段和Details表中的EpisodeAdmissionDate字段创建其关系。最终的模型图以下:
日期表建立的更多详细介绍,能够参考这个博客文章:http://kohera.be/blog/business-intelligence/how-to-create-a-date-table-in-power-bi-in-2-simple-steps/
经过可视化控件来显示数据没有太多能够说的。Power BI的官方文档已经写的比较好了,见:https://powerbi.microsoft.com/zh-cn/documentation/powerbi-desktop-report-view/
无非就是把一个可视化控件拖到报表页面上,而后把所需的维度和度量拖到可视化控件中的数据标签页中的“轴”/“图例”或者“值”下面,以下图所示:
数据建模的时候提到过下钻显示。下钻显示有两种方式:一种使用层级结构列,一种不使用。
简单说来,对于使用层级结构的方式,就是先创建一个层级结构列,而后把这个列拖到“轴”下面,可视化控件就会在上面的操做栏显示用于下钻数据的特定按钮。以下图所示:
对于第二种下钻显示方式,我没有采用,详细的说明能够见:https://powerbi.microsoft.com/zh-cn/documentation/powerbi-service-drill-down-in-a-visualization/。
为可视化控件准备好数据以后,还能够经过“格式”设置标签页(即刷子状图标)来设置一些显示格式,好比标题,字体,颜色什么的。
当数据添加到可视化控件以后,这些字段还会自动添加到视觉级别筛选器,除此以外,你还能够额外把字段添加到页面级筛选器和报告级筛选器中。这些筛选器的做用范围望文生义应该能够理解。
不过须要注意的是,筛选器在公开发布到Web后并不可见,因此你还能够单独在报表页面上添加所需的切片器。切片器的数据设置方式和其余可视化控件相似。
粗略的比较下来(我的观点):
Power BI在可视化能力方面确实须要进一步增强,好比我就遇到以下几个问题:
最后不得不吐槽下,Power BI的文档用机器翻译就算了,感受Power BI Desktop的中文版也是机器翻译的。还不如我来翻译算了(做为MVP能够免费作贡献)。