没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
数据建模DAX语言
(新建度量值、新建
列)
函数
calculate函数的筛选条件有很大的局限性
只能输入[列]=固定值
CALCULATE(度量值,<筛选条件1>,<筛选条件1>
········)
度量值=calculate([销量],'产品表‘[咖啡种类]="拿铁")
可以在原有筛选条件进行“增删改”生成新的筛选条件
正确的写法=calculate([销量],'产品表’[咖啡种类]=“拿铁
”)
在遇到多条件筛选时:可以使用逗号表示同时满足情况,
calculate([销售额],‘产品表’[咖啡种类]in{“拿铁”,“美式
”,“卡布奇诺”})
也可以表达不包含则是:度量值=calculate([销售额],NOT'产
品表'[咖啡种类]in{“拿铁”,“美式”,“卡布奇诺”,})
意思为:求产品表不包含拿铁、美式、卡布奇诺咖啡的销售
额
产品表:为引用表不能只引用列会发生混淆
ALL筛选器函数
功能为删除(消除)某个筛选条件扩大范围
ALL销售量=calculate([销量],ALL('销售数九表‘))
all就是在下手数据表中清除了所有筛选条件的影响
还可以按照列来清除筛选影响:ALL销量=calculate([销
量],ALL('产品表’[咖啡种类])
意思为:求产品表中消除咖啡种类的筛选条件的影响之外
的销量
注意all函数说清除的筛选列和初始筛选条件中的
筛选列完全一致(即同一张表的同一列)
1
ALLEXCEPT
意思为除了指定列外清除筛选影响,清除其他不在引用的
列
ALLEXCEPT=CALCULATE([销量],ALLEXCEPT('产品表'[
杯型]))
意思为:求在产品表中所有杯型的销量(大、中、小)只
受杯型筛选影响,清除杯型之外的条件影响。
ALLSELECTED
对视图上显示的筛选条件进行清除筛选(如切片器),而
其他筛选条件保留,进行直观合计
ALLSELECTED=CALCULATE([销量],ALLSELECTED('产
品表"))
占比=sum([销量])/[ALLSELECTED]
这样做可以保证占比每次都是在页面切片器筛选条件下的
直接合计占比,保证每次占比都是100%。
FILTER函数:高级筛选器函数
filter是最强大的筛选器,不是计算器函数,返回是一张
表,所以无法单独使用,常与CALCULATE函数搭配,也
可与聚合函数使用如:COUNTROWS(FILTER(表,筛选条
件))计算标的行数
FILTER('表',筛选条件)
FILTER
的筛
选
条
件
范
围
很
大
(FILTER
筛
选
范
围包
括
CALCUTATE)
[
列
]=[
度
量
值
]
、
=
公
式
、
=[
列
]
、
=[
度
量
值
]
、
=[
公
式
]
、
=[
固
定
值
]
其中表可以是任意一张表,包括ALL、VALUES等函数返
回的表甚至是在套个FILTER函数返回的表
例如:FILITER(FILTER('订单明细,[单价}>50&&[数量]>
10),[金额]>500)
第二部分为筛选条件:FILTER销量=CALCULATE([销量],
FILTER('产品表','产品表'[咖啡种类]=“拿铁”&&’产品表"[杯
型]=“中”))
解析:
FILTER的筛选条件为判断逻辑 由于FILTER函数会对筛选
的表进行逐行扫描所以也就迭代函数,和带X的函数一
样(SUMX)与其它函数主要区别是,在工作中可以意识
所指哪一行,亦把这个工作叫创造行上下文。
在例如:A(0.7)类销售额=CALCULATE([销售额],
FILITER(VALUES('销售记录’[产品名称]),
[累计百分比]<=0.7)))
解析:在销售记录表中求得在累计百分比小于等于0.7的
A类销售额
FILTERZ使用中注意要点:
1、尽量在LOOKUP表里使用它的数据量远小于事实表(数据
表),避免逐行扫描带来的计算机运行压力
2、当能使用CALCULATE筛选解决时,不使用FILTER,搞不定
时在使用CALCULATE+FILTER函数
表
格
是
由
行
与列
构
成
,
所
以上下
文
也
有
两
种
:
1
、
筛
选
山
下
文
2
、
行
上下
文
筛
选
上下
文是
针
对
列
(
竖
向
)
的
、
行
上下
文
针
对
行
(
横
向
)
的
筛选上下文:指的就是反复提及的"筛选条件"这个词比如
CALCULATE([销量],'产品表[咖啡种类]="拿铁“,'产品表[
杯型]=”中“))
它的的筛选上下文就是针对产品表中的“咖啡种类列”,“
杯型列”,以拿铁、中杯为条件筛选出来的表
行上下文不会自动转为筛选上下文:当前所在行不会转成
筛选数据的信号传达到销售数据表中,也就是说对于销售
数据表并没有进行任何筛选,所有输出的数值全部固定一
样。
行上下文=当前行,当我们在数据的第一个单元格里输入
数值时,这列所有的单元格数值等于当前行
例如在新建列输入265数值,所有的这列单元格都是
265,并不会自动变成筛选上下文
CALCULATE相当于整个关系模型的引擎启动键,当加入
CALCULATE行数时,关系模型启动,则数据信号顺流而
下,这个数据信号将行上下文转换为筛选上下文,按照当
前行中的筛选条件对销售数据进行筛选(如美式大杯咖
啡)
1、在CALCULATE([销量],FILTER('门店信息表',
SUM('销售数据表'[数量]>200)中
SUM会将合计数量总计传到列中每一行,行上下
文不会变成筛选上下文(也就是说对销售数据表
没有任何筛选,所以输出都值都是固定的值200)
2、导致的结果是FILTER在进行逐行扫描时,每一
行都是总计大于200.
3.通过聚合的度量值隐藏的CALCULATE函数把行
上下文转换成筛选上下文,而在FILTER函数里
SUM无CALCULATE函数引擎不会做上下文转化,
只会在类似矩阵表中添加的初始筛选上下文条件
下运算
DIVIDE函数:安全除法
DIVIDE(<numerator>, <denominator> [,<
alternateresult>])
术语
定义
numerator
被除数,即被除的数字。
denominator
除数,即除以的数字。
备用结果
(可选)被零除而导致错误时返回的值。 如果没有提
供,则默认值为 BLANK()。
IF/SWITCH函数:逻辑判断
SWITCH查找替换
如果是逻辑判断基准值例如:switch(“日历表”[月],1,
“1月”,2“2月”,3“3月”,4,“4月”,未识别月)
SWITCH+TRUE函数用于逻辑判断:SWITCH(TRUE,[年
龄]>20&&[年龄]<=30,"21-30","30以上")
关系函数:RELATED
RALATEDTABLE
LOOKUPVALUE
RELATED是一个特别的函数,它是专为关系管道建立
的,所以它不用考虑上下文在关系模型的转换问题
RELATED也套嵌公式:收入=[数量]*RALATED(‘产品表’[
价格])
RALATEDTABLE
是一端的数据引用多条数据,当然我们需要对多端的多条
数据进行聚合:订单数量=COUNTROWS(
RELATEDTABLE(‘销售数据表’)
LOOKUPVALU函数中的条件可以不断增加,精准定位搜
索信息,不需要像RELATED表关联表作为基础。相同的
字段条件查询即可,主要包含三个部分。
1、输入目标输出结果的列名称,即图中产品表中的“价格
”列。
2、输入目标表中将要搜索的范围
3、输入原表中需要搜索的关联字段
1
TIME INTELLIGENCE函数:时间智能函数
以2015年1月1日到2016年12月31日
DATESYTD
本年至今累计
DATESYTD('日历表'[日期]
返回的是2016年1月1日到2016年12月31日
DATEADD函数,按照指定的间隔返回一个时间区间
DATEADD('日历表'[日期],-1,YEAR)是以年为间隔,还
可以月 日 负是历史,正是未来。
Datesbetween函数用于指定开始和结束日期之前的时间
段
例如:Datesbetween('日历表'[日期],"2015-01-01",
MAX('日历表’[日期])) 返回的是2015年1月1日到2016年
9月5日的时间段
Datesinperiod函数可以根据某一个时间点来调整时间区
间,
比如公式Datesinperiod('日历表'[日期],'2015-01-01",1,
month)将以2015年1月1日为起点,向后数一个月,得
到2015年1月1日到2015年1月31日的时间段。
DATESINPERIOD
DATESINPERIOD('日历表'[日期列],开始日期,间隔,间
隔类型)
30天移动平均:calculate([销量],datesinperiod(’[日
历]表],[日期列],MAX('[日历表],[日期列]),-30,
day))/30
DATESQTD函数返回的是本季度累计
DATESMTD函数返回的是本月累计
时间点函数
用于指定某一个特定日期,他们返回的是一个有唯一值
表,
这个值就是某一个日期,比如FIRSTDATE用于求最早的日
期,
LASTDATE用于求最晚的日期
不同于min 和 max只能引用列求最小和最大
FIRSTDATE和LASTDATE函数可以引用表,比如我
们求公司成立之日日期到现在的累计值,则需要找到最开
始的·
日期FIRSTDATE(ALL('日历表'[日期]))
END函数返回的是最后一天,比如ENDOFMONTH('日历
表'[日期]),同理,START系列函数返回的是最早的一天
SAMEPERIODLASTYEAR
SAMEPERIODLASTYEAR函数的英文意思是上年同期 ,
SAMEPERIODLASTYEAR(‘日历表'[日期])=
=DATEADD('日历表'[日期],-1,YEAR)
注意的是时间段函数和时间点函数返回的都是
表,要配合CALCULATE函数把他们最为
CALCULATE的筛选条件
日历表的使用
对日历表进行排序,比如周则在PQ中“添加日期列”功能
添加一个“DAYOFWEEK”(每周的某一日)列,然后关闭
在按照DAYOFWEEK排序即可
子主题 1
对于财年日历表
也可以用
对于非常规日历:万金油公式:上月销量=CALCULATE([
销售量],FILTER(ALL('财年日历表),‘财年日历表'[ID]=
MAX('财年日历表'[ID]-1))
非常规日期对比 创建两个日历表进行差异值对比
ALL系列函数是可以引用多列,并且返回的结果视
表。
all系列函数全部在度量值中是不能独立使用的,需
要配合CALCULATE和COUNTROWS这些可以引用
表的函数使用
函数
VALUES函数:不重复值
返回由一列构成的一个表,该表包含来自指定表或列的非
重复值。
ALLEXCEPT=CALCULATE([销量],ALLEXCEPT('产品表“,"产
品表"[杯型])
只受杯型影响
用VALUES达到同样效果 CALCULATE([销量],all('产品表','
产品表'[杯型]))
原理是先用ALL函数删除产品表中的筛选条件,在选择性
地获取产品表中的“杯型”列数据
关系视图多关系DAX引用
USERELATIONSHIP函数('销售记录'[实际送货日期]<多
端关系>,'日历年'[日期]<一端关系>)))
可以配合CALCULATE例如CALCULATE(SUM('销售记录
表[数量],USERALATIONSHIP('销售记录[实际送货日期],'
日历年[日期]):求得是销售记录表中实际送货日期的产品
数量。
HASONEVALUE函数:只有一个值
HASONEVALUE函数返回的是“真”或“假”,即判断的是否
只有一个值,可以把它的表达式等效看作COUNTROWS(
VALUES([列]名称))=1,也就是对该列的不重复的表计算
行数是否等于1
RANKX排名函数
返回的是值
第一种排名方法是按照度量值在
字段里进行筛选器筛选
RANKX是上下文函数,会对整张表进行扫描
例如:RANKX(ALL('门店信息'),[销售量])
意思:按照整张门店信息表,进行销量排名
RANKX(<table>, <expression>[, <value>[, <order>[, <
ties>]]])
RANKX函数:1.table是表,2.expression是算术表达
式,3.VALUE默认空着.4.order默认为0降序排名,1为升
序,5.ties为选择排名方式
TOPN返回的是前N行所以需
要CALCULATE函数或者其他
计算类函数结合使用
TOPN(<n_value>, <table>, <orderBy_expression>, [<
order>[, <orderBy_expression>, [<order>]]…])
TOPN函数;1.N_value排名前N位,2.table想要排名的表.
3.ordeby_expression表达式按什么度量值来排序,4.
order顺序可选,0降序,1升序。
TONP=CALCULATE([销量],TOPN(5,ALL('门店信息表‘),[销
量]))意思为:按照门店信息表筛选一张前5名销量的表
前五名的销量占比:
DIVIDE(CALACULATE([销量],TOPN(5,ALL('门店信息表'),[
销量],CALCULATE([销量],ALL('门店信息表')))
资源评论
- Ashley-顏鳳2020-08-05真的是一分都不想给,又贵又坑人
lailike
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功