上下文的傳遞性

2021-10-07 04:19:19 字數 1683 閱讀 3117

當dax表示式內需要對多個表單中的內容進行計算時,需要特別注意上下文的傳遞性。行上下文關係在表之間不具有自動傳播性。例如bike表和sales表之間是一對多的關聯關係,如果想計算每種產品的銷售額,直接使用sales[volume]*bike[price]進行計算時power bi會報錯,提示無法獲取當前bike列中的product值,即兩個表單雖然有關聯關係,但通過行上下文無法從sales表獲取bike表中對應的資訊。此時,必須借助related函式才能將行上下文的過濾條件傳遞給對應表單,從而獲取所需資料進行計算。

與行上下文不同,篩選上下文在表之間存在傳遞關係,在多對一關聯關係中,應用在多的一方的篩選條件可以自動傳播到一的一方對其進行篩選。例如在下面的表集群當中,sales表和bike表是多對一關係,bike表和product category表也是多對一關係,這三張表可以聯合成一張虛擬的大表,這個虛擬表中包含三張表中全部的資料列,使得應用到sales表上的篩選條件,可以傳遞到bike表以及product category表當中,並且通過應用到sales表上的乙個篩選條件,必定可以在bike表和product category表中篩選出唯一一組符合條件的資料。

需要注意的是,如果想利用篩選上下文在多對一關係的表之間具有傳遞性這一特點,通過對乙個表的篩選來過濾另外乙個表中的資料,在all函式的使用上需要特額外小心。例如下面這兩個表示式看似非常相近,但實際上獲得的結果完全不同。

這兩個表示式的區別主要在於,all_column內使用all函式去除了bike表內product列上的篩選條件,之後再篩選』bike』[product] = "mountain bike"的資料,而all_table則用all函式去掉了整個bike表上的篩選條件,然後再篩選』bike』[product] = "mountain bike"的資料。

all_column 表示式計算出錯是由於product列並不存在於product category表中,這樣導致只針對product列上的任何過濾篩選都不會對product category表產生影響,因此,在all_column表示式當中,countrows函式的計算範圍讓然是整個product category表,所以獲得的結果是2,而不是1。

上下文傳遞

上下文傳遞 在傳統的同步 rpc 呼叫時,業務往往通過執行緒變數來傳遞上下文,例如 traceid 會話 session ip 等資訊。非同步化之後,由於潛在的執行緒切換和執行緒被多個訊息交叉復用,通常不建議繼續使用執行緒變數傳遞上下文。非同步化之後,上下文傳遞的建議策略 如果是 lambda 表示...

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

中斷上下文 程序上下文

在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...