DAX从入门到精通 5-8 学习userelationship函数

calculate还有另外一个可以好用的功能就是,它可以激活一个关系,并用于计算。事实上,按你知道的,数据模型中,会存在激活和未激活的关系。存在未激活的关系,是因为在两个表中,你有多种关系同时存在,而我们只能保持一个关系是激活的。

例如。在数据模型中,sales表中每行可能分别记录着order date和 deliverydate。然后,通常情况下,我们做的分析都是基于order date,但是对于一些特别的指标,我们可能要基于delivery date。这样的情况下,我们会在date表和sales表建立两个关系:一个基于orderdatekey,一个基于deliverydatekey。但是每次只有一个关系是活动的,因为通常使用order date分析,所以我们把orderdatekey作为活动的,其他的关系作为不激活。然后,我们可能需要展示一个基于deliverydate的指标,用来对比基于orderdate的值。这个新的指标Delivered Amount计算的时候要使用非激活状态的关系,同时,要把order date改为非激活状态。

这个场景下,我们使用calculate和userelationship结合,用下面的代码:

[Delivered Amount] :=
CALCULATE (
[Sales Amount],
USERELATIONSHIP ( Sales[DeliveryDateKey], Date[DateKey] )
)

在计算Delivered Amount的时候,deliverydatekey和datekey的关系会被激活,然后同时,orderdatekey会被设置未非活动状态。在下图的透视表中,我们可以看到sales amount基于orderdatekey 以及新的Delivered Amount。


image.png

当使用userelationship去激活一个关系的时候,我们要注意一个重要的地方:关系是在数参照的时候定义的,而不是在related等函数使用的时候定义的。

例如,如果你要计算2007年发货的金额的时候,这个函数就是不工作的。

[Delivered Amount in 2007] :=
CALCULATE (
[Sales Amount],
FILTER (
Sales,
CALCULATE (
RELATED ( Date[CalendarYear] ),
USERELATIONSHIP ( Sales[DeliveryDateKey], Date[DateKey] )
) = 2007
)

这里的原因是,使用filter迭代sales表,然后计算出了上下文,在这个过程中改变了激活的关系,然后引入了related。但是sales表和date表的关系是在引入sales表就定义好了,而不是在使用related的时候。

如果你要计算上面这个案例,你需要重新改下,按下面的写法:

[Delivered Amount in 2007] :=
CALCULATE (
[Sales Amount],
FILTER (
CALCULATETABLE (
Sales,
USERELATIONSHIP( Sales[DeliveryDateKey], Date[DateKey] )
),
RELATED ( Date[Calendar Year] ) = 2007
))

这这个函数里面,先使用calculate激活了关系,然后引入sales表。因此filter中的related计算的就是deliverydatekey激活的状态。

这个特点使得在计算列表达式中使用非默认关系变得复杂,因为表的引用,是在计算列被定义的时候。因此,你不能控制这个,你也就不能使用calculate和userelationship改变这个关系。

---------------------第五章节完成----------大家幸苦啦------------------------------

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

推荐阅读更多精彩内容