PowerBI 引入时间智能

PowerBI 引入时间智能

 

简介

Power BI Desktop -是一款由微软发布的自助式商业智能工具,功能强大、易于使用。其中还可以通过微软云连多个数据源并且使用数据源来创建可视化表盘。

但是几乎所有的BI都需要展示如何随时间改变KPI。因此我将会介绍一个帮助我们使用事件元素来分析数据的关键功能。在PowerBI Desktop 中叫做“time intelligence”。应用这种时域分析法能是商业智能中基本的数据表现形式。毕竟公司想要知道的无非就是今年的业绩相比去年如何以及取得了何种进步。

“Time intelligence”将需要一个日期表,花费一定的时间去创建一个成功数据模型的核心就是这个表。然后日期表必须与主数据中随时间变化的日期字段进行关联。需要作如下几种事情:

  • YearToDate, QuarterToDate, 和MonthToDate 的计算
  • 比较之前的年、季、月
  • 回滚一段时间的聚合,比如最近三个月的累加。
  • 比较平行时间段,比如与之前一年相同的月份。

当使用随时间进行的数据分析的时候,很可能要使用DAX函数。为了更好地理解,我们将介绍如何创建日期表,然后看一下几种不同的分析时间的计算,最后加入这些类型道数据模型中。为了测试我会使用一个excel作为PowerBI Desktop 的文件数据源。

创建并且应用日期表

对于智能时间,至少需要一个包含不间断时间范围的日期表,并且开始时间的最小值是源数据中的最小日期,结束日期至少等于源数据中的最大值。实践中,需要创建一个表,开始日期是最早日期的1月1日而最大日期应该是数据源日期的上一年的12月31日。一旦你创建了这个表,就能连接数据模型中的含有时间字段的表,然后拓展时间相关的分析函数。

1.创建日期表

应用时间的前提就是创建日期表。下面步骤说明使用DAX创建表的过程:

1 – 打开PowerBI Desktop文件C:\PowerBiDesktopSamples\PowerBIDataModel.Pbix.

2 – 切换左侧的tab,选择第二个Data如下图所示。

3 – 点击左上方的Modeling按钮,然后点击新建表按钮。表达式“表=”将出现在公式栏里面,

4 – 把Table替换成DateDimension

5 – 输入DAX函数CALENDAR(“1/1/2012″,”31/12/2016”),然后回车或者对勾。前一个时间是dates表的开始时间,后一个时间是结束时间,公式栏内容:DateDimension = CALENDAR( “1/1/2012”, “31/12/2016” ).

6 – 回车后,创建了一个单列表,表中的内容就是2012-01-01到2016-12-31,所有日期。

7 – 编辑表头,改列名称为DateKey,结果如下所示:

<span>PowerBI 引入时间智能</span>

8 – 点击添加新列按钮或者右键添加新列,新列将会出现在现存列右侧。

9 – 在公示栏输入“FullYear = YEAR([DateKey])”。

10 –  再添加如下19个列公式。如下:

列标题 公式 注释
ShortYear VALUE(Right(Year([DateKey]),2)) 取后两位数字年
MonthNumberFull FORMAT([DateKey], “MM”) 月份取两位数,不足的前面补0
MonthFull FORMAT([DateKey], “MMMM”) 月份展示名称
WeekNumber WEEKNUM([DateKey]) 以下自行测试
MonthAbbr FORMAT([DateKey], “MMM”)  
WeekNumberFull FORMAT(Weeknum([DateKey]), “00”)  

DayOfMonth

DAY([DateKey])

 

DayOfMonthFull

FORMAT(Day([DateKey]),”00″)

 

DayOfWeek

WEEKDAY([DateKey])

 

DayOfWeekFull

FORMAT([DateKey],”dddd”)

 

DayOfWeekAbbr

FORMAT([DateKey],”ddd”)

 

ISODate

[FullYear] & [MonthNumberFull] & [DayOfMonthFull]

 

FullDate

[DayOfMonth] & ” ” & [MonthFull] & ” ” & [FullYear]

 

QuarterFull

“Quarter ” & ROUNDDOWN(MONTH([DateKey])/4,0)+1

 

QuarterAbbr

“Qtr ” &ROUNDDOWN(MONTH([DateKey])/4,0)+1

 

Quarter

“Q” &ROUNDDOWN(MONTH([DateKey])/4,0)+1

 

QuarterNumber

