好文档 - 专业文书写作范文服务资料分享网站

POWERBI数据建模DAX语言

天下 分享 时间: 加入收藏 我要投稿 点赞

alculate函数的筛选条件有很大的局限性c只能输入[列]=固定值ALCULATE(度量值,<筛选条件1>,<筛选条件1>C·······)度量值=calculate([销量],'产品表‘[咖啡种类]=\拿铁\可以在原有筛选条件进行“增删改”生成新的筛选条件确的写法=calculate([销量],'产品表’[咖啡种类]=“拿铁正”)遇到多条件筛选时:可以使用逗号表示同时满足情况在calculate([销售额],产品表’[咖啡种类]in{“拿铁”,“美式”,“卡布奇诺”})可以表达不包含则是:度量值=calculate([销售额],NOT'产也品表'[咖啡种类]in{“拿铁”,“美式”,“卡布奇诺”,})意思为:求产品表不包含拿铁、美式、卡布奇诺咖啡的销售额ALL销售量=calculate([销量],ALL('销售数九表))LL筛选器函数A功能为删除(消除)某个筛选条件扩大范围all就是在下手数据表中清除了所有筛选条件的影响可以按照列来清除筛选影响:ALL销量=calculate([销还量],ALL('产品表’[咖啡种类])意思为:求产品表中消除咖啡种类的筛选条件的影响之外的销量产品表:为引用表不能只引用列会发生混淆注意all函数说清除的筛选列和初始筛选条件中的筛选列完全一致(即同一张表的同一列)1LLEXCEPTA意思为除了指定列外清除筛选影响,清除其他不在引用的列LLSELECTEDA对视图上显示的筛选条件进行清除筛选(如切片器),而其他筛选条件保留,进行直观合计LLEXCEPT=CALCULATE([销量],ALLEXCEPT('产品表'[A杯型]))意思为:求在产品表中所有杯型的销量(大、中、小)只受杯型筛选影响,清除杯型之外的条件影响。LLSELECTED=CALCULATE([销量],ALLSELECTED('产A品表\占比=sum([销量])/[ALLSELECTED]这样做可以保证占比每次都是在页面切片器筛选条件下的直接合计占比,保证每次占比都是100%。ALL系列函数是可以引用多列,并且返回的结果视表。ll系列函数全部在度量值中是不能独立使用的,需a要配合CALCULATE和COUNTROWS这些可以引用表的函数使用FILTER('表,筛选条件)ILTER的筛选条件范围很大(FILTER筛选范围包括CALCUTATE)F列]=[度量值、=公式、=[列、=度量值、=[公式、=[固定值ILTER的筛选条件为判断逻辑 由于FILTER函数会对筛选F的表进行逐行扫描所以也就迭代函数,和带X的函数一样(SUMX)与其它函数主要区别是,在工作中可以意识所指哪一行,亦把这个工作叫创造行上下文。例如:A(0.7)类销售额=CALCULATE([销售额],在 FILITER(VALUES('销售记录’[产品名称]), [累计百分比]<=0.7)))解析:在销售记录表中求得在累计百分比小于等于0.7的A类销售额ILTER函数:高级筛选器函数F?lter是最强大的筛选器,不是计算器函数,返回是一张表,所以无法单独使用,常与CALCULATE函数搭配,也可与聚合函数使用如:COUNTROWS(FILTER(表,筛选条件))计算标的行数中表可以是任意一张表,包括ALL、VALUES等函数返其回的表甚至是在套个FILTER函数返回的表例如:FILITER(FILTER('订单明细,[单价}>50&&[数量]>10),[金额]>500)第二部分为筛选条件:FILTER销量=CALCULATE([销量],FILTER('产品表','产品表'[咖啡种类]=“拿铁”&&’产品表\杯型]=“中”))解析:FILTERZ使用中注意要点:1、尽量在LOOKUP表里使用它的数据量远小于事实表(数据表),避免逐行扫描带来的计算机运行压力2、当能使用CALCULATE筛选解决时,不使用FILTER,搞不定时在使用CALCULATE+FILTER函数LLEXCEPT=CALCULATE([销量],ALLEXCEPT('产品表“,\产A品表\杯型])只受杯型影响VALUES达到同样效果 CALCULATE([销量],all('产品表','用产品表'[杯型]))原理是先用ALL函数删除产品表中的筛选条件,在选择性地获取产品表中的“杯型”列数据ALUES函数:不重复值V返回由一列构成的一个表,该表包含来自指定表或列的非重复值。格是由行与列构成,所以上下文也有两种:1、筛选山表下文2、行上下文筛选上下文是针对列(竖向)的、行上下文针对行(横向)的选上下文:指的就是反复提及的\筛选条件\这个词比如筛CALCULATE([销量],'产品表[咖啡种类]=\拿铁“,产品表[杯型]=”中“))它的的筛选上下文就是针对产品表中的“咖啡种类列”,“杯型列”,以拿铁、中杯为条件筛选出来的表上下文=当前行,当我们在数据的第一个单元格里输入行数值时,这列所有的单元格数值等于当前行例如在新建列输入265数值,所有的这列单元格都是265,并不会自动变成筛选上下文上下文不会自动转为筛选上下文:当前所在行不会转成行筛选数据的信号传达到销售数据表中,也就是说对于销售数据表并没有进行任何筛选,所有输出的数值全部固定一样。ALCULATE相当于整个关系模型的引擎启动键,当加入CCALCULATE行数时,关系模型启动,则数据信号顺流而下,这个数据信号将行上下文转换为筛选上下文,按照当前行中的筛选条件对销售数据进行筛选(如美式大杯咖啡)SERELATIONSHIP函数(销售记录'[实际送货日期]<多U端关系>,'日历年'[日期]<一端关系>)))可以配合CALCULATE例如CALCULATE(SUM('销售记录表[数量],USERALATIONSHIP('销售记录[实际送货日期],'日历年[日期]):求得是销售记录表中实际送货日期的产品数量。ASONEVALUE函数返回的是“真”或“假”,即判断的是否H只有一个值,可以把它的表达式等效看作COUNTROWS(VALUES([列]名称))=1,也就是对该列的不重复的表计算行数是否等于11、在CALCULATE([销量],FILTER('门店信息表',SUM('销售数据表'[数量]>200)中SUM会将合计数量总计传到列中每一行,行上下文不会变成筛选上下文(也就是说对销售数据表没有任何筛选,所以输出都值都是固定的值200)2、导致的结果是FILTER在进行逐行扫描时,每一行都是总计大于200.3通过聚合的度量值隐藏的CALCULATE函数把行上下文转换成筛选上下文,而在FILTER函数里SUM无CALCULATE函数引擎不会做上下文转化,只会在类似矩阵表中添加的初始筛选上下文条件下运算关系视图多关系DAX引用HASONEVALUE函数:只有一个值函数 一种排名方法是按照度量值在第字段里进行筛选器筛选RANKX是上下文函数,会对整张表进行扫描ANKX(

, [, [, [, ]]])ANKX函数:1.table是表,2.expression是算术表达R式,3.VALUE默认空着.4.order默认为0降序排名,1为升序,5.ties为选择排名方式ANKX排名函数R返回的是值 据建模DAX语言数(新建度量值、新建 列) 函数 DIVIDE函数:安全除法IVIDE(, [,])术语定义numerator被除数,即被除的数字。denominator除数,即除以的数字。备用结果(可选)被零除而导致错误时返回的值。如果没有提供,则默认值为 BLANK()。WITCH查找替换S如果是逻辑判断基准值例如:switch(“日历表”[月],1,“1月”,2“2月”,3“3月”,4,“4月”,未识别月)F/SWITCH函数:逻辑判断WITCH+TRUE函数用于逻辑判断:SWITCH(TRUE,[年S龄]>20&&[年龄]<=30,\以上\ELATED是一个特别的函数,它是专为关系管道建立R的,所以它不用考虑上下文在关系模型的转换问题RELATED也套嵌公式:收入=[数量]*RALATED(‘产品表’[价格])ALATEDTABLER是一端的数据引用多条数据,当然我们需要对多端的多条数据进行聚合:订单数量=COUNTROWS(RELATEDTABLE(销售数据表)OOKUPVALU函数中的条件可以不断增加,精准定位搜L索信息,不需要像RELATED表关联表作为基础。相同的字段条件查询即可,主要包含三个部分。1、输入目标输出结果的列名称,即图中产品表中的“价格”列。2、输入目标表中将要搜索的范围3、输入原表中需要搜索的关联字段如:RANKX(ALL('门店信息'),[销售量])例意思:按照整张门店信息表,进行销量排名系函数:RELATED关RALATEDTABLELOOKUPVALUEOPN(,
, , [[, , []]…])OPN函数;1.N_value排名前N位,2.table想要排名的表T3.ordeby_expression表达式按什么度量值来排序,4.order顺序可选,0降序,1升序。ONP=CALCULATE([销量],TOPN(5,ALL('门店信息表‘),[销T量]))意思为:按照门店信息表筛选一张前5名销量的表五名的销量占比:前DIVIDE(CALACULATE([销量],TOPN(5,ALL('门店信息表'),[销量],CALCULATE([销量],ALL('门店信息表')))OPN返回的是前N行所以需T要CALCULATE函数或者其他计算类函数结合使用1ATEADD函数,按照指定的间隔返回一个时间区间DDATEADD('日历表'[日期],-1,YEAR)是以年为间隔,还可以月日负是历史,正是未来。atesbetween函数用于指定开始和结束日期之前的时间D段例如:Datesbetween('日历表'[日期],\MAX('日历表’[日期])) 返回的是2015年1月1日到2016年9月5日的时间段atesinperiod函数可以根据某一个时间点来调整时间区D间,比如公式Datesinperiod('日历表'[日期],'2015-01-01\month)将以2015年1月1日为起点,向后数一个月,得到2015年1月1日到2015年1月31日的时间段。ATESINPERIOD('日历表'[日期列],开始日期,间隔间D隔类型)DATESINPERIOD0天移动平均:calculate([销量],datesinperiod(’[日3历]表],[日期列],MAX('[日历表],[日期列]),-30,day))/30ATESYTDD本年至今累计DATESYTD('日历表'[日期]返回的是2016年1月1日到2016年12月31日注意的是时间段函数和时间点函数返回的都是表,要配合CALCULATE函数把他们最为CALCULATE的筛选条件IME INTELLIGENCE函数:时间智能函数T以2015年1月1日到2016年12月31日ATESQTD函数返回的是本季度累计DDATESMTD函数返回的是本月累计间点函数时用于指定某一个特定日期,他们返回的是一个有唯一值表,这个值就是某一个日期,比如FIRSTDATE用于求最早的日期LASTDATE用于求最晚的日期同于min 和 max只能引用列求最小和最大不FIRSTDATE和LASTDATE函数可以引用表,比如我们求公司成立之日日期到现在的累计值,则需要找到最开始的日期FIRSTDATE(ALL('日历表'[日期]))ND函数返回的是最后一天,比如ENDOFMONTH('日历E表'[日期]),同理,START系列函数返回的是最早的一天SAMEPERIODLASTYEAR日历表进行排序,比如周则在PQ中“添加日期列”功能对添加一个“DAYOFWEEK”(每周的某一日)列,然后关闭在按照DAYOFWEEK排序即可于财年日历表对也可以用日历表的使用AMEPERIODLASTYEAR函数的英文意思是上年同期,SSAMEPERIODLASTYEAR(‘日历表'[日期])==DATEADD('日历表'[日期],-1,YEAR)子主题 1于非常规日历:万金油公式:上月销量=CALCULATE([对销售量],FILTER(ALL('财年日历表),‘财年日历表'[ID]=MAX('财年日历表'[ID]-1))非常规日期对比创建两个日历表进行差异值对比

POWERBI数据建模DAX语言

alculate函数的筛选条件有很大的局限性c只能输入[列]=固定值ALCULATE(度量值,,C·······)度量值=calculate([销量],'产品表‘[咖啡种类]=\拿铁\可以在原有筛选条件进行“增删改”生成新的筛选条件确的写法=calculate([销量],'产品表’[咖啡种类]=“拿铁正”)遇到多条件筛选时:可以使用逗号表示同时满足情况在calcu
推荐度:
点击下载文档文档为doc格式
  • 正文标题

  • 上下篇章

  • 相关推荐

  • 精选图文

9knz34w0yv62h6002tw881m9s40m5v00jtr