本次记录在看到大神所做案列模板中关于新建表内容之后,仅为个人理解:
1.ADDCOLUMNS(表,名称1,表达式1,名称2,表达式2……)——返回具有DAX表达式指定的新列的表)
2.SELECTCOLUNMS(表,名称1,表达式1,名称2,表达式2……)——返回具有从表中选择的列以及DAX表达式指定的新列的表
3.CALCULATE(表达式,[筛选器1],……)——在筛选器修改的上下文中对表达式进行求值。(注:DAX函数中,"[]"括起来的部分都是可以省略的)
4.FIRSTNOBLANK(ColumnName,表达式)——返回列中表达式具有非空白值的第一个值
在PowerBI中关于这几个函数的表述如上,那么问题来了,大神模板中addcolumns函数的第一个参数是distinct(列名),为什么不是表呢?那selectcolumns函数后是否也可以用表达式代替第一个参数“表”?身为小白的我,顺利成章的看不懂了。
第一个参数为“表”新建表 = ADDCOLUMNS(DISTINCT('示例表'[订单ID]),"客户id",CALCULATE(FIRSTNONBLANK('示例表'[客户ID],'示例表'[客户ID])))
第一个参数为返回表的表达式第一个参数为“表”时候,addcolumns()函数的意义为,返回这个表,并在表后增加相对应的列;第一个参数为“返回表的表达式”时候,第一列为满足表达式的原表列,然后再新增相对应的其他列。(这里用calculate(firstnoblank()) 函数,是因为将订单ID去重之后,原来的客户ID列已经不能与新的订单ID列一一对应,需要用筛选器函数calculate对其进行相应条件的筛选以满足与新的订单ID 列对应关系。
第一个参数“返回表的表达式”Selectcolumns () 经试验,第一个参数为表达式时候,后边新建列名称所对应的表达式也会出错,故不可用。
通过上述方法,我的理解是,表达式返回的一列姑且认为是只有一列的表,这样来看的话,addcolumns()函数的第一个参数“表”也算是满足了;另外addcolumns函数是在原表上新建列再返回到一个新表中,而selectcolumns则是在空白表新建列,故当第一个参数为表达式时候,addcolumns可以调用原表中其他列,而selectcolumns仅能调用表达式所生成的那一列。
筛选器函数下sum( 金额) 仅sum(金额)另外,新建表对原订单金额求和时候需筛选器函数与calculate()函数与sum()函数嵌套使用(这时候sum求和的上下文只是同一订单行中的上下文),否则就相当于调用了原表中一个度量值sum(金额)(上下文为原表所有行上下文)
网友评论