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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 链接: https://pan.baidu.com/s/1-DgIQmPNwGydAYYwA_fT5w 提取码: pq9q 复制这段内容后打开百度网盘手机App,操作更方便哦「建议收藏」

    链接: https://pan.baidu.com/s/1-DgIQmPNwGydAYYwA_fT5w 提取码: pq9q 复制这段内容后打开百度网盘手机App,操作更方便哦「建议收藏」链接:https://pan.baidu.com/s/1-DgIQmPNwGydAYYwA_fT5w提取码:pq9q复制这段内容后打开百度网盘手机App,操作更方便哦@TOC欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变…

  • 分布式文件存储的实现

    分布式文件存储的实现分布式文件存储的实现

  • LDA模型学习之(二)——主题的理解

    LDA模型学习之(二)——主题的理解

  • anaconda卸载后问题

    anaconda卸载后问题anaconda卸载后问题因platformio问题,我将电脑中的anaconda卸载后,出现重新安装anaconda后,无法使用(无conda命令,无jupyter,spyder等图标的问题);经搜索,通过安装miniconda后,用conda命令安装anaconda解决了问题。但除了了使用anacondaprompt时,出现系统找不到指定路径的提示,比较碍眼,(同cmd亦是)。经查,将注册表中的anaconda字符改为miniconda也能解决问题;如下图…

  • 数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历「建议收藏」

    数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历「建议收藏」最近也是在准备笔试,由于没有系统的学过数据结构,所以每次在考到二叉树的遍历的时候都是直接跪,次数多了也就怒了,前些天也是准备论文没时间整这些,现在提交了,算是稍微轻松点了,所以花了半天的时间来学了下二叉树。现在记下来,以便后序查阅。一、二叉树的遍历概念  1. 二叉树的遍历是指从根结点触发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。(1).前(

  • wing是什么_可分开四叶草项链

    wing是什么_可分开四叶草项链在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(Mars 单位),新产

发表回复

您的电子邮箱地址不会被公开。

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