Power BI--DAX函数总结

转至:https://zhuanlan.zhihu.com/p/35982521

DAX函数总结

1.日期与时间函数:

 1.1 计算年初至今累计--TOTALYTD函数

  例如计算年初至今累计的销售金额:

[年累计金额]:=

TOTALYTD([销售金额],

        '日历年'[日期])

# 如果要加上一个时间截止点,则写为:

[年累计截止金额]:=

TOTALYTD([销售金额],

        '日历年'[日期],

        '日历年'[日期]<DATE(2016,6,1))

# 同理计算季度初至今累计--TOTALQTD, 计算月初至今累计--TOTALMTD

1.2 计算上一年/季度/月的销售额--DATEADD函数

[上一年销售额]:=

CALCULATE([销售金额],

          DATEADD('日历年'[日期],-1,YEAR))  --YEAR可改为QUARTER,MONTH,DAY

                                          --将-1改为+1则时间后移

1.3 计算同比/环比

# 月同比--今年每月的销售金额相比去年同月份增长的比率

[上一年销售额]:=

CALCULATE([销售金额],

          DATEADD('日历年'[日期],-1,YEAR))

[同比]:=

DIVIDE([销售金额]-[上一年销售额],

      [上一年销售额])

# 月环比--这月与上月相比销售额增长的比率

[上一月销售额]:=

CALCULATE([销售金额],

          DATEADD('日历年'[日期],-1,MONTH))

[环比]:=

DIVIDE([销售金额]-[上一月销售额],

      [上一月销售额])

1.4 计算两个日期之间间隔--DATEDIFF

[时间间隔]:=

DATEDIFF([开始日期],

        [结束日期],

        'Y')  --参数"Y"换成"M"或"D",则分别对应月和日

                --也可以改成HOUR,MINUTE,SECOND计算小时,分,秒

1.5 其他日期时间函数:

DATE(2009,7,8)  --结果返回'2009/7/8 0:00:00'

DATEVALUE("8/1/2009")  --将文本形式的日期转换为日期时间格式的日期,结果返回

                        '2009/8/1 0:00:00'

DATEADD([日期],3,DAY)  --日期加减函数

EOMONTH([日期],3)      --返回指定月份数之前或之后的月份的最后一天的日期

EDATE([日期],3)        --返回在开始日期之前或之后指示的月数的日期 

YEAR(),MONTH(),DAY(),HOUR(),MINUTE(),SECOND()

NOW() --返回当前的日期时间  TODAY()--返回当前的日期         

WEEKDAY([日期],1)  --一周中的第几天,参数1代表从星期日开始计数,参数2代表从星期一开始计数

                    参数3代表从星期一开始计数,但到星期六结束

WEEKNUM([日期],1)  --一年中的第几周,1代表从周日开始计数,2代表从周一开始计数 


2. 筛选器函数:

2.1 ALL, ALLEXCEPT, ALLSELECTED

ALL(table/column)  --ALL用来清除整个表或某个字段的筛选条件,通常配合CALCULATE使用

ALLEXCEPT(table/column) --删除表中除已应用于指定列的筛选器之外的所有上下文筛选器

ALLSELECTED(table/column) --从当前查询的列和行中删除上下文筛选器,同时保留所有其他上下文筛选器或显式筛选器

2.2 CALCULATE(<expression>,<filter1>,<filter2>...)

--Calculate可以应用在多个表

  Calculate使用AND关系时可直接在条件间加',',但表达“或”时,必须用'||',而且连接的两个条件

  必须引用同一列。

  Calculate中当“[列] = 固定值”这种筛选搞不定时,可用filter/all/values筛选器搭配使用

2.3 FILTER(table,<filter>)  --返回值:只包含筛选行数据的表

--筛选时对表进行逐行扫描,计算量很大,所以选择筛选的表尽量为lookup表

2.4 HASONEVALUE(<columnName>) --将 columnName 的上下文筛选为只剩下一个非重复值时,

                              将返回 TRUE。 否则为 FALSE。

2.5 RELATED(<column>)  --将“一”端的列值添加到“多”端的表中

  RELATEDTABLE(<tableName>) --将“多”端关联的表数据添加到“一”端的列上,

                              返回的是一张表

2.6 VALUES(<TableNameOrColumnName>)  --返回由一列构成的一个表,该表包含来自指定表或列的

                                  非重复值。 换言之,重复值将被删除,仅返回唯一值。

2.7 EARLIER函数:

  例如我们有“产品名称”和“销售金额”两列数据。基于此,我们希望计算出每个产品的销售金额排名。

  COUNTROWS(

            FILTER('产品销售表',

                  EARLIER('产品销售表'[销售金额])<'产品销售表'[销售金额])

          )+1

  --EARLIER=当前行,按照当前行进行逐行扫描,SUMX+FILTER+EARLIER

    是Power Pivot中比较常用的函数组合,由于Earlier针对每一行数据都进行计算,

    所以理论上计算量相当于数据行数的平方。如果有10行数据,则需要计算100次,

    所以数据量大的时候大家使用要小心,有可能会造成模型计算缓慢。

3. 逻辑判断函数:

3.1 CONTAINS(InternetSales, [ProductKey], 214, [CustomerKey], 11185)

  --是否同时存在销售给客户 11185 的产品 214 的任何 Internet 销售额。

3.2 ISBLANK(column) --判断该列中某个值是否为空

3.3 ISNONTEXT(column)  --检查某个值是否不是文本

3.4 ISNUMBER(column)  --检查某个值是否为数字

3.5 ISTEXT(column)    --检查某个值是否为文本

3.6 ISLOGICAL(column) --检查某个值是否是逻辑值

4. 逻辑函数:

4.1 IF(logical_test>,<value_if_true>, value_if_false)

  --检查是否满足作为第一个参数提供的条件。 如果该条件为 TRUE,则返回一个值;

    如果该条件为 FALSE,则返回另一个值,用法与excel类似

4.2 SWITCH(<expression>,条件1,值1,条件2,值2)  --根据值列表计算表达式,

                                            并返回多个可能的结果表达式之一。

5.统计函数:

5.1 SUMX(table,<expression>)  --SUMX与CALCULATE功能类似,但SUMX属于迭代函数,计算量大

                            --同理AVERAGEX,MINX.MAXX用法相同

5.2 SUM(),MAX(),MIN(),SQRT()

  DISTINCTCOUNT()--计算去重后列所包含的元素个数

  COUNTROWS()  --计算表的行数

  COUNT()  --计算列中包含数字的单元的数目

  COUNTA()  --计算列中不为空的单元的数目

  COUNTBLANK()  --计算列中空白单元的数目

5.3 DIVIDE(分子,分母)  --在DAX中涉及到除法必须用DIVIDE

5.4 CROSSJOIN(<table1>, <table2>)  --生成笛卡尔积表

  SUMMARIZE(<table>, <groupBy_columnName>,<name>,<expression>)

  --table,任何返回数据表的 DAX 表达式。

    groupBy_columnName将使用该列中找到的值创建摘要组,此参数不能是表达式。

    name,给予总计或汇总列的名称,包含在双引号内。

    expression,任何返回单个标量值的 DAX 表达式,其中,表达式将计算多次(针对每行/上下文)。

  GENERATE(<table1>, <table2>)--生成笛卡尔积表

6.文本函数:

6.1 LEFT(),RIGHT(),MID(),FIND(),SEARCH(),LEN() ---字符串提取函数

6.2 REPLACE(),SUBSTITUTE()  --字符串替换函数

6.3 TRIM(),LOWER(),UPPER()

6.4 FORMAT函数,对于日期格式的自定义设置如下图:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350