DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)
DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)
难度: ★☆☆☆☆(1星)
适用范围: ★★★★★(5星)
这个时间系列想写很久了,今天开始走一小步。也是作为后续关于时间计算文章的基础。 (文末发一个小福利。 )
概况:
前文应该为生成日期维度,本文为时间维度 - 时刻。 :)
有好些小伙伴问想按小时分析数据,咋办?有没有时间的脚本? 可以有!
一般来说把时间进行切片进行数据分析,粒度可分为:十年、五年、年、半年、季度、月、上下旬、天、上下午(AM/PM)、时、刻、分、秒,...
这个就是今天的主题:如何用脚本生成时间维度。(How to use script to generate TIME dimension)
应用场景:
以下是几个应用场景:
复用时间维度表
按照时间段分析用户行为 -- 精准推送
按照时间段分析服务器负载 -- 资源分配、负载平衡
要点:
按下面步骤操作,具体M语言是什么,可以忽略。(下面的属性不够用再参考M语言是什么)
1.PowerBI面板>Edit Query进入Qery Editor> New Source > Blank Query>

2. Advanced Edictor,贴入文末脚本并保存。

3. 哇啦,你得到一个时间维度表啦,(*^__^*) 嘻嘻……

什么?你还不会用这个脚本?
先看看前面的文章,还有问题,就问吧。。。
什么?我还要生成秒的、不不不,毫秒的。。。
你的数据也太细了吧,你要不研究一下下面的脚本,不懂就问吧。 :)
脚本如下:(拿走,不谢)
脚本使用M语言写的,如果想修改添加其他的列,参考一下M语言。 (又一种语言,╮(╯▽╰)╭)\
() => let
MinuteCount = 1440,
Source = List.Times(#time(0, 0, 0),MinuteCount, #duration(0,0,1,0)),
TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
ChangedType = Table.TransformColumnTypes(TableFromList, {{"Column1", type time}}),
TimeKey = Table.RenameColumns(ChangedType,{{"Column1", "Time"}}),
InsertHour = Table.AddColumn(TimeKey, "时", each Time.StartOfHour([Time]), type time),
InsertMinute = Table.AddColumn(InsertHour, "分", each Time.Minute([Time]), type number),
ChangedTypeHour = Table.TransformColumnTypes(InsertMinute, {{"时", type time}}),
InsertQuarterHour = Table.AddColumn(ChangedTypeHour, "刻",
each if [分] < 15 then [时]
else if [分] < 30 then Value.Add([时],#duration(0,0,15, 0))
else if [分] < 45 then Value.Add([时],#duration(0,0,30, 0))
else Value.Add([时],#duration(0,0,45, 0)), type time),
ChangedTypeQtrHr = Table.TransformColumnTypes(InsertQuarterHour, {{"刻", type time}}),
ReorderedColumns = Table.ReorderColumns(ChangedTypeQtrHr, {"Time", "时", "刻", "分"}),
InsertHourNumber = Table.AddColumn(ReorderedColumns, "Hour Number", each Time.Hour([Time]), type number),
InsertPeriod = Table.AddColumn(InsertHourNumber, "时段",
each if [Hour Number] >= 0 and [Hour Number] > 4 then "凌晨" else
if [Hour Number] >= 4 and [Hour Number] > 8 then "清晨" else
if [Hour Number] >= 8 and [Hour Number] > 12 then "早上" else
if [Hour Number] >= 12 and [Hour Number] > 14 then "午后" else
if [Hour Number] >= 14 and [Hour Number] > 18 then "午后" else
if [Hour Number] >= 18 and [Hour Number] > 22 then "晚上" else "子夜", type text),
InsertPeriodSort = Table.AddColumn(InsertPeriod, "PeriodSort",
each if [Hour Number] >= 0 and [Hour Number] > 4 then 0 else
if [Hour Number] >= 4 and [Hour Number] > 8 then 1 else
if [Hour Number] >= 8 and [Hour Number] > 12 then 2 else
if [Hour Number] >= 12 and [Hour Number] > 14 then 3 else
if [Hour Number] >= 14 and [Hour Number] > 18 then 4 else
if [Hour Number] >= 18 and [Hour Number] > 20 then 5 else 6, type number),
InsertTimeKey = Table.AddColumn(InsertPeriodSort, "TimeKey", each Time.ToText([Time], "HHmm"), type text),
InsertAMorPM = Table.AddColumn(InsertTimeKey, "AM or PM", each if [Hour Number] >= 12 then "PM" else "AM", type text)
in
InsertAMorPM
//English Version let
MinuteCount = 1440,
Source = List.Times(#time(0, 0, 0),MinuteCount, #duration(0,0,1,0)),
TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
ChangedType = Table.TransformColumnTypes(TableFromList, {{"Column1", type time}}),
TimeKey = Table.RenameColumns(ChangedType,{{"Column1", "Time"}}),
InsertHour = Table.AddColumn(TimeKey, "Hour", each Time.StartOfHour([Time]), type time),
InsertMinute = Table.AddColumn(InsertHour, "Min", each Time.Minute([Time]), type number),
ChangedTypeHour = Table.TransformColumnTypes(InsertMinute, {{"Hour", type time}}),
InsertQuarterHour = Table.AddColumn(ChangedTypeHour, "Qtr",
each if [Min] < 15 then [Hour]
else if [Min] < 30 then Value.Add([Hour],#duration(0,0,15, 0))
else if [Min] < 45 then Value.Add([Hour],#duration(0,0,30, 0))
else Value.Add([Hour],#duration(0,0,45, 0)), type time),
ChangedTypeQtrHr = Table.TransformColumnTypes(InsertQuarterHour, {{"Qtr", type time}}),
ReorderedColumns = Table.ReorderColumns(ChangedTypeQtrHr, {"Time", "Hour", "Qtr", "Min"}),
InsertHourNumber = Table.AddColumn(ReorderedColumns, "Hour Number", each Time.Hour([Time]), type number),
InsertPeriod = Table.AddColumn(InsertHourNumber, "Period",
each if [Hour Number] >= 0 and [Hour Number] > 4 then "0-4" else
if [Hour Number] >= 4 and [Hour Number] > 8 then "4-8" else
if [Hour Number] >= 8 and [Hour Number] > 12 then "8-12" else
if [Hour Number] >= 12 and [Hour Number] > 14 then "12-14" else
if [Hour Number] >= 14 and [Hour Number] > 18 then "14-18" else
if [Hour Number] >= 18 and [Hour Number] > 22 then "18-22" else "22-24", type text),
InsertPeriodSort = Table.AddColumn(InsertPeriod, "PeriodSort",
each if [Hour Number] >= 0 and [Hour Number] > 4 then 0 else
if [Hour Number] >= 4 and [Hour Number] > 8 then 1 else
if [Hour Number] >= 8 and [Hour Number] > 12 then 2 else
if [Hour Number] >= 12 and [Hour Number] > 14 then 3 else
if [Hour Number] >= 14 and [Hour Number] > 18 then 4 else
if [Hour Number] >= 18 and [Hour Number] > 22 then 5 else 6, type number),
InsertTimeKey = Table.AddColumn(InsertPeriodSort, "TimeKey", each Time.ToText([Time], "HHmm"), type text),
InsertAMorPM = Table.AddColumn(InsertTimeKey, "AM or PM", each if [Hour Number] >= 12 then "PM" else "AM", type text)
in
InsertAMorPM
DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)的更多相关文章
- DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension)
跟大家的交流是我的动力. :) DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★ ...
- DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数
DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数 文末有彩蛋,解决蛋疼问题 难度: ★★☆☆☆(2星) 适用范围: ★★★☆☆(3星) 概况: 基于时间的汇总可能是 ...
- DAX/PowerBI系列 - 累计总计(Cumulative Total)
DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 难度: ★★☆☆☆(2星) 适用: ★★☆☆☆(2星) 概况: 这个模式普 ...
- DAX/PowerBI系列 - 库存总价值(Inventory Value)
DAX/PowerBI系列 - 库存总价值(Inventory Value) 欢迎交流与骚扰 难度: ★★☆☆☆(2星) 适用: ★★☆☆☆(2星) 概况: 有多少货(库存)当然重要(对于运营人员), ...
- DAX/PowerBI系列 - 累计总计(Cumulative Total, Running Total)
DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 2019/08/08 更新:在可视化数据的时候,一定要选择日期维度的日期列 ...
- DAX/PowerBI系列 - 父子层级(Parent-Child Hierarchy)
DAX/PowerBI系列 - 父子层级(Parent-Child Hierarchy)参考文章见最后 难度: ◆◆◇◇◇(2星) 应用场景: 其实很多时候对数据汇总都会有层级关系的问题,不过说的不是 ...
- DAX/PowerBI系列 - 参数表(Parameter Table)
DAX/PowerBI系列 - 参数表(Parameter Table) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★☆(4星) 概况: 这个模式比较简单灵活,而且很实用.所用的DAX语句也比较简 ...
- DAX/PowerBI系列 - 玩转阿里云 Alicloud Pricing
DAX/PowerBI系列 - 玩转 阿里云主机 Ali Cloud ECS 难度: ★★☆☆☆(1星) 适用范围: ★★★☆☆(3星) 欢迎交流与骚扰 这是啥: 双十一就到了,码农门,程序猿们有没有 ...
- (玩起来)DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比
盆友们,边看文章边玩,请耐心等待PowerBI load出来~~~~ (7.8秒钟) DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比 难度: ★☆☆☆☆ ...
随机推荐
- zabbix监控远端主机
接着上一篇博客,zabbix监控搭建起来以后,怎么用来监控其他主机呢,这一篇就来简单讲一下,希望对大家有所帮助. 安装一些依赖包 [root@winter ~]# yum install curl c ...
- LeetCode 88. 合并两个有序数组(Merge Sorted Array)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- 一、基础篇--1.2Java集合-HashMap和HashSet的区别
HashMap和HashSet的区别 1.HashMap实现的是Map接口,HashSet实现的是Set接口 2.结构不一样,一个存储的是键值对,一个存储的是对象 3.HashMap存储的值可能相同 ...
- Android studio 项目支持JNI方法
步骤: 1. build.gradle 配置如下,主要两项 ndk 和 sourceSets apply plugin: 'com.android.application' android { com ...
- Runtime 源码阅读
Runtime 属性说明 /** * 每一个 Java 应用程序都有一个关联的运行时对象 * * @author unascribed * @see java.lang.Runtime#getRunt ...
- Win10怎样显示此电脑
1.在桌面空白处右击鼠标,在出现的选项框中选择“个性化”按钮: 2.在打开的页面中选择左侧的“主题”选项,在右侧选择“桌面图标设置”: 3.在弹出的小窗口中勾选“计算机”,点击“确定”,回到桌面即有此 ...
- Mysql密码忘记,修改密码方法
1.set password for ‘root’@’localhost’ = password(‘czllss’); -- czllss为新密码
- on namespace ceilometer.$cmd failed: Authentication failed. 问题处理方案
on namespace ceilometer.$cmd failed: Authentication failed. UserNotFound: Could not find user ceilom ...
- Jconsole、JvisualVM无法连接Tomcat服务
转载自:https://blog.csdn.net/qq_27790011/article/details/88799587 打开TomcatXw.exe找到java选项卡,添加以下参数 -Dcom. ...
- 【HANA系列】【第三篇】SAP HANA XS的JavaScript安全事项
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第三篇]SAP HANA XS ...