转至:https://blog.51cto.com/dbaspace/2050922
DAX函数大全
针对PowerPivot的DAX函数参考
一、筛选函数
1、ALL函数:返回表中的所有行货返回列中的所有值,同时忽略可能已应用的任何筛选器,此函数可用于清除筛选器对表中的所有行创建计算,返回删除了筛选器的表或列的值
语法:ALL({<table> | <column>[, <column>[, <column>[,…]]]})
如:创建一个《度量值》
订单额度 = SUMX(ALL('订单表'),'订单表'[amount])
虽然X轴使用日期来统计,显示的依然是总额度,在不使用ALL函数的一个度量值
订单额度2 = SUMX('订单表','订单表'[amount])
没有使用ALL时候,时间筛选器就生效了,显示各日的总额。实际应用中可能会分析日订单和总额的比率:
计算日订单和总额的比率 = sumx('订单表','订单表'[amount])/sumx(ALL('订单表'),'订单表'[amount])
ALL (Column[, Column[, …]]) 删除表中指定列的所有筛选器,表中针对其他列的所有筛选器仍应用,创建一个度量值:
订单额度 = SUMX('订单表','订单表'[amount])/CALCULATE(SUM('订单表'[amount]),ALL('订单表'[create_time],'订单表'[cancel_rent_time]))
ALLEXCEPT(Table, Column1 [,Column2]...):删除表中所有上下文筛选器,但已应用于制定列的筛选器除外,创建一个度量值:
订单额度 = SUMX('订单表','订单表'[amount])/SUMX(ALLEXCEPT('订单表','订单表'[create_time],'订单表'[rent_pay_time],'订单表'[deposit_withdraw_time]), '订单表'[amount])
ALLSELECTED:选取需要字段过滤其他,只能添加一个参数,同时忽略选取字段的筛选器,其他已应用的筛选器仍然生效,选取的时间仍然创建度量值的表,创建一个度量值:
订单额度 = SUMX('订单表','订单表'[amount])/CALCULATE(SUMX('订单表','订单表'[amount]),ALLSELECTED('订单表'[create_time]))
对比没有allselectd的情况下的筛选
ALLNOBLANKROW函数:从关系的父表中,返回除空白行之外的所有行,或某一列中除空白行之外的所有非重复值,并且忽略可能存在所有上下文的筛选器。
语法:ALLNOBLANKROW(<table>|<column>)
若选table要删除其所有上下文筛选器的表,列同理,创建一个度量值
订单额度222 = CALCULATE(SUMX('订单表','订单表'[amount]),ALLNOBLANKROW('订单表'))
Datekey是张时间的维度表和和订单表相关联
,选自己的表的时间,列出当前时间,
使用时间维度表,维度表所有的时间都会显示一个同一个值
2、CALCULATE函数:计算由指定筛选器修改的上下文中的表达式,作为表达式的结果值返回。
语法:CALCULATE(,,…)
expression要进行计算的表达式
filter1…N定义筛选器的布尔表达式或表表大师的逗号分隔的列表
创建一个度量值:
度量值1 = CALCULATE(SUMx('订单表','订单表'[amount]),'订单表'[status]=200)
限制:不能引用度量值、不能使用CALCULATE嵌套、不能使用扫描表或返回任何函数及聚合函数
订单额度 = CALCULATE(SUM('订单表'[amount]),(ALL('订单表')))
CALCULATETABLE函数:在由给定筛选修改的上下文中计算表表达式,返回包含值得表,在BPI中的建模点新建表,此时不能使用新建度量值。
语法: CALCULATETABLE(<expression>,<filter1>,<filter2>,…)
度量值cal = CALCULATETABLE('订单表','订单表'[status]=100)
新度量值 = SUMX(CALCULATETABLE('订单表','PowerBi 时间维度表'[DayOfMonthFull]="18"),'订单表'[amount])
此时嵌套在聚合函数里,返回值的列表
此时说明表达式返回表的多列值,只是根据条件过滤不匹配status=100de
3、DISTINCT:返回一列构成的一个表,该表包含来自指定列的非重复值,一般配合其他聚合函数来使用
语法:DISTINCT()
度量值cal = COUNTROWS(DISTINCT('订单表'[status]))
4、EARLIER函数:返回提及的列的外部计算传递中指定列的当前值(在想要使用某个值作为输入并且基于该输入进行计算的嵌套计算中)
官档案例
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
5、EARLIEST函数:返回指定列的外部计算传递中制定列的当前值,与4类似
6、FILTER函数:返回表示另一个表达式的子集的表,只包含筛选行的表返回值
语法:FILTER(<table>,<filter>)
参数:
table要筛选的表,表还可以是产生的结果集是表的表达式
Filter为该表的每一行计算的布尔表达式
FILTERS:返回直接作为筛选器应用于columnName的值
HASONEFILTER:当columnName上的直接筛选值得数目为一个值,返回TRUE否则返回FALSE
HASONEVALUE:已将columnName的上下文筛选为只剩下一个非重复值时返回TRUE,否则FALSE
7、RELATED函数:从另一个表返回相关值,与当前行相关的单个值
语法:RELATED(<column>)
##
RELATED 函数要求当前表与包含相关信息的表之间存在关系。您需要指定包含所需数据的列,该函数将通过现有的多对一关系从相关表中的指定列中提取值
FILTER_RELATED_1 = SUMX(FILTER('订单表',RELATED('订单表状态维度表'[status_id])=101),'订单表'[amount])
通过通过计算累计101值得累计和
8、RELATEDTABLE函数:由给定筛选器修改的上下文中计算表表达式,返回包含值得表
语法: RELATEDTABLE(<expression>,<filter1>,<filter2>,…)
注释
RELATEDTETABLE 函数将更改筛选数据的上下文,并在您指定的新上下文中计算表达式。对于在筛选器参数中使用的每一列,将删除该列上的现有筛选器,改为应用在筛选器参数中使用的筛选器
###此函数是 CALCULATETABLE 函数的同义词
9、VALUES函数:返回由一列构成的一个表,包含来自制定列的非重复值。
语法:values()
注释
当您在已筛选的上下文(例如数据透视表)中使用 VALUES 函数时,VALUES 返回的唯一值会受到筛选器的影响。例如,如果您按 Region 进行筛选,并且返回针对 City 的值列表,则该列表将只包括筛选器允许的区域中的那些城市。若要返回所有城市,而不管现有筛选器的情况如何,您必须使用 ALL 函数从表中删除筛选器。第二个示例演示如何将 ALL 与VALUES 一起使用。
VALUES_1 = COUNTROWS(VALUES('订单表'[id] ))
统计函数(聚合函数):对值得聚合运算,在筛选函数中已经应用部分,其他类似
AVERAGE(<column>)
AVERAGE(<column>):返回列中值的平均值(算术平均值)。处理文本和非数字值
AVERAGEX(<table>,<expression>):计算对表进行求值的一组表达式的平均值(算术平均值)
COUNTA (<column>)函数计算列中不为空的单元的数目。它不仅对包含数值的行进行计数,还对包含非空白值(包括文本、日期和逻辑值)的行进行计数
COUNTAX 函数用于在对表计算表达式的结果时统计非空结果数。即,它的作用与 COUNTA 函数类似,但它用于对表中所有行进行循环访问,并统计指定表达式计算为非空结果的行数
COUNTAX(<table>,<expression>)
COUNTBLANK(<column>) 计算列中空白单元的数目
COUNTROWS函数:计算制定表中的行数,或计算表达式定义的表中的行数
语法:COUNTROWS(<TABLE>)
COUNTX(<table>,<expression>)在对表计算表达式的结果时,计算包含数字或者计算结果为数字的表达式的行的数目
MAX
MAXA 返回列中的最大值。逻辑值和空白被计算在内MAXA(<column>) MINA
MAXX为表的每一行计算表达式,并且返回最大的数值MAXX(<table>,<expression>) MINX
逻辑函数:
AND函数:检查是否两个参数均为TRUE
语法:AND(<LOGICAL1>,<LOGICAL2>)
注释
DAX 中的AND函数只接受两 (2) 个参数。如果您需要对多个表达式执行 AND 运算,则可以创建一系列计算;但更好的选择是,使用连接运算符 (&&) 在一个更简单的表达式中连接所有这些列
FALSE函数:返回逻辑值FALSE
语法:FALSE()
IF函数:检查是否满足作为第一个参数提供的条件,满足为TRUE,否则为FALSE
语法: IF(logical_test>,<value_if_true>, value_if_false)
参数
术语定义
logical_test计算结果可以为 TRUE 或 FALSE 的任何值或表达式。
value_if_true在逻辑测试为 TRUE 时返回的值。如果省略,则返回 TRUE。
value_if_false在逻辑测试为 FALSE 时返回的值。如果省略,则返回 FALSE。
=IF([Calls]<200,"low",IF([Calls]<300,"medium","high"))
EGG:
新增列IF = IF([status]=101, "已付押金",IF([status]=200, "租赁中",IF([status]=300, "待付租金",IF([status]=400, "已付租金",IF([status]=500, "未退押金",
IF([status]=600, "交易失败",IF([status]=700,"申诉中" ,"取消"
)))))))
他的另外一种简洁语法:
列SWITCH = SWITCH([status],101,"已付押金",200,"租赁中",300,"待付租金",400,"已付租金",500,"未退押金",600,"交易失败",700,"申诉中","取消")
注释
如果省略了 value_if_true 或 value_if_false 的值,则 IF 将其视为空字符串值 (""),
如果在表达式中引用的值是某一列,则 IF 将返回与当前行相对应的值
IF 函数尝试返回列中的单个数据类型。因此,如果 value_if_true 和 value_if_false 返回的值属于不同的数据类型,则IF 函数会隐式转换数据类型以便适合列中的这两种值。例如,公式 IF(<condition>,TRUE(),0) 返回由 1 和 0 组成的列,并且可以对结果求和,但公式 IF(<condition>,TRUE(),FALSE()) 只返回逻辑值
IFERROR函数:对某一表达式进行计算,并且如果该表达式返回错误则返回指定值,否则返回该表达式本身的值
语法:IFERROR(value,value_if_error)##返回值类型要相同
=IFERROR(25/0,9999)
NOT函数:将FALSE改成TRUE,或者将TRUE改成FALSE
语法:NOT(<logical>)
OR函数 OR(<logical1>,<logical2>)
IF( OR( CALCULATE(SUM('ResellerSales_USD'[SalesAmount_USD]), 'ProductSubcategory'[ProductSubcategoryName]="Touring Bikes") > 1000000
, CALCULATE(SUM('ResellerSales_USD'[SalesAmount_USD]), 'DateTime'[CalendarYear]=2003) > 2500000
)
, "Circle of Excellence"
, ""
)
TRUE函数: 语法:TRUE()
= IF(SUM('InternetSales_USD'[SalesAmount_USD]) >200000, TRUE(), false())
文本函数:
BLAN() 返回空白。
CONCATENATE:将两个文本字符串连接成一个文本字符串
= CONCATENATE(sumx('订单表','订单表'[amount])/sumx(ALL('订单表'),'订单表'[amount]),"%")
EXACT函数:比较字符串,相同为TRUE
EXACT(<TEXT1>,<TEXT2>)
FIND函数: 返回一个文本字符串在另一文本字符串中的开始位置。FIND 区分大小写。
FIND(<find_text, within_text, start_num)
参数
项定义
find_text您要查找的文本。使用双引号(空文本)可以匹配within_text中的第一个字符;不允许通配符。
within_text包含要查找的文本的文本。
start_num从其开始进行搜索的字符;如果省略,start_num= 1。within_text中的第一个字符是字符编号 1。
FIXED函数: 将数字舍入到指定的小数位数,并以文本形式返回结果。可以指定以带或不带逗号的形式返回结果
将数字舍入到指定的小数位数,并以文本形式返回结果。可以指定以带或不带逗号的形式返回结果
参数
项定义
number要舍入并转换为文本的数字,或包含数字的列。
decimals(可选)小数点右侧的位数;如果省略,则为 2。
no_commas(可选)一个逻辑值:如果为 1,则不在返回的文本中显示逗号;如果为 0 或省略,则在返回的文本中显示逗号。
FORMAT函数:根据指定的格式转换为文本
FORMAT(<value>, <format_string>)
参数
术语定义
value值或计算结果为单个值的表达式。
format_string具有格式模板的字符串。
FORMAT函数的预定义数字格式
下表标识预定义数字格式的名称。可按名称将它们用作 Format 函数的样式参数。
格式规范说明
"General Number"显示不带千位分隔符的数字。
"Currency"显示带千位分隔符的数字(如果适用);显示小数点分隔符右侧两位。输出基于系统区域设置。
"Fixed"小数点分隔符左侧至少显示一位,右侧显示两位。
"Standard"显示带千位分隔符的数字,其中小数点分隔符左侧至少有一位,右侧有两位。
"Percent"将数字乘以 100 后显示,并在紧右侧追加百分号 (%);小数点分隔符右侧总是显示两位。
"Scientific"使用标准的科学记数法,并且提供两个有效位数。
"Yes/No"如果数字为 0,则显示 No;否则显示 Yes。
"True/False"如果数字为 0,则显示 False;否则显示 True。
"On/Off"如果数字为 0,则显示 Off;否则显示 On。
FORMAT函数的自定义数字格式
用户定义的数字格式表达式可以包含一至三个部分(各部分之间用分号分隔)。如果 Format 函数的 Style 参数包含预定义的数字格式之一,则只允许有一部分。
如果您使用则结果为
只有一部分格式表达式应用于所有值。
两部分第一部分应用于正值和零;第二部分应用于负值。
三部分第一部分应用于正值,第二部分应用于负值,第三部分应用于零。
格式规范
下表标识了可用于创建用户定义的数字格式的字符。
格式规范说明
无显示不带格式的数字。
0(零字符)数字占位符。显示一个数字或一个零。如果表达式在格式字符串中出现零的位置有一个数字,则显示该数字,否则在该位置显示一个零。
如果数字的位数少于格式表达式中零的个数(不管在小数点的哪一侧),将显示前导零或尾随零。如果小数点分隔符右侧的数字位数多于格式表达式中小数点分隔符右侧的零的个数,将对数字四舍五入,使其小数位数与零的个数一样多。如果小数点分隔符左侧的数字位数多于格式表达式中小数点分隔符左侧的零的个数,则将显示多出的位数而不作任何修改。
#数字占位符。显示一个数字或不显示任何内容。如果表达式在格式字符串中出现 # 字符的位置有一个数字,则显示该数字,否则该位置什么也不显示。
除了当数字的位数少于格式表达式中小数点分隔符任意一侧的 # 字符数时不显示前导零或尾随零外,该符号的作用类似于零 (0) 数字占位符。
.(圆点字符)小数点占位符。小数点占位符确定在小数点分隔符左侧和右侧显示几位数。如果格式表达式中该符号的左侧只包含 # 字符,则小于 1 的数字以小数点分隔符开头。若要显示随小数显示的前导零,请使用零作为小数点分隔符左侧的第一个数字占位符。在某些区域设置中,用逗号作为小数点分隔符。在格式化输出中用作小数点占位符的实际字符取决于系统所识别的数字格式。因此,在您的格式中应将句点用作小数点占位符,即使您位于使用逗号作为小数点占位符的区域设置中。格式化字符串将以适合区域设置的正确格式显示。
%百分比占位符。将表达式乘以 100。在格式字符串中出现百分比字符的位置插入百分比字符 (%)。
,(逗号字符)千位分隔符。千位分隔符将在小数点分隔符左侧具有四位或更多位数的数字中的千位和百位分隔开。如果格式包含一个由数字占位符(0 或 #)包围的千位分隔符,则指定千位分隔符的标准用法。
一个千位分隔符紧挨小数点分隔符的左侧(无论是否指定小数)或者作为字符串中最右侧的字符表示“通过除以 1000 来将数字按比例减小,并按需要四舍五入”。小于 1,000 但大于或等于 500 的数字显示为 1,小于 500 的数字显示为 0。此位置有两个相邻千位分隔符表示按一百万倍的比例因子缩小,并且每增加一个分隔符表示另外缩小 1,000 倍。
多个分隔符出现在紧挨小数点分隔符左侧或字符串最右侧位置被视为指定使用千位分隔符。在某些区域设置中,用句点作为千位分隔符。在格式化输出中用作千位分隔符的实际字符取决于您的系统所识别的数字格式。因此,在您的格式中应将逗号用作千位分隔符,即使您位于使用句点作为千位分隔符的区域设置中。格式化字符串将以适合区域设置的正确格式显示。
例如,考虑以下三个格式字符串:
“#,0.”,该字符串使用千位分隔符将数字一亿的格式设置为字符串“100,000,000”。
“#0,.”,该字符串按 1000 的因子进行缩小,将数字一亿的格式设置为字符串“100000”。
“#,0,.”该字符串使用千位分隔符和按 1000 的因子进行缩小,将数字一亿的格式设置为字符串“100,000”。
:(冒号字符)时间分隔符。在某些区域设置中,可能用其他字符表示时间分隔符。在设置时间值的格式时,时间分隔符用于分隔小时、分钟和秒。在格式化输出中用作时间分隔符的实际字符取决于您的系统设置。
/(正斜杠字符)日期分隔符。在某些区域设置中,可能用其他字符表示日期分隔符。在设置日期值的格式时,日期分隔符用于分隔年、月和日。在格式化输出中用作日期分隔符的实际字符取决于您的系统设置。
E-、E+、e-、e+科学记数法格式。如果格式表达式在 E-、E+、e- 或 e+ 的左侧至少包含一个数字占位符(0 或 #),则以科学记数法格式显示数字,并在数字与其指数之间插入 E 或 e。左侧的数字占位符的个数决定了指数中的数字个数。使用 E- 或 e- 可在负指数的后面放置一个减号。使用 E+ 或 e+ 可在负指数的后面放置一个减号,在正指数的后面放置一个加号。还必须在该符号右侧包括数字占位符以获取正确的格式。
-+$()文字字符。这些字符将完全按格式字符串中所键入的形式显示。若要显示所列字符以外的其他字符,请在该字符前加上一个反斜杠 (\) 或将该字符放在双引号 (" ") 中。
\(反斜杠字符)显示格式字符串中的下一个字符。若要将具有特殊含义的字符显示为文字字符,请在该字符前加上一个反斜杠 (\)。反斜杠本身不显示。使用反斜杠与将下一个字符放在双引号中的作用是相同的。若要显示反斜杠,请使用两个反斜杠 (\\)。
不能显示为文字字符的字符示例为日期格式字符和时间格式字符(a、c、d、h、m、n、p、q、s、t、w、y、/ 和 :)、数字格式字符(#、0、%、E、e、逗号和句点)和字符串格式字符(@、&、<、> 和 !)。
"ABC"显示双引号 (" ") 里面的字符串。若要将字符串包含在代码内的样式参数中,必须将文本放在 Chr (34) 之间(34 为引号 (") 的字符代码)。
下表包含用于表示数字的一些示例格式表达式。(所有这些示例均假设您的系统区域设置为“英语 - 美国”)第一列包含 Format 函数的格式字符串;如果格式化的数据具有在列标题中给定的值,则其他列包含生成的输出结果。
格式(样式)“5”格式设置为“-5”格式设置为“0.5”格式设置为“0”格式设置为
零长度字符串 ("")5-50.50
05-510
0.005.00-5.000.500.00
#,##05-510
$#,##0;($#,##0)$5($5)$1$0
$#,##0.00;($#,##0.00)$5.00($5.00)$0.50$0.00
0%500%-500%50%0%
0.00%500.00%-500.00%50.00%0.00%
0.00E+005.00E+00-5.00E+005.00E-010.00E+00
0.00E-005.00E00-5.00E005.00E-010.00E00
"$#,##0;;\Z\e\r\o"$5$-5$1零
注释
如果包含两个连续的分号,则缺少的部分用正值的格式显示。
预定义日期和时间格式:
下表标识预定义的日期和时间格式的名称。如果您使用这些预定义的字符串之外的字符串,它们将作为自定义日期和时间格式来解释。
格式规范说明
"General Date"显示日期和/或时间。例如 3/12/2008 11:07:31 AM。日期显示由您的应用程序的当前区域性值确定。
"Long Date" 或者"Medium Date"根据您的当前区域性的长日期格式显示日期。例如,2008 年 3 月 12 日,星期三。
"Short Date"使用您的当前区域性的短日期格式显示日期。例如 3/12/2008。
"Long Time" 或者"Medium Time"使用您的当前区域性的长时间格式显示时间;通常包括小时、分钟和秒。例如,11:07:31 AM。
"Short Time"使用您的当前区域性的短时间格式显示时间。例如,11:07 AM。
FORMAT函数自定义日期和时间格式:
下表显示可用于创建用户定义的日期/时间格式的字符。
格式规范说明
(:)时间分隔符。在某些区域设置中,可能用其他字符表示时间分隔符。在设置时间值的格式时,时间分隔符用于分隔小时、分钟和秒。在格式化输出中用作时间分隔符的实际字符取决于您应用程序的当前区域性值。
(/)日期分隔符。在某些区域设置中,可能用其他字符表示日期分隔符。在设置日期值的格式时,日期分隔符用于分隔年、月和日。在格式化输出中用作日期分隔符的实际字符取决于您应用程序的当前区域性。
(%)用于指示应以单个字母格式读取后面的字符,而不考虑任何尾随字母。此外,还用于指示以用户定义的格式读取单个字母格式。有关其他详细信息,请参阅以下内容。
d将天显示为不带前导零的数字(例如,1)。如果这是用户定义的数字格式中的唯一字符,则使用 %d。
dd将天显示为带一个前导零的数字(例如,01)。
ddd将天显示为缩写(例如,Sun)。
dddd将天显示为全名(例如,Sunday)。
M将月显示为不带前导零的数字(例如,一月表示为 1)。如果这是用户定义的数字格式中的唯一字符,则使用 %M。
MM将月显示为带一个前导零的数字(例如,01/12/01)。
MMM将月显示为缩写(例如,Jan)。
MMMM将月显示为完整的月份名称(例如,January)。
gg显示时期/时代字符串(例如,A.D.)。
h使用 12 小时制时钟将小时显示为不带前导零的数字(例如,1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,则使用 %h。
hh使用 12 小时制时钟将小时显示为带前导零的数字(例如,01:15:15 PM)。
H使用 24 小时制时钟将小时显示为不带前导零的数字(例如,1:15:15)。如果这是用户定义的数字格式中的唯一字符,则使用 %H。
HH使用 24 小时制时钟将小时显示为带前导零的数字(例如,01:15:15)。
m将分钟显示为不带前导零的数字(例如,12:1:15)。如果这是用户定义的数字格式中的唯一字符,则使用 %m。
mm将分钟显示为带前导零的数字(例如,12:01:15)。
s将秒显示为不带前导零的数字(例如,12:15:5)。如果这是用户定义的数字格式中的唯一字符,则使用 %s。
ss将秒显示为带前导零的数字(例如,12:15:05)。
f显示秒的小数部分。例如,ff 显示百分之一秒,而 ffff 显示万分之一秒。在用户定义的格式中最多可以使用 7 个 f 符号。如果这是用户定义的数字格式中的唯一字符,则使用 %f。
t使用 12 小时制时钟,对于中午之前的任何小时都显示大写字母 A;对于中午与 11:59 P.M 之间的任何小时都显示大写字母 P。如果这是用户定义的数字格式中的唯一字符,则使用 %t。
tt对于使用 12 小时制时钟的区域设置,对中午之前的任何小时都显示大写字母 AM;对于中午与 11:59 P.M 之间的任何小时都显示 PM。
对于使用 24 小时制时钟的区域设置,不显示任何内容。
y将年显示为不带前导零的数字 (0-9)。如果这是用户定义的数字格式中的唯一字符,则使用 %y。
yy以带一个前导零的两位数字格式显示年(如果适用)。
yyy以四位数字格式显示年。
yyyy以四位数字格式显示年。
z显示不带前导零的时区偏移量(例如,-8)。如果这是用户定义的数字格式中的唯一字符,则使用 %z。
zz显示带一个前导零的时区偏移量(例如,-08)
zzz显示完整的时区偏移量(例如,-08:00)
注释
格式设置字符串区分大小写。使用不同的大小写形式,可以获取不同的格式。例如,当使用字符串“D”格式化日期值时,可以获得采用长格式的日期(根据您的当前区域设置)。但是,如果将此字母更改为小写“d”,则可以获得采用短格式的日期。此外,如果目标格式与任何定义的格式字符串的大小写都不匹配,则可能出现意外结果或错误。
日期/时间格式使用当前用户区域设置来确定字符串的最终格式。例如,若要使用下列格式字符串“M/d/yyyy”来设置日期 1995 年 3 月 18 日,如果用户区域设置为美国 (en-us),则结果为“3/18/1995”;但如果用户区域设置为德国 (de-de),则结果为“18.03.1995”
LEFT函数:从文本字符串的开头返回指定数据的字符--- RIGHT(<text>, <num_chars>)
LEFT(<text>, <num_chars>)
LEN(<TEXT>)
LOWER(<TEXT>) ….UPPER
REPLACE 将基于您指定的字符数,用不同的文本字符串替换文本字符串的一部分。
语法
REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>)
REPT:重复给定次数的文本。使用 REPT 可用一个文本字符串的许多实例填充单元格。
语法
REPT(<text>, <num_times>)
SEARCH:返回最先找到特定字符或文字字符串的位置的字符编号
语法
SEARCH(<find_text>, <within_text>, [start_num])
SUBSTITUTE:用文本字符中的新文本替换现有文本。
语法
SUBSTITUTE(<text>, <old_text>, <new_text>, <instance_num>)
TRIM:从文本删除两个词之间除了但哥空格外的所有空格
语法
TRIM(<text>)
VALUE:将表示数字的文本字符串转为数字
语法
VALUE(<text>)
DAX与MySQL语法的比较。
1、 查看表的所有行记录
Select * from tb_product_order
DAX: 表 = '订单表' //返回的表的记录,不能使用新建度量值方法,
需《建模》--新表
2、 单表过滤条件,在关系型数据库里使用WHERE XX=”OO”
SELECT * FROM tb_product_order WHERE STATUS=100
DAX: 表 = FILTER('订单表','订单表'[status]=100)
3、多表JOIN连接(左外连接)
SQL:
SELECT tbp.* FROM tb_product_order tbp
LEFT JOIN dim_renttpye dimr
ON tbp.type=dimr.id WHERE dimr.id=1
DAX:
表 = FILTER('订单表',RELATED('商品消费方式'[id])=1)
4、单表维度使用分组GROUP BY
SELECT `type`,COUNT(`type`) FROM tb_product_order tb GROUP BY `type`
DAX:
表 = GROUPBY('订单表','订单表'[type],"AAA",COUNTAX(CURRENTGROUP(),'订单表'[type]))
5、获取前几个最大或最小的值
SELECT amount,DATE(create_time) FROM tb_product_order ORDER BY amount ASC LIMIT 3
DAX:
表 = TOPN(3,'订单表','订单表'[amount],ASC)
以上通过简单的应用返回包含值得表。
返回包含值得表的限制:
1、 表达式不能引用度量值
2、 表达式不能使用嵌套CALCULATE函数
3、 表达式不能使用扫描表或返回表的任何函数,包括聚合函数
DAX一些其他函数使用
度量值:
统计状态分组数据
度量值SWICH = sumx('订单表',SWITCH([status],101,'订单表'[amount],200,'订单表'[amount],300,'订单表'[amount],400,'订单表'[amount],500,'订单表'[amount],600,'订单表'[amount],700,'订单表'[amount],'订单表'[amount]))
度量值 = SUMMARIZE(CALCULATETABLE('用户表',FORMAT('用户表'[create_time],"yyyy")="2017"),'用户表'[city],'用户表'[county],"total_count",COUNT('用户表'[user_id]))
累计注册用户数 = IF(
MAX('PowerBi 时间维度表'[DateKey].[Date])
CALCULATE(COUNT('用户表'[user_id]),FILTER(ALLSELECTED('PowerBi 时间维度表'[DateKey]),'PowerBi 时间维度表'[DateKey] <= MAX('PowerBi 时间维度表'[DateKey]))))
##返回表,函数嵌套
AA := FILTER(SUMMARIZE('订单表', '订单表'[product_id],'订单表'[create_time],"销售总额",sum('订单表'[amount])),[销售总额]<>0)
网友评论