ROUNDDOWN(MONTH([DateKey])/4,0)+1

 

QuarterAndYear

DateDimension[Quarter and Year]

 

MonthAndYearAbbr

DateDimension[MonthAbbr] & ” ” & [FullYear]

 

QuarterAndYearNumber

[FullYear] & [QuarterNumber]

 

YearAndWeek

VALUE([FullYear] &[WeekNumberFull])

 

YearAndMonthNumber

Value(DateDimension[FullYear] & DateDimension[MonthNumberFull])

 

 

展示如下:

<span>PowerBI 引入时间智能</span>

 

创建所有这些表现时间的的目的就是早晚有一天会用到这些日期来展示报表、聚合指标、展示数据。任何有时间元素的表都可以按照这个新增表中的时间转换聚合来可视化数据。这里你不需要担心是否需要额外的列,因为还可以动态添加你需要的时间元素。

在日期表中引入列排序

现在需要看一下如何排序。典型的例子就是月份排序。如果你打算展示MonthFull 或者MonthAbbr 列,那么将看到月份(month)出现在轴标签里面或者按字母排序的列里面。

为了避免最后再去调整日期表,可以通过应用特定的日期元素来排列其他列,如下:

1 – 点击打算使用其他的列来排序的列(比如Monthfull) ;

2 – 点击Modeling下方的排序按钮,其他列的名称将会出现,如下图所示:

<span>PowerBI 引入时间智能</span>

3 – 选择打算按照排序的列(MonthNumber);

这里并不能立即显示出任何不同,但是当在仪表盘中使用任何你已经调整过的日期列时,它们将会根据排序列进行数据排序。

下表提供给你需要的信息来扩展你创建的数据表以便于所有的日期元素都能被正确排序。

Column Sort By Column

MonthAbbr

MonthNumber

DayOfWeekFull

DayOfWeek

DayOfWeekAbbr DayOfWeek
Quarter And Year QuarterAndYearNumber
FullDate DateKey
MonthAndYearAbbr YearAndMonthNumber
MonthAndYear YearAndMonthNumber

 

日期表技巧

当引入时间智能后,一定要遵守两个基础原则。

  • 日期范围必须是连续的。
  • 在数据模型中数据范围一定是包含所有使用的其他表中的日期。

一旦你知道你数据中的最大值和最小值日期就可以使用CALENDAR来生成日期,即使两个值在不同的表里面如下:

DateDimension = CALENDAR(MIN('Stock'[PurchaseDate]),  MAX('Invoices'[InvoiceDate]))

或者,你可能更喜欢日期维度通过全年的数据,在这种情况下,公式可以这样创建表:

DateDimension = CALENDAR(STARTOFYEAR(MIN('Stock'[PurchaseDate])), ENDOFYEAR(MAX('Invoices'[InvoiceDate])))

这个公式扩展了DAX的计算,两个计算年的公式也是极其有帮助的:

  • StartOfYear() – 这个公式得出最小的年份。
  • EndOfYear() – 这个公式得出最大的年份

注意

这种日期范围的主要优点在于随着数据源的变化自动更新。因此如果Stock 或 Invoices表数据源扩展了新的数据并且在原有日期外的,那么这个时间维度表也会自动变化来包含这部分新增数据的部分。

这里的可以给大家一个小技巧,不需要每次都去创建这个日期表,可先创建一个空的模型,里面只有日期表,结束和开始日期是手填写的,然后加入所有其他列,接下来复制这个模板文件,以后每次使用都以这个模板文件为基础创建。只需要替换手动填写的日期即可。

向数据模型中加入日期表

现在你有了一个日期表,可以与你的数据模型进行整合以便于开始应用这些智能时间。

1 – 点击关系视图的图表来展示数据模型中的表

2 – 点击管理关系按钮,对话框会出现。

3 – 点击新建按钮,创建关系。

4 – 在对话框顶部选择时间维度表。

5 – 点击DateKey列选择。

6 – 在时间维度表下面的下拉框中选择Invoice表。

7 – 再点击InvoiceDate列选择,对话库如下:

<span>PowerBI 引入时间智能</span>

8 – 点击Ok,新的表关系就建立了

9 – 点击关闭,时间维度表就与Invoice表建立了关系。

注意 为了时间智能在PowerBI中能够正确使用一定要保证日期表和数据表中的数据类型是date或者datetime。

应用时间智能

