本文使用Power BI模板描述DAX中的引用Date表,可以在Analysis Services模型中使用相同的技术。在Dax Date Template页面下载最新版本的模板。
为什么引用Date表
Power BI中提供的自动日期/时间功能存在以下几个限制:
-
它有一组固定的行。
-
它没有处理财政年度。
-
它不包括周。
-
它不能在同一数据模型中的不同表之间共享。
通常,必须禁用该功能并创建自定义日期表。此任务重复且耗时。从包含功能齐全的Date表的Power BI模板开始创建新的Power BI模型使用户免于编写所需的DAX表达式 - 以及设置必要的属性以定义显示格式,层次结构和所需列的可见性。报告和计算。
什么是Power BI模板文件(PBIT)
扩展名为.PBIT的文件是Power BI模板文件,该文件不包含数据,并在打开时导入/生成数据。任何Power BI文件都可以保存为模板文件。数据模型中包含的所有表都保存为空表。它们在打开模板时填充,从数据源读取数据。
Power BI模板文件的一个常见用途是分发可以使用特定参数连接到数据源的标准数据模型,从而更改内存中加载的数据的过滤器。对于引用日期表,Power BI模板包含在打开文件时填充的计算表。这样,模板文件较小,可以用作“空”文件在Power BI中创建新的数据模型 - 从标准Date表开始,该表将连接到包含日期列的其他表。
如何使用引用Date表模板
打开“Date template.pbit”文件以创建新的Power BI项目。该模型包含一个名为Date的计算表。日期包含由两个配置参数(FirstYear和LastYear)定义的年份范围内存在的所有日期。
计算表的初始部分包含几个控制Date表生成方式的参数。这些列分为几个部分:
基准日期列
-
包括基本信息,如日期,星期几,月中的某天
太阳能日历(前缀日历)
-
标准月历1月至12月的列
财政月度日历(前缀财政)
-
财务月度(公历)日历的列,其中会计年度从非月份的月份的第一天开始(参见参数)
财政周报(前缀FW)
-
财务周历的列,其中年份从特定日期开始,遵循其中一个受支持的规则(请参阅参数)
-
支持ISO,4-4-5,4-5-4,5-4-4周历
假期和工作日
假期和工作日的列,根据参数中定义的国家/地区的假期
列选择
DAX表达式的最后一部分是SELECTCOLUMN语句,其中包含模板中使用的所有列。可以通过从SELECTCOLUMNS语句中删除或注释不需要的列来自定义Date表。从DAX计算表中删除的列也将从Date表中删除,同时删除相关的层次结构。 建议仅在最后一步中删除列。已注释然后取消注释的列将显示在Date表中,但已丢失先前应用的任何其他设置(层次结构,可见性,格式)。
Power BI在其编辑器中显示有限数量的行。使用DAX Editor之类的工具修改Date表的DAX表达式。使用复制和粘贴在Power BI和外部编辑器之间移动代码。
列参考
用于列名的命名约定如下:
-
带空格的完整名称(例如“Day of Month”)是可见列。如果该列被隐藏,则通过层次结构级别可见。
-
Pascal大小写中的名称(例如“WeekDayNumber”)是用于内部计算的隐藏列,或用于对其他列进行排序。
基准日期列
使用2018年3月21日作为参考获得和描述以下实施例。
-
日期:2008年3月21日(日期) - 这是日期数据类型中的日期
-
DateKey:20180321 (整数) - 整数格式的日期YYYYMMDD
-
月份日期:21 (整数)- 月中的某天
-
WeekDayNumber:3 (整数)- 数字格式的星期几,其中1是一周的第一天(取决于配置参数)
-
周日:星期二(字符串) - 星期几的名称,三个字母底舒服vfdvs
-
Sequential365DayNumber:43151 (整数)- 自1899年12月30日以来的天数,不包括2月29日(用于计算移动年度总计365天)
阳历(日历)
-
Calendar YearNumber:2018 (整数)- 日历年份编号
-
日历年份:2018年(字符串)- 日历年,按日历年份编号排序
-
Calendar QuarterNumber:1 (整数)- 日历季度编号
-
日历季度:Q1 (字符串)- 日历季度,按日历季度编号排序
-
Calendar YearQuarterNumber:8072 (整数)- 年份的连续季度数(= [Calendar YearNumber] * 4 + [Calendar QuarterNumber] - 1)
-
日历季度年份:2018 年第一季度(字符串)- 季度和年份,按日历YearQuarterNumber排序
-
Calendar MonthNumber:3 (整数)- 日历月号,其中1是1月
-
Calendar Month:March (String)- 日历月份名称,按Calendar MonthNumber排序
-
Calendar YearMonthNumber:24218 (整数)- 年份的连续月份数(= [Calendar YearNumber] * 12 + [Calendar MonthNumber] - 1)
-
日历月年份:2018 年 3月(字符串) - 月份和年份,按日历YearMonthNumber排序
-
Calendar WeekNumber:12 (整数)-日历周数
-
日历周:W12 (字符串)- 日历周,按日历周数排序
-
Calendar YearWeekNumber:6116 (整数)- 多年的连续年份数。一周总计7天。当一个星期从十二月到一月结束时,双方使用同一周的数字。
-
日历周年:W12-2018 (字符串)- 日历周和年,按日历WeekYearOrder排序(日历周可以在开始和年末少于7天)
-
Calendar WeekYearOrder:201812 (整数)- YYYYWW格式的日历年和周(日历周可以在开始和年末少于7天)
-
Calendar RelativeWeekPos:-8 (整数)- 与“TodayReference”相比的相对周数(参见参数); 负值是在TodayReference之前的几周,正值是在TodayReference之后的几周
-
Calendar RelativeMonthPos:-2 (整数)- 与“TodayReference”相比的相对月份(参见参数);负值是在TodayReference之前的几个月,正值是在TodayReference之后的几个月
-
Calendar RelativeQuarterPos:0 (整数)- 相对于“TodayReference”的相对季度(参见参数); 负值是TodayReference之前的季度,正值是TodayReference之后的季度。0表示与TodayReference相同的四分之一
-
Calendar RelativeYearPos:0 (整数)- 与“TodayReference”相比的相对年份(参见参数); 在TodayReference之前,负值是多年,在TodayReference之后,正值是多年。0表示与TodayReference相同的年份
-
日历StartOfMonth:3/1/2018 (日期)- 该月的第一天
-
日历EndOfMonth:3/31/2018 (日期)- 该月的最后一天
-
日历StartOfQuarter:1/1/2018 (日期)- 本季度的第一天
-
日历EndOfQuarter:3/31/2018 (日期)- 本季度的最后一天
-
日历StartOfYear:1/1/2018 (日期)- 一年中的第一天
-
日历EndOfYear:12/31/2018 (日期)- 一年的最后一天
-
Calendar MonthDays:31 (整数)- 该月的天数
-
Calendar QuarterDays:90 (整数)- 本季度的天数
-
Calendar YearDays:365 (整数)- 一年中的天数
-
Calendar DayOfMonthNumber:21 (整数)- 月内一天的连续编号(类似于Day of Month列)
-
Calendar DayOfQuarterNumber:79 (整数)- 该季度内一天的连续编号
-
Calendar DayOfYearNumber:79 (整数)- 一年中一天的连续编号
-
日历DatePreviousWeek:3/14/2018 (日期)- 前一周的相对相对日
-
日历DatePreviousMonth:2/21/2018 (日期)- 上个月的相对相对日期
-
日历DatePreviousQuarter:12/21/2017 (日期)- 上一季度的相对日期
-
日历DatePreviousYear:2017年3月21日(日期)- 与去年相同的相对日期
财政日历(财政)
使用TodayReference = 1/23/2018和FiscalCalendarFirstMonth = 9获得了作为示例的日期。因此,Q1是9月 - 11月,Q2是12月 - 2月,依此类推。
-
会计年度:F 2018 (字符串)- 会计年度,按财政年度编号排序
-
财政年度编号:2018年(整数)- 会计年度编号
-
财政季度编号:3 (整数)- 财政季度编号
-
财政季度:FQ3 (字符串)- 财政季度,按财政季度编号排序
-
Fiscal YearQuarterNumber:8074 (整数)- 多年的连续季度数(= [财政年度数字] * 4 + [财政季度数] - 1)
-
财政年度:2018年第3 季度(字符串) - 财政季度和年度,按财政年度季度排序
-
Fiscal MonthNumber:7 (整数)- 会计年度编号,其中1是会计年度的第一个月
-
会计月:Mar (字符串)- 会计年度名称,按财务月份编号排序
-
Fiscal YearMonthNumber:24222 (整数)- 年份的连续月份数(=[Fiscal YearNumber] * 12 + [Fiscal MonthNumber] - 1)
-
财政月份年份:2018 年 3月(字符串) - 会计年度和年度,按财政年度月份排序
-
财政周数:30 (整数)- 财政周数
-
财政周:W30 (字符串)- 财政周,按财政周数排序
-
Fiscal YearWeekNumber:6116 (整数)- 年份的连续年份数(一周总计 7天,一周数可以在1到52之间,12月到1月之间) - 类似于Calendar YearWeekNumber
-
财政周年:FW30-2018 (字符串)- 财政周和年,按财政周年年份排序(财政周可以在年初和年末计算少于7天)
-
财政周年年份:201830 (整数)- YYYYWW格式的会计年度和周数(日历周可以在年初和年末少于7天)
-
Fiscal RelativeWeekPos:-8 (整数)- 与“TodayReference”相比的相对周数(参见参数); 负值是在TodayReference之前的几周,正值是在TodayReference之后的几周
-
Fiscal RelativeMonthPos:-2 (整数)- 与“TodayReference”相比的相对月份(参见参数); 负值是在TodayReference之前的几个月,正值是在TodayReference之后的几个月
-
Fiscal RelativeQuarterPos:-1 (整数)- 与“TodayReference”相比的相对季度(参见参数); 负值是TodayReference之前的季度,正值是TodayReference之后的季度
-
Fiscal RelativeYYarPos:0 (整数)- 与“TodayReference”相比的相对年份(参见参数); 在TodayReference之前,负值是多年,在TodayReference之后,正值是多年
-
Fiscal StartOfMonth:3/1/2018 (日期)- 会计月的第一天
-
Fiscal EndOfMonth:3/31/2018 (日期)- 会计月的最后一天
-
Fiscal StartOfQuarter:3/1/2018 (日期)- 财政季度的第一天
-
Fiscal EndOfQuarter:5/31/2018 (日期)- 财政季度的最后一天
-
财政开始年限:9/1/2017 (日期)- 会计年度的第一天
-
财政结束年限:8/31/2018 (日期)- 会计年度的最后一天
-
Fiscal MonthDays:31 (整数)- 会计月中的天数
-
Fiscal QuarterDays:92 (整数)- 财政季度的天数
-
财政年度:365 (整数)- 会计年度的天数
-
Fiscal DayOfMonthNumber:21 (整数)- 会计月内的连续编号(类似于Day of Month列)
-
Fiscal DayOfQuarterNumber:21 (整数)- 该季度内的一天的连续编号
-
Fiscal DayOfYearNumber:201 (整数)- 会计年度内的连续编号
-
财政日期上一周:2017年3月14 日(日期)- 上一财政周的相对相对日
-
Fiscal DatePreviousMonth:2/21/2018 (日期)- 上一个会计月中的相对相对日期
-
财政日期上一季度:12/21/2017 (日期)- 上一财政季度的相对相对日
-
财政日期上一年:2017年3月21日(日期)- 上一财政年度的相对相对日
财政周刊(FW)
使用TodayReference = 1/23/2018,WeeklyType = Last,QuarterWeekType = 445和FiscalCalendarFirstMonth = 9获得样本日期。
-
FW YearNumber:2018 (整数)- 财政周年数
-
FW年份:FW 2017 (字符串)- 每周财政年度,按FW YearNumber排序
-
FW QuarterNumber:3 (整数)- 每周财政季度编号
-
FW Quarter:FW Q3 (String)- 每周财政季度,按FW QuarterNumber排序
-
FW YearQuarterNumber:8070 (整数)- 多年的连续季度数(= [FW YearNumber] * 4 + [FW QuarterNumber] - 1)
-
FW季度年:FW Q3 2017 (String)- 财政周度季度和年度,按FW YearQuarterNumber排序
-
FW MonthNumber:7 (整数)- 财政周数月/期间数,其中1是财政周年的第一个月
-
FW月:FW P07 (字符串)- 每周财政月份/期间名称,按财政月份编号排序
-
FW YearMonthNumber:24210 (整数)- 年份的连续月/期间数(= [FW YearNumber] * 12 + [FW MonthNumber] - 1)
-
FW月份年:FW P07 2017 (字符串)- 每周财政月/期和年,按FW YearMonthNumber排序
-
FW PeriodNumber:8 (整数)- 财政4周期间数(1至13年,另外14年期间为53周)
-
FW期间:FW P08 (字符串)- 财政4周期间,按FW PeriodNumber排序
-
FW WeekNumber:30 (整数)- 每周财政周数
-
FW周:FW W30 (字符串)-每周财政周,按FW WeekNumber排序
-
FW YearWeekNumber:6117 (整数)- 年份的连续年份数(一周总计 7天,一周数可以在1到52之间,12月到1月之间)
-
FW WeekYear:FW W30 2017 (String)- 每周财政周和年,按FW YearWeekNumber排序
-
FW StartOfWeek:3/18/2018 (日期)- 一周的第一天
-
FW EndOfWeek:3/24/2018 (日期)- 一周的最后一天
-
FW RelativeWeekPos:-8 (整数)- 与“TodayReference”相比的相对周数(参见参数); 负值是在TodayReference之前的几周,正值是在TodayReference之后的几周
-
FW RelativeMonthPos:-1 (整数)- 与“TodayReference”相比的相对财政周数月/期(参见参数); 负值是在TodayReference之前的几个月,正值是在TodayReference之后的几个月
-
FW RelativeQuarterPos:-1 (整数)- 相对于“TodayReference”的相对财政周度季度(参见参数); 负值是TodayReference之前的季度,正值是TodayReference之后的季度
-
FW RelativeYearPos:0 (整数)- 与“TodayReference”相比的相对财政周数(参见参数); 在TodayReference之前,负值是多年,在TodayReference之后,正值是多年
-
FW StartOfMonth:2/25/2018 (日期)- 财政周刊月/期间的第一天
-
FW EndOfMonth:3/24/2018 (日期)- 财政周刊月/期间的最后一天
-
FW StartOfQuarter:2/25/2018 (日期)- 财政周度季度的第一天
-
FW EndOfQuarter:5/26/2018 (日期)- 财政周度季度的最后一天
-
FW StartOfYear:8/27/2017 (日期)- 财政周刊的第一天
-
FW EndOfYear:8/25/2018 (日期)- 财政周刊的最后一天
-
FW MonthDays:28 (整数)- 财政周刊月/期间的天数
-
FW QuarterDays:91 (整数)- 财政周度季度的天数
-
FW YearDays:364 (整数)- 财政周刊年度的天数
-
FW DayOfMonthNumber:24 (整数)- 财政周历中月/期间的连续编号
-
FW DayOfQuarterNumber:24 (整数)- 财政周历中四分之一的连续编号
-
FW DayOfYearNumber:206 (整数)- 财政周刊年中的连续编号
-
FW DatePreviousWeek:3/14/2018 (日期)- 前一周的相对相对日
-
FW DatePreviousMonth:2/14/2018 (日期)- 上一个财政周刊月/期间的相对相对日期
-
FW DatePreviousQuarter:12/20/2017 (日期)- 上一财政周度相同的相对日
-
FW DatePreviousYear:2017年3月22日(日期)- 上一财政周的相同日期
假期和工作日
-
假日名称 :(空白)(字符串)- 假日名称,(空白)如果不是假日
-
IsWorkingDay:True (布尔值)- 工作日为True,非工作日为False,具体取决于工作日,假期和参数配置
-
日类型:工作日(字符串)- 显示“工作日”或“非工作日”的字符串,具体取决于工作日,假期和参数配置
参数
DAX表达式的初始部分设置了几个变量。这些变量定义用于生成日历的参数。
-
TodayReference
-
默认值:TODAY()
-
定义模型中的参考日期(如“当前日期”)。如果在参考日期之前最多5天有数据,则可以更改模型中的参考日期,以便正确设置周/月/季/年的所有相对计算。
-
-
第一年
-
默认值:数值,例如2008
-
在Date表中生成的第一年。可以使用动态计算分配读取其他表中可用数据的第一年。
-
-
去年
-
默认值:YEAR(TodayReference)
-
去年在Date表中生成。如果数据模型以允许未来日期的方式设置,则应设置读取其他表中可用数据的最后一年。
-
-
FiscalCalendarFirstMonth
-
范围:1到12之间的数字
-
用于财政月度(公历)日历和财政周历。如果设置为1,则会计月度日历(财务)与日历(日历)相同。但是,即使此参数设置为1,财务周历(FW)也始终生成不同的结果。
-
-
Firstdayofweek
-
范围:0 - 周日,1 - 周一,2 - 周二,... 5 - 周五,6 - 周六
-
定义一周的第一天,并定义每周日历中的一周开始时间。美国日历通常使用0(星期日),而欧洲日历使用1(星期一)。
-
-
IsoCountryHolidays
-
范围:国家的ISO代码(它应该是受支持的国家之一 - 美国,加州,英国,澳大利亚,DE,FR,IT,ES,NL,BE,PT)
-
定义要使用的国家/地区,以便将日历中的假期设置为非工作日。
-
-
WeeklyType
-
默认值:最后
-
范围:“最后”或“最近”
-
确定财务周历(FW)的年末定义。维基百科上最后/最近定义的参考。
-
最后:截至本财年末的最后一个工作日
-
最近的:最近的工作日最接近月末
-
-
对于ISO日历使用:
-
FiscalCalendarFirstMonth = 1 (ISO始终在1月开始)
-
FirstDayOfWeek = 1 (ISO总是在星期一开始)
-
WeeklyType =“最近” (ISO使用最接近的周类型算法)
-
-
美国本财政年度最后一个星期六结束
-
FirstDayOfWeek = 0 (周日美国周开始)
-
WeeklyType =“最后”
-
-
美国上周六最接近月末
-
FirstDayOfWeek = 0 (周日美国周开始)
-
WeeklyType =“最近的”
-
-
-
QuarterWeekType
-
默认值:445
-
范围:“445”,“454”,“544”
-
定义每个季度的每个周期的周数。在财政周历(FW)中总计数为13周的宿舍。
-
-
CalendarRange
-
默认值:日历
-
范围:“日历”,“FiscalGregorian”,“FiscalWeekly”
-
定义在表生成期间应用年份边界的日历类型。使用FiscalWeekly,一年中的第一天和最后一天可能分别不对应于一个月的第一天和最后一天。
-
-
CalendarGregorianPrefix
-
默认值:“”(空字符串)
-
太阳格里高利历日历列中使用的前缀。
-
-
FiscalGregorianPrefix
-
默认值:F
-
财务公历日历列中使用的前缀。
-
-
FiscalWeeklyPrefix
-
默认值:“FW”
-
财务周历日历列中使用的前缀。
-
-
WorkingDayType
-
默认值:工作日
-
工作日使用的描述
-
-
NonWorkingDayType
-
默认值:非工作日
-
用于非工作日的描述
-
-
WeeklyCalendarType
-
默认值:每周
-
范围:“每周”,“自定义”
-
使用Weekly基于FiscalCalendarFirstMonth,FirstDayOfWeek和WeeklyType自动生成每周财务日历。使用“自定义”可以定义CustomFiscalPeriods中定义的每年的任意日期范围。
-
-
工作日
-
默认值:1,2,3,4,5
-
定义一周的工作日,默认为周一至周五(0 =星期日,6 =星期六)。该定义应使用DATATABLE语法。
-
-
UseCustomFiscalPeriods
-
默认值:FALSE
-
如果您需要每周会计年度的任意定义,请使用CustomFiscalPeriods。设置为TRUE以使用CustomFiscalPeriods变量。
-
-
IgnoreWeeklyFiscalPeriods
-
默认值:FALSE
-
将IgnoreWeeklyFiscalPeriods设置为TRUE,以忽略自动生成的WeeklyFiscalPeriods表来管理Weekly日历。只有当UseCustomFiscalPeriods为TRUE时,才应将IgnoreWeeklyFiscalPeriods设置为TRUE。
-
-
CustomFiscalPeriods
-
默认值:参见示例代码
-
定义可以覆盖标准生成的每周日历的自定义会计期间列表。该定义应使用DATATABLE语法。源文件下载链接:https://github.com/sql-bi/DaxDateTemplate
-
1.Power BI免费下载:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下载地址
2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。
Power Data技术交流群:702966126 (验证注明:博客园Power BI)
更多精彩内容请关注微信公众号:悦策PowerBI
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,作者博客:https://www.cnblogs.com/yeacer/