欢迎光临散文网 会员登陆 & 注册

Power BI之DAX神功:第4卷第12回 管理关系中的歧义

2021-12-23 14:45 作者:孙兴华zz  | 我要投稿

一、什么是歧义

歧义是在理解上会产生两种或两种以上可能,但在当时语境中只利用其中一种含义的词和句。

《DAX神功》第1卷第2回 我给大家展示了一个模型,线路2行不通,因为包含歧义。但是当你使用表1字段筛选表4时,他会默认使用线路1,DAX会自动选择最短线路,规避歧义。

为什么会这样呢,我们今天来讲清楚。

我再次忠告大家,新人能用1张表不用2张表,能用2张表不用3张表,4张表含以上不是大神就是笑话。1张表和2张表都不会出现歧义。出现歧义至少3张表。等你变强了,想用几张用几张。

二、理解活动关系中的歧义

你下班回家有两条路可以走,有一条路在修路,你肯定会选择第2条路,CROSSFILTER停用一条路的同时,DAX会主动选择另一条路。下面三个度量值:

返回结果:

线路2是怎么计算的呢?

是这样计算的:

产生歧义的原因:表2与表3使用了双向箭头,避开方法就是杜绝使用双向箭头。

但是你要发现产生歧义的表格规则是什么?

在一条线路上出现了: 多~1~多 这样的关系,且开启了双向筛选,这种情况很容易产生歧义。

三、解决非活动关系中的歧义

关于这个问题《权威指南》的表也复杂了,而且有一个业务问题作者默认大家都懂。用下面这两张表就够了,数学不是背公式,公式全靠推导,表也是一样。

我想获得每个人首次购买日期:你总不能让办会员卡的顾客必须在你的商场购物一次后持小票办会员卡吧?国内还真有这种情况,如果他为了获取每个会员的首次购买日期。那就太可笑了

【1】在会员表中新建列:

// 原理详见:《DAX神功》答网友问12.为什么LastDate与Max结果不同

// 例如FIRSTDATE就是特殊的时间智能日期函数,内部嵌套了隐形的Calculate

返回结果:

【2】参照销售表生成日期表

【3】建立如下关系

虚线关系没激活=没有关系,那现在的模型是什么样?1端~多端~1端,这是一个正常的模型

如果我使用USERELATIONSHIP函数启用虚线关系,那么原来的实线关系就被暂时停用

详见《DAX神功》第1卷第21回 USERELATIONSHIP函数

返回结果:

原理如下:

这不禁让我想起《逃学威龙》,星哥开走了乌鸦的车,达叔说:我还没上车

《权威指南》提到:清除歧义的规则还没有正式发布,可能哪天发布了就会得到改善。

《权威指南》同时提出:处理歧义和关系时,黄金法则是保持简单。

《DAX神功》不建议新人尝试利用算法消除歧义,你听弟弟一句话:消除歧义这水太深了,你根本把握不住……

《孙兴华讲PowerBI火力全开》PowerBI必学课程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集:

https://www.bilibili.com/video/BV1YE411E7p3

《DAX神功番外篇》文字版合集:

https://www.bilibili.com/read/readlist/rl478271

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110

Power BI之DAX神功:第4卷第12回 管理关系中的歧义的评论 (共 条)

分享到微博请遵守国家法律