所有的准备工作都已经完成了,接下来就看如何使用DAX实现随着时间变化来计算指标。

YearToDate, QuarterToDate, 和MonthToDate 运算

首先,让我们解决一个简单但是频繁的需求:计算月累计、季度累计、和年累计的销售数字。

这个例子中三个函数是很相似的。因此我只解释第一个月累计,然后创建下面两个用复制黏贴的方式。

1 –  在数据视图中选择Invoices表,然后点击新建测量;

2 –  在公式栏用MonthSales替换Measure ;

3 – 输入这个公式MonthSales = TOTALMTD(SUM(InvoiceLines[SalePrice]),DateDimension[DateKey])。

MonthSales = TOTALMTD(SUM(InvoiceLines[SalePrice]),DateDimension[DateKey])

4 – 回车或者点击对勾完成公式

现在可以复制这个公式,生成两个新的公式用来表示季度销售和年度销售日期公式如下:

QuarterSales = TOTALQTD(SUM(InvoiceLines[SalePrice]),DateDimension[DateKey])

YearSales = TOTALYTD(SUM(InvoiceLines[SalePrice]),DateDimension[DateKey])

三个公式分别使用了Totalmtd()、Totalqtd和Totalytd来聚合时间其他参数是一样的。

结果如下:

<span>PowerBI 引入时间智能</span>

 

正缩减,每个月的销售数字随着累加到季度销售数字中,最后还要加到年度销售数字中。还要注意整个排序是按照monthfull来排序的,其实是按照MonthNumber 进行排序。

总结

在这个例子中,我使用了Invoices表来测试仅仅因为这里存储了很多指标数据,当然你也可以选择其他表来尝试这个智能时间的应用。它不仅方便了对于数据的分类和比较,更提供了一种潜在的排序和聚合。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119717.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • padstart方法_PADS 2.4打开PCB显示已停止工作

    padstart方法_PADS 2.4打开PCB显示已停止工作之前两天搞得头皮发麻,有个需求是写个版本比较的方法,比如’10.5.4’版本是否大于’9.52.1’版本。正常的思路是使用split去截取几段,然后做递归比较。如下://版本对比constsort=(item1,item2)=>{if(item1[0]>item2[0]){returntrue}elseif(item1…

    2022年9月9日
  • kubernetes-批量删除Evicted Pods[通俗易懂]

    kubernetes-批量删除Evicted Pods[通俗易懂]前言通过kubectlgetpods发现有很多的EvictedPod,于是想通过脚本删除。脚本#!/bin/bashforeachin$(kubectlgetpods|grepEvicted|awk'{print$1}’);dokubectldeletepods$eachdone还有更简单的写法,如下:kubectlg…

    2022年5月13日
  • goland激活码 大学【在线破解激活】[通俗易懂]

    goland激活码 大学【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
  • Spring通过SchedulerFactoryBean实现调度任务的配置「建议收藏」

    Spring通过SchedulerFactoryBean实现调度任务的配置「建议收藏」真是越来越懒了,半年前配置过这个东西现在又忘了。找了原来的代码看了下,现在有必要将这个东西记录下来。直接上配置:

    2022年5月23日
  • 漏斗模型和路径分析的区别_漏斗转化模型

    漏斗模型和路径分析的区别_漏斗转化模型在互联网数据化运营实践中,有一类数据分析应用是互联网行业所独有的,那就是漏斗模型和路径分析的应用漏斗模型通常是对用户在网页浏览中一些关键节点的转化程度所进行的描述,比如从浏览到实际购买产品都需要经历三个步骤:浏览商品、将商品加入到购物车、将购物车的东西提交到订单,直到订单完成在线支付,上面的三个步骤走下来,买家人数越来越少,这个过程就是漏斗模型,漏斗模型的主要分析目的是针对网站运营过程中的各个关键…

    2022年8月24日
  • 【最新】解决Github网页上图片显示失败的问题

    【最新】解决Github网页上图片显示失败的问题好几个星期之前本人就发现自己的github在网页打开显示不了图片的问题了,不过当时没在意。今天强迫症逼迫我一定要搞定它,于是去找了一些方法,自己做个记录,有相同问题的伙伴可以参考一下。一、问题比如随便打开一个项目,图片都挂掉了,我头像都没了打开控制台显示主要报错是Failedtoloadresource:net::ERR_CERT_COMMON_NAME_INVALID查了…

    2022年6月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号