导图社区 LV2数据建模课程全图(下)(无二维码)
无数据
PowerBI数据建模核心功能课程全图,每天一点点进步亿点点,简约而不简单,简约让BI更简单。
编辑于2023-05-30 22:59:47 四川省
PowerBI 简约派
|
LV2数据建模
下
商
业
智
能
分
析
培
训
计
划
更
高
效
的
Power
BI
使
用
技
巧
全
功
略
每天一点点
进步亿点点
简约而不简单
简约,让BI更简单
8
关系建模
关系 建模 的本质
模拟案例
运算过程
1. 分别使用省份/日期关系表即维度表的省份唯一字段项和日期唯一项字段,分别关联三个事实表清单的省份与日期字段
2. 在运算模型时,将根据关系的连线方式,按照关系箭头的方向进行查询清单。
3. 即一对多是维度表为一端,事实表为多端,方向为一端到多端,即可使用省份表与日期表分别查询三个不同清单的记录。
4. 将记录查询完成后,输入到DAX的上下文环境中,在根据DAX公式内容进行运算输出结果。
5. 即可实现在一个公式,同时查询每个省每个日期下的人口数、人均可支配收入、消费水平的结果,实现一个公式完成多维清单的查询,并输出不同维度下的结果。
创建 关系 的方法
方式1:拖拽式
直接从一端维度表上选中维度列后,将维度列内容拖入到事实表对应的列上,即可实现连线。
方式2:管理关系
在任意界面点击管理关系,即可打开所有关系的编辑框,点击新建即可新建关系
方式3: 设置关系属性
此种办法只能用于已创建的关系进行修改使用,无法直接新建关系。
创建 关系 的要点
1、表格分类:事实表-SA-多端、维度表-RS-一端
2、关闭自动添加关系
3、新增布局进行自定义设置
4、表格摆放:星型,或者左右两部分分布摆放
5、快捷创建关系,在维度表上选中关系字段后,拖动到事实表对应的关系字段。
6、尽量避免做二级关系,可在一级关系表上以新建列的方式加入二级关系的字段。
7、折叠维度表的其他多余字段
8、无法启用关系的原因:三个表形成了闭环关系
9、连接关系后,可对比为一道烹饪中包含哪些菜,或者说一道烹饪中包含对应菜品的数量。
10、关系的类型:尽量保证关系全部以一对多与单一方向的条件展示,一端为维度表,多端为事实表。
如何 处理 多对多关系
使用一个中间表作为维度表,将两个多端表进行关联,分别做两次一对多关系,即可处理多对多关系。
7
DAX基础知识
与EXCEL公式做对比
相同点
公式结构与Excel类似,都是在“=”后跟上计算公式
都用“()”,小括号引用公式内的内容
都可以用SUM/COUNT/AVERAGE进行求和/计数/平均值
Excel和DAX中的数字运算内容相同,均可以用+-*/计算加减乘除,并带入数字计算。
不同点
Excel中是以单元格作为单位进行计算,而DAX中是以列为单位进行计算。
EXCEL计算只需要引用单元格位置即可,而DAX计算中需要引用表和引用列
计算的底层逻辑不同,Excel只有单元格环境,而DAX有筛选上下文、行上下文两种计算环境。
DAX中的各类字符
括号
1. () :DAX公式的参数输入部分
2. [] :DAX公式中引用字段
3. {} :DAX公式中输入列表
运算符号
1. +-*/ :按excel同理使用
2. ^ :次幂的符号
比较运算 符号
1. = : 等于
2. > :大于
3. < :小于
4. >= :大于或等于
5. <= :小于或等于
6. <> :不等于
7. == :严格等于
其他符号
1. ' ' :单引号,引用表
2. "" :双引号,引用文本
3. &:文本连接符号
4. && :且,多条件同时满足
5. ||:或,多条件任一满足
度量值写作 格式
写作格式
格式标准
1. 度量值名称命名:使用空格/其他字符做好分级命名
2. 公式第一行:公式第一行仅保留度量值名称和等号,度量值名称和等号之间添加一个空格符
3. 每个DAX公式与右括号在一行,右括号后使用shift+enter到下一行
4. 公式的参数若有分组内容,回车至下一行同一位置写作。
5. 在DAX公式参数写作完成后,回车至下一行输入左括号,左括号会自动与DAX公式对应的右括号对齐
快速 格式化
DAX Studio格式化
将DAX公式复制粘贴至编辑框,点击Format Query,选择Longoing line/Short line两种方式任意一种。
该项功能需要联网才能使用。
Tabular editor格式化
在Tabular editor中选中对应度量值,点击格式化按钮,选择Format Query/Short line两种方式任意一种。
该项功能需要联网才能使用。
Bravo格式化
打开Bravo,选择DAX标准格式化,选中对应度量值,可预览格式化后的效果。
Bravo可选择多个度量值或全选度量值,进行一键批量格式化
该项功能需要联网才能使用。
快捷键
DAX编辑器
转到行号 Ctrl + G
向上/向下移动行 Alt+向上键 / 向下键
向上/向下复制行 Shift+Alt+向上键 / 向下键
在下方插入行 Shift+Enter
在上方插入行 Ctrl+Shift+Enter
删除所选词 Ctrl + Del
删除所有选定的行 Ctrl + Shift + K
跳转到匹配的括号 Ctrl+Shift+ \
跳转到某行代码的开头 Ctrl+Home
跳转到某行代码的末尾 Ctrl+End
缩进行/将行扩展到边距 Ctrl+] / [
插入光标 Alt+单击
选择当前行 Ctrl + L
选择当前所选内容的所有匹配项 Ctrl+Shift+L
选择当前词语的所有匹配项 Ctrl+F2
选择当前所选内容的接下来的几个匹配项 Ctrl + D
选择上面一行 Shift + 向上键
选择下面一行 Shift + 向下键
上/下输入多行代码 Ctrl + Alt + 向上键 / 向下键
注释行 Ctrl + / 或 Ctrl + K + C
取消注释行 Ctrl + / 或 Ctrl + K + U
增大字号 Ctrl + + 或向上滚动
减小字号 Ctrl + - 或向下滚动
显示或隐藏“阅读更多”工具提示 Ctrl+I
键盘快捷方式
在PowerBI界面同时按下shitf+?即可打开
度量值管理
度量值分级管理
在建模视图界面选中需要分级管理的度量值,在属性框内输入显示文件夹名称,即可创建度量值分级管理文件夹。
可在文件夹名称中加入“\”,做多层级的度量值文件夹
批量修改格式
在视图界面选中度量值后,在属性界面可批量修改度量值格式
6
各类基础名词释义
DAX
定义
是在数据建模中调用字段进行各类计算的公式类型
DAX原名是Data Analysis Expression数据分析表达式,并非是一套编程语言,DAX是为描述商业逻辑而开发的语言,可简单理解为DAX是描述业务发展逻辑的语言。
作用
DAX可调用现有字段计算结果,结果以度量值、新建表、新建列三种形式存放,分别代表计算值、计算表、计算列。
DAX公式结果类似Excel,入门成本低,但深入学习难度大,需理解DAX在上下文环境中的运算方式。
既然是描述业务的语言,所以应该将DAX的计算过程当成描述业务的过程,故要想写好DAX公式,应当优先理解业务逻辑
结果
度量值
新建表
新建列
上下文
定义
计值上下文,分为筛选上下文与行上下文
度量值中会自带筛选上下文,新建列中会自带行上下文,新建表中会根据DAX公式在确定筛选上下文和行上下文。
作用
上下文是DAX计算的环境,可以为DAX的计算提供筛选上下文和行上下文两种不同的环境
两种上下文在运算时,互不影响,也互不交叉,但两种上下文可以通过CALCULATE进行转换上下文
6
各类基础名词释义
事实表
定义
有着日期、员工、部门等重复记录的表格
一般多为Power Query编辑器中直接导入的数据源
一般会以多个清单分批导入模型中
在课程中全部以“SA_”开头标记为事实表
作用
是做数据分析的数据基础
是度量值、新建表、新建列的基表
是维度表创建关系的关联表
汇总了所有所需的业务数据
结果
维度表
定义
有着日期、员工、部门等唯一不重复记录的表格
推荐使用新建表的方式完成维度表的创建,加快后续运行效率
每个维度表仅有一列信息是唯一不重复项
在课程中全部以“RS_”开头标记为维度表
作用
是做多维数据分析的重要工具
日期维度表是做智能日期数据分析的必备品
维度表可做多个层级,通过多个维度表,关联不同维度的事实表
结果
关系
定义
是PowerBI数据建模的核心优势
是加快模型运行效率最优解
是关联事实表和维度表的桥梁
关系连线分为实线以及虚线,关系连线有单一和双向的方向性
作用
能够实现低代码完成多维数据分析
是加快模型运行效率的利器,物理实体连线关系的运行效率大于虚线关系以及TREATAS创建的关系。
可以实现多个数据源合并、优化查询效率、开展高级业务分析以及创建更直观的可视化建模
结果
字段
定义
事实表和维度表中列数据即为字段
在度量值中调用字段需要引用表,在新建列中可直接引用列
作用
是计算的最小单元,PowerBI是以列进行计算,提高运行效率
PowerBI数据是以列式数据库存放,每一个计算都是通过列式数据组建成一张表后,再做运算。
结果
度量值
定义
使用DAX完成字段计算的功能,度量值可以引用所有表中列进行运算。
度量值不属于任何表,可存放在任意表,均可运行,但需要对字段进行完整引用,即引用表与列
度量值是PowerBI数据分析的核心,所有数据分析应优先使用度量值完成。
作用
度量值在不加入计算时,处于休眠状态,将不会占用模型运行内存,可大幅优化模型运行效率。
度量值不属于任何表,但可以计算模型中所有字段内容
度量值自带筛选上下文的功能,可借助筛选上下文低代码实现复杂数据分析
在使用迭代函数的情况下,度量值中也可使用行上下文环境,通过筛选上下文和行上下文进行计算。
结果
新建表
定义
使用DAX公式完成表运算的功能,表中可以包含一列或多列,同样使用列式数据库的逻辑,多列组建成一张表
仅PowerBI中可设置新建表,Excel BI无法使用DAX新建表
作用
可替代Power Query中的的简单数据清洗、合并查询、追加查询,加快模型的运算效率
可将字段、度量值进行组合,组建成一张表后并导出使用
可利用新建表功能,创建各种维度表
结果
新建列
定义
使用DAX公式完成字段运算的功能,但只能计算当前表中的字段,无法计算所有表的字段
新建列只属于当前表,无法移动,只能通过关系建模,按照字段的方式,在其他表的计算中进行调用。
作用
新建列一般在添加字段维度时使用,其他情况不推荐使用。
在刷新数据表时,将一并执行新建列的运算,新建列将在每一次运算时占用运行内存,同时在生成字段内容后,将对数据模型的存储大小产生影响。计算列越多,无论是运行效率还是存储效率,都将受到很大影响。
新建列不受模型中的交互效果影响,即无法通过数据建模的新建参数方式,控制新建列的数据变化。
结果
5
建模外部工具
DAX Studio
功能
测试DAX公式、获取SSAS服务地址、优化DAX效率、快速导出清单、测试电脑性能。
查询 公式
EVALUAT { [1.0 基础 度量值] }
EVALUATE ROW( "销售额" , [1.0 基础 度量值] )
EVALUATE SUMMARIZE( 'SA_销售记录' , "销售额" , [1.0 基础 度量值] )
DEFINE MEASURE 'SA_销售记录'[销售额] = SUM('SA_销售记录'[销售金额]) EVALUATE { [销售额] }
电脑 性能 测试 代码
DEFINE VAR t1 = SELECTCOLUMNS( CALENDAR(1 , 10000), "x" ,[Date] ) VAR t2 = SELECTCOLUMNS( CALENDAR(1 , 10000), "y" ,[Date] ) VAR C = CROSSJOIN( t1 , t2 ) VAR result =COUNTROWS( C ) EVALUATE ROW( "x" ,result )
结果
Tabular editor
功能
批量完成度量值管理、复制粘贴度量值、添加计算项、计算组、通过计算项修改格式。
多维 日期 分析 计算组 公式
年度达成 = CALCULATE ( SELECTEDMEASURE(), FILTER ( 'RS_日期表' , [Date] >= [3.29 手工智能时间 当期 当年起期] && [Date] <= [3.29 手工智能时间 当期 最新日期] ) )
月度达成 = CALCULATE ( SELECTEDMEASURE(), FILTER ( 'RS_日期表', [Date] >= [3.29 手工智能时间 当期 当月起期] && [Date] <= [3.29 手工智能时间 当期 最新日期] ) )
年度同比 = VAR TONGQI = CALCULATE ( SELECTEDMEASURE(), FILTER ( 'RS_日期表', [Date] >= [3.29 手工智能时间 同期 上年起期] && [Date] <= [3.29 手工智能时间 同期 最新日期] ) ) VAR DANGQI = CALCULATE ( SELECTEDMEASURE(), FILTER ( 'RS_日期表', [Date] >= [3.29 手工智能时间 当期 当年起期] && [Date] <= [3.29 手工智能时间 当期 最新日期] ) ) RETURN DIVIDE ( DANGQI - TONGQI, TONGQI, 0 )
月度同比 = VAR TONGQI = CALCULATE ( SELECTEDMEASURE(), FILTER ( 'RS_日期表', [Date] >= [3.29 手工智能时间 同期 当月起期] && [Date] <= [3.29 手工智能时间 同期 最新日期] ) ) VAR DANGQI = CALCULATE ( SELECTEDMEASURE(), FILTER ( 'RS_日期表', [Date] >= [3.29 手工智能时间 当期 当月起期] && [Date] <= [3.29 手工智能时间 当期 最新日期] ) ) RETURN DIVIDE ( DANGQI - TONGQI, TONGQI, 0 )
批量 格式化 计算项
启用格式 = VAR X = SELECTEDMEASURENAME() RETURN SWITCH( TRUE(), SEARCH( "同比" , x , , 0 ) > 0 , "0.0%" , SEARCH( "达成" , x , , 0 ) > 0 , "0.0" , BLANK() )
权限 控制
权限控制 = CALCULATE( SELECTEDMEASURE() , FILTER( 'SA_销售记录', 'SA_销售记录'[销售大区] = CALCULATE( VALUES( '4.2 用户权限表'[可查看地区] ) , '4.2 用户权限表'[用户名] = SELECTEDVALUE( '4.2 登录用户'[用户名] ) ) ) )
结果
Bravo
一键 批量 格式化
自动 生成 日期表
批量 导出 EXCEL/ CSV 清单
4
DAX制作七步法
DAX七步制作法
作用
梳理如何从业务逻辑开始梳理一步步完成DAX的写作。
步骤
1. 梳理业务需求
2. 确定展示形式
3. 完成关系建模
4. 确定度量逻辑
5. 完成DAX制作
6. 矩阵检验结果
7. 持续迭代优化
案例一
案例二
案例三
3
常用DAX公式
智能时间公式DATESINPERIOD/DATESBETWEEN
定义
1. DATESINPERIOD:返回给定期间中的日期;
2. DATESBETWEEN:返回两个给定日期之间的日期。
语法
1. DATESINPERIOD( '表'[日期列] , 开始日期 , 平移间隔 , 平移年/季度/月度/日)
2. DATESBETWEEN( '表'[日期列] , 开始日期 , 结束日期 )
逻辑
1. DATESINPERIOD:逻辑类似DATEADD,但不再以年度/季度/月度做重置计算,灵活的平移日期筛选进行计算。
2. DATESBETWEEN:给定开始日期与结束日期,返回这一期间内所有日期的表进行筛选。
对比
以DATESINPERIOD与DATESBETWEEN的实战案例与等价公式进行讲解。
常用 公式
DATESINPERIOD 移动总计 年度 = CALCULATE( [1.0 基础 度量值] , DATESINPERIOD( 'RS_日期表'[Date] , MAX( 'RS_日期表'[Date] ) , -1 , YEAR ) )
DATESINPERIOD 移动总计 季度 = CALCULATE( [1.0 基础 度量值] , DATESINPERIOD( 'RS_日期表'[Date] , MAX( 'RS_日期表'[Date] ) , -1 , QUARTER ) )
DATESINPERIOD 移动总计 月度 = CALCULATE( [1.0 基础 度量值] , DATESINPERIOD( 'RS_日期表'[Date] , MAX( 'RS_日期表'[Date] ) , -1 , MONTH) )
DATESBETWEEN 移动总计 = CALCULATE( [1.0 基础 度量值] , DATESBETWEEN( 'RS_日期表'[Date] , NEXTDAY( SAMEPERIODLASTYEAR( LASTDATE( 'RS_日期表'[Date] ) ) ) , LASTDATE( 'RS_日期表'[Date] ) ) )
DATESINPERIOD 移动总计 等价公式 = VAR RIQI = MAX( 'RS_日期表'[Date] ) VAR Y = RIQI VAR X = EOMONTH( RIQI , -13 ) + DAY( RIQI ) + 1 RETURN CALCULATE( [1.0 基础 度量值] , FILTER( ALL( 'RS_日期表' ) ,AND( 'RS_日期表'[Date] >= X , 'RS_日期表'[Date] <= Y ) ) )
对比 结果
智能时间公式总览
定义
展示所有智能时间公式的代码与使用逻辑,同时使用字段参数在一个矩阵中动态选择所需的智能时间公式
常用 公式
DATES MTD = CALCULATE( [1.0 基础 度量值] , DATESMTD( 'RS_日期表'[Date] ) )
DATES QTD = CALCULATE( [1.0 基础 度量值] , DATESQTD( 'RS_日期表'[Date] ) )
DATES YTD = CALCULATE( [1.0 基础 度量值] , DATESYTD( 'RS_日期表'[Date] ) )
DATES YTD 控制财年 = CALCULATE( [1.0 基础 度量值] , DATESYTD( 'RS_日期表'[Date] , "6-30" ) )
TOTAL MTD = TOTALMTD( [1.0 基础 度量值] , 'RS_日期表'[Date] )
TOTAL QTD = TOTALQTD( [1.0 基础 度量值] , 'RS_日期表'[Date] )
TOTAL YTD = TOTALYTD( [1.0 基础 度量值] , 'RS_日期表'[Date] )
TOTAL YTD 控制财年 = TOTALYTD( [1.0 基础 度量值] , 'RS_日期表'[Date] , "6-30" )
DATEADD 平移 上一季度 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , QUARTER ) )
DATEADD 平移 上一年 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , YEAR ) )
DATEADD 平移 上一天 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , DAY ) )
DATEADD 平移 上一月 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , MONTH ) )
SAMEPERIODLASTYEAR 平移 上一年 = CALCULATE( [1.0 基础 度量值] , SAMEPERIODLASTYEAR( 'RS_日期表'[Date] ) )
PARALLELPERIOD 平移完整周期 上一季度 = CALCULATE( [1.0 基础 度量值] , PARALLELPERIOD( 'RS_日期表'[Date] , -1, QUARTER))
PARALLELPERIOD 平移完整周期 上一年 = CALCULATE( [1.0 基础 度量值] , PARALLELPERIOD( 'RS_日期表'[Date] , -1 ,YEAR ) )
PARALLELPERIOD 平移完整周期 上一月 = CALCULATE( [1.0 基础 度量值] , PARALLELPERIOD( 'RS_日期表'[Date] , -1 ,MONTH ) )
PREVIOUS 平移完整周期 上一季度 = CALCULATE( [1.0 基础 度量值] , PREVIOUSQUARTER( 'RS_日期表'[Date] ) )
PREVIOUS 平移完整周期 上一年 = CALCULATE( [1.0 基础 度量值] , PREVIOUSYEAR( 'RS_日期表'[Date] ) )
PREVIOUS 平移完整周期 上一月 = CALCULATE( [1.0 基础 度量值] , PREVIOUSMONTH( 'RS_日期表'[Date] ) )
DATESBETWEEN 移动总计 = CALCULATE( [1.0 基础 度量值] , DATESBETWEEN( 'RS_日期表'[Date] , NEXTDAY( SAMEPERIODLASTYEAR( LASTDATE( 'RS_日期表'[Date] ) ) ) , LASTDATE( 'RS_日期表'[Date] ) ) )
DATESINPERIOD 移动总计 季度 = CALCULATE( [1.0 基础 度量值] , DATESINPERIOD( 'RS_日期表'[Date] , MAX( 'RS_日期表'[Date]), -1 , QUARTER ) )
DATESINPERIOD 移动总计 年度 = CALCULATE( [1.0 基础 度量值] , DATESINPERIOD( 'RS_日期表'[Date] , MAX( 'RS_日期表'[Date]), -1 , MONTH) )
DATESINPERIOD 移动总计 年度 = CALCULATE( [1.0 基础 度量值] , DATESINPERIOD( 'RS_日期表'[Date] , MAX( 'RS_日期表'[Date]), -1 , YEAR ) )
CLOSINGBALANCEMONTH = CLOSINGBALANCEMONTH( [1.0 基础 度量值] , 'RS_日期表'[Date] )
CLOSINGBALANCEQUARTER = CLOSINGBALANCEQUARTER( [1.0 基础 度量值] , 'RS_日期表'[Date] )
CLOSINGBALANCEYEAR = CLOSINGBALANCEYEAR( [1.0 基础 度量值] , 'RS_日期表'[Date] )
ENDOFMONTH = ENDOFMONTH( 'RS_日期表'[Date] )
ENDOFQUARTER = ENDOFQUARTER( 'RS_日期表'[Date] )
ENDOFYEAR 6-30年底 = ENDOFYEAR( 'RS_日期表'[Date] , '6-30' )
ENDOFYEAR 默认年底 = ENDOFYEAR( 'RS_日期表'[Date] )
FIRSTDATE = CALCULATE( [1.0 基础 度量值] , FIRSTDATE( 'RS_日期表'[Date] ) )
FIRSTNONBLANK = CALCULATE( [1.0 基础 度量值] , FIRSTNONBLANK( 'RS_日期表'[Date] , COUNTROWS( RELATEDTABLE( 'SA_销售记录') ) ) )
LASTDATE = CALCULATE( [1.0 基础 度量值] , LASTDATE( 'RS_日期表'[Date] ) )
LASTDATENONBLANK = CALCULATE( [1.0 基础 度量值] , LASTNONBLANK( 'RS_日期表'[Date] , COUNTROWS( RELATEDTABLE('SA_销售记录' ) ) ) )
NEXTMONTH = CALCULATE( [1.0 基础 度量值] , NEXTMONTH( 'RS_日期表'[Date] ) )
NEXTQUARTER = CALCULATE( [1.0 基础 度量值] , NEXTQUARTER( 'RS_日期表'[Date] ) )
NEXTYEAR 6-30年底 = CALCULATE( [1.0 基础 度量值] , NEXTYEAR( 'RS_日期表'[Date] , "6-30" ) )
NEXTYEAR 默认年底 = CALCULATE( [1.0 基础 度量值] , NEXTYEAR( 'RS_日期表'[Date] ) )
OPENINGBALANCEMONTH = OPENINGBALANCEMONTH( [1.0 基础 度量值] , 'RS_日期表'[Date] )
OPENINGBALANCEQUARTER = OPENINGBALANCEQUARTER( [1.0 基础 度量值] , 'RS_日期表'[Date] )
OPENINGBALANCEYEAR = OPENINGBALANCEYEAR( [1.0 基础 度量值] , 'RS_日期表'[Date] )
STARTOFMONTH = STARTOFMONTH( 'RS_日期表'[Date] )
STARTOFQUARTER = STARTOFQUARTER( 'RS_日期表'[Date] )
STARTOFYEAR 6-30年底 = STARTOFYEAR( 'RS_日期表'[Date] , "6-30" )
STARTOFYEAR 默认年底 = STARTOFYEAR( 'RS_日期表'[Date] )
对比 结果
手工智能时间公式
定义
使用EOMONTH批量自定义各类时间节点,配合CALCULATE+FILTER筛选任意时间的数据做分析
语法
以CALCULATE( [基础度量值] , FILTER( '日期表'[DATE] , [DATE] >= [开始日期] && [DATE] <= [结束日期] ) )
逻辑
1. 配合新建参数,建立当年、当月、上月、次月、上年等所需的时间节点。
2. 以通用的CALCULATE+FILTER套路筛选对应维度的数据。
对比
对比各类智能时间公式的制作
常用 公式
手工智能时间 当期 最新日期 = [PM_截止时间 值]
手工智能时间 当期 当年起期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , -MONTH( [PM_截止时间 值] ) ) + 1
手工智能时间 当期 当年止期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , 12 - MONTH( [3.29 手工智能时间 当期 最新日期] ) )
手工智能时间 当期 当月起期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , -1 ) + 1
手工智能时间 当期 当月止期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , 0 )
手工智能时间 同期 最新日期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , -13 ) + DAY( [3.29 手工智能时间 当期 最新日期] )
手工智能时间 同期 上年起期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , -MONTH( [PM_截止时间 值] ) - 12 ) + 1
手工智能时间 同期 上年止期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , -MONTH( [PM_截止时间 值] ) )
手工智能时间 同期 当月起期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , - 13 ) + 1
手工智能时间 同期 当月止期 = EOMONTH( [3.29 手工智能时间 当期 最新日期] , - 12 )
手工智能时间 当月达成 = CALCULATE( [1.0 基础 度量值] , FILTER( 'RS_日期表' , [Date] >= [3.29 手工智能时间 当期 当月起期] && [Date] <= [3.29 手工智能时间 当期 当月止期] ) )
手工智能时间 当年达成 = CALCULATE( [1.0 基础 度量值] , FILTER( 'RS_日期表' , [Date] >= [3.29 手工智能时间 当期 当年起期] && [Date] <= [3.29 手工智能时间 当期 当年止期] ) )
对比 结果
3
常用DAX公式
基础时间公式
定义
各类基础时间公式,以对应字段/度量值直接带出对应日期/时间。
常用 公式
基础时间公式 年度 = YEAR( [PM_截止时间 值] )
基础时间公式 季度 = QUARTER( [PM_截止时间 值] )
基础时间公式 月度 = MONTH( [PM_截止时间 值] )
基础时间公式 周数 = WEEKNUM( [PM_截止时间 值] , 2 )
基础时间公式 日 = DAY( [PM_截止时间 值] )
基础时间公式 日期 = DATE( [3.19 基础时间公式 年度] , [3.19 基础时间公式 月度] , [3.19 基础时间公式 日] )
基础时间公式 平移月份 = EDATE( [PM_截止时间 值] , 1 )
基础时间公式 今天 = TODAY()
基础时间公式 星期 = WEEKDAY( [PM_截止时间 值] , 2 )
基础时间公式 上月底 = EOMONTH( [PM_截止时间 值] , -1 )
基础时间公式 本月底 = EOMONTH( [PM_截止时间 值] , 0 )
基础时间公式 下月底 = EOMONTH( [PM_截止时间 值] , 1 )
基础时间公式 年龄 = YEARFRAC( [PM_截止时间 值] , TODAY() )
基础时间公式 时间 = TIME( [PM_小时 值] , [PM_分钟 值] , [PM_秒 值] )
基础时间公式 小时 = HOUR( [3.23 基础时间公式 时间] )
基础时间公式 分钟 = MINUTE( [3.23 基础时间公式 时间] )
基础时间公式 秒 = SECOND( [3.23 基础时间公式 时间] )
当前筛选上下文日期 日期 = SELECTEDVALUE( 'RS_日期表'[Date] )
当前筛选上下文日期 年度 = YEAR( SELECTEDVALUE( 'RS_日期表'[Date] ) )
对比 结果
智能时间公式DATES/TOTAL
定义
1. DATES:返回此年度/季度/月度中截止当前日期的一组日期。
2. TOTAL:返回年度/季度/月度中截止当前日期的一组日期对应的表达式计值
语法
1. DATESYTD/QTD/MTD( '日期表'[Date] , "财年截止日期" )
2. TOTALYTD/QTD/MTD( 表达式 , '日期表'[Date] , "财年截止日期" )
逻辑
1. 首先确定需要做哪一类累计值计算,年度累计用YTD,季度累计用QTD,月度累计用MTD。
2. 参数中的日期字段尽可能用完整日期,可以用维度表中的日期列;
3. 忽略财年截止日期默认以12月31日为截止日期;加入财年截止日期,则从上年财年截止日期+1到今年财年截止日期
对比
DATES/TOTAL系列6个公式常用写作,以等价公式讲解DATES/TOTAL背后的运算逻辑,同时讲解财年截止日期的计算逻辑。
常用 公式
DATES YTD = CALCULATE( [1.0 基础 度量值] , DATESYTD( 'RS_日期表'[Date] ) )
DATES QTD = CALCULATE( [1.0 基础 度量值] , DATESQTD( 'RS_日期表'[Date] ) )
DATES MTD = CALCULATE( [1.0 基础 度量值] , DATESMTD( 'RS_日期表'[Date] ) )
TOTAL YTD = TOTALYTD( [1.0 基础 度量值] , 'RS_日期表'[Date] )
TOTAL QTD = TOTALQTD( [1.0 基础 度量值] , 'RS_日期表'[Date] )
TOTAL MTD = TOTALMTD( [1.0 基础 度量值] , 'RS_日期表'[Date] )
DATES/TOTAL 等价公式 = VAR X = MAX( 'RS_日期表'[Date] ) VAR Y = DATE( YEAR( X ) , 1 , 1 ) RETURN CALCULATE( [1.0 基础 度量值] , FILTER( ALL( 'RS_日期表'[Date] ) , AND( 'RS_日期表'[Date] >= Y ,'RS_日期表'[Date] <= X ) ) )
DATES YTD 控制财年 = CALCULATE( [1.0 基础 度量值] , DATESYTD( 'RS_日期表'[Date] , "06-30" ) )
TOTAL YTD 控制财年 = TOTALYTD( [1.0 基础 度量值] , 'RS_日期表'[Date] , "06-30" )
DATES/TOTAL 控制财年 等价公式 = VAR X = MAX( 'RS_日期表'[Date] ) VAR Y = DATE( YEAR( X ) , 6 , 30 ) + 1 VAR Z = IF( X <= Y , DATE( YEAR( X ) - 1 , 6 , 30 ) + 1 , Y ) RETURN CALCULATE( [1.0 基础 度量值] , FILTER( ALL( 'RS_日期表'[Date] ) , AND( 'RS_日期表'[Date] >= Z , 'RS_日期表'[Date] <= X ) ) )
对比 结果
智能时间公式DATEADD/SAMEPERIODLASTYEAR
定义
DATEADD:按指定的间隔移动给定的一段日期;
SAMEPERIODLASTYEAR:返回上一年度中当前选择的一组日期。
语法
DATEADD( '表'[日期] , 平移间隔 , 平移的年/季/月/天
SAMEPERIODLASTYEAR( '表’[日期] )
逻辑
DATEADD:可按年/季/月/日,根据当前筛选上下文中日期,平移对应筛选上下文的部分日期进行筛选计算。
SAMEPERIODLASTYEAR仅针对平移上一年的数据进行统计。两者为等价公式,性能一致
对比
以DATEADD/SAMEPERIONLASTYEAR实战案例讲解,同时用等价公式展示运算逻辑。
常用 公式
DATEADD 平移 上一年 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , YEAR ) )
DATEADD 平移 上一季度 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , QUARTER ) )
DATEADD 平移 上一月 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , MONTH ) )
DATEADD 平移 上一天 = CALCULATE( [1.0 基础 度量值] , DATEADD( 'RS_日期表'[Date] , -1 , DAY ) )
SAMEPERIODLASTYEAR 平移 上一年 = CALCULATE([1.0 基础 度量值] , SAMEPERIODLASTYEAR( 'RS_日期表'[Date] ) )
DATEADD 平移 等价公式 = VAR OFFSETYEAR = -1 VAR DATE_ADD = TREATAS( SELECTCOLUMNS( CALCULATETABLE( DISTINCT( 'RS_日期表'[Date] ) ) , "DATE" , DATE( YEAR( 'RS_日期表'[Date] ) + OFFSETYEAR , MONTH( 'RS_日期表'[Date] ) , DAY( 'RS_日期表'[Date] ) ) ) , 'RS_日期表'[Date] ) RETURN CALCULATE( [1.0 基础 度量值] , DATE_ADD )
对比 结果
智能时间公式PARALLELPERIOD/PREVIOUS
定义
1. PARALLELPERIOD:返回按一组给定日期和指定的间隔列出的并行日期期间;
2. PREVIOUS:返回上一年度/季度/月度。
语法
1. PARALLELPERIOD( '表'[日期列] , 平移间隔 , 平移年/季度/月 )
2. PREVIOUSYEAR/QUARTER/MONTH( '表'[日期列] )
逻辑
1. PARALLELPERIOD:可按年/季/月/日,根据当前筛选上下文中日期,平移至对应筛选上下文下完整期间的日期进行筛选计算。
2. PREVIOUS:为PARALLELPERIOD简化公式。两者为等价公式,性能一致。
对比
以PARALLELPERIOD/PREVIOUS实战案例讲解,同时用等价公式展示运算逻辑
常用 公式
PARALLELPERIOD 平移完整周期 上一年 = CALCULATE( [1.0 基础 度量值] , PARALLELPERIOD( 'RS_日期表'[Date] , -1 , YEAR ) )
PARALLELPERIOD 平移完整周期 上一季度 = CALCULATE( [1.0 基础 度量值] , PARALLELPERIOD( 'RS_日期表'[Date] , -1 , QUARTER ) )
PARALLELPERIOD 平移完整周期 上一月 = CALCULATE( [1.0 基础 度量值] , PARALLELPERIOD( 'RS_日期表'[Date] , -1 , MONTH ) )
PREVIOUS 平移完整周期 上一年 = CALCULATE( [1.0 基础 度量值] , PREVIOUSYEAR( 'RS_日期表'[Date] ) )
PREVIOUS 平移完整周期 上一季度 = CALCULATE( [1.0 基础 度量值] , PREVIOUSQUARTER( 'RS_日期表'[Date] ) )
PREVIOUS 平移完整周期 上一月 = CALCULATE( [1.0 基础 度量值] , PREVIOUSMONTH( 'RS_日期表'[Date] ) )
PARALLELPERIOD 上一年 等价公式 = VAR RIQI = MAX( 'RS_日期表'[Date] ) VAR OFFSETYEAR = -1 VAR X = DATE( YEAR( RIQI ) + OFFSETYEAR , 1 , 1 ) VAR Y = DATE( YEAR( RIQI ) + OFFSETYEAR , 12 , 31 ) RETURN CALCULATE( [1.0 基础 度量值] , FILTER( ALL( 'RS_日期表' ) , AND( 'RS_日期表'[Date] >= X , 'RS_日期表'[Date] <= Y ) ) )
对比 结果
结尾
PowerBI简约派全产品介绍
7天入门 训练营
预计5月上线首期训练营,内容包含入门PowerBI视频教程、已上线LV1-LV3的纸质版一图文档、7天免费PowerBI AI助手、一份免费可视化模板。
知识圈
全免费鹅圈子,所有用户均可加入知识圈,在知识圈内获取免费的PowerBI模板与素材。
PowerBIAI助手
加入会员可获取PowerBI AI助手长期使用权限
LV1 数据清洗
现已完成更新,核心内容为Power Query数据清洗技巧。
LV2 数据建模
现已完成更新,核心内容为关系建模、DAX公式讲解。
LV3 数据 可视化
现已完成更新,核心内容为可视化基础/高级/进阶操作以及一套可视化模板
均已上线小鹅通
LV4 可视化 模板
预计5月上线,全年更新10套可视化模板
LV5 数据分析 专项案例
预计7月上线,重点讲解业务数据分析逻辑以及如何用PowerBI实现
LV6 Excel BI
预计8月上线,内容为Excel配合PowerBI快速完成双模型的高效技巧。
LV7 企业经营模型
预计年底上线,内容为讲解企业经营全景图以及背后的价值。
LV8 PowerBI Pro
预计24年上半年上线,将联合企业部署专家完成课程录制。