1.功能概述
虛擬屬性是指基於現有普通屬性值進行二次加工,具體方式是使用SQL運算式加工而成
2.虛擬屬性建立
2.1:手工建立
把滑鼠放到“建立屬性”框上,會彈出新增虛擬屬性的浮窗
建立屬性下拉按鈕中:建立普通屬性、建立虛擬屬性、大量匯入建立
事件屬性以及全域屬性均支援建立對應類型的虛擬屬性
普通屬性和虛擬屬性的建立入口是分開的,對已經存在屬性進行編輯的時候,無法修改屬性類型

點擊"建立虛擬屬性"的按鈕,會彈出填寫虛擬屬性資訊的頁面,下面介紹一下建立虛擬屬性需要填寫的相關資訊

基本資料:裡麵包含屬性key、屬性名稱和屬性描述,自訂填寫即可;
屬性值類型:裡面有數值、字串、字串組三種類型運算式返回的實值型別必須和配置的一致
點擊【校正SQL】按鈕,進行運算式校正,點擊儲存,會自動校正SQL,校正通過則儲存成功,校正失敗則無法儲存,具體校正規則可參考建立虛擬屬性介面中的SQL輸入規則:
預設是整個組織,關掉之後,會顯示出當前組織下的所有應用,可以對應用進行勾選
當上述的資訊填寫完成之後,點擊下面的“儲存”按鈕,一個虛擬屬性就建立完成了。
2.2:大量匯入
虛擬屬性支援大量匯入功能,在模板裡面填寫好屬性的資訊,需要填寫的內容和手工建立時一樣,表格模板如下圖:

大量匯入時,屬性類型為虛擬屬性時,SQL運算式必要欄位,否則會匯入失敗
屬性值類型必須與SQL運算式傳回值類型一致,否則會校正失敗
2.3:虛擬屬性管理
虛擬屬性支援編輯以及刪除
虛擬屬性支援屬性值管理
參與分析按鈕可以控制虛擬屬性是否在分析介面參與分析

3.使用情境樣本
以下樣本3.1、3.3、3.4、3.5使用的view_dwd_aplus_log_event_ri表中的event_kv_json欄位,該欄位以KV索引值對形式儲存系統的各個屬性key以及對應的value,$sys_為系統屬性,$channel_utm_為渠道屬性,$global_為全域屬性,其餘則為事件屬性;
樣本3.2使用的是view_dwd_aplus_log_event_ri表中的sys_url欄位,儲存的是web頁面路徑,由協議+網域名稱+路徑所組成的url
3.1屬性計算
樣本1:假設當前埋時間點事件已有屬性:<銷售數量 sales_volume>和 <銷售單價Unit_selling_price>,均為數實值型別,計算商品收入可以使用如下運算式,使用銷售數量*銷售單價
toInt32OrZero(JSONExtractString(event_kv_json,'$sales_volume'))*toInt32OrZero(JSONExtractString(event_kv_json, '$Unit_selling_price'))
3.2屬性值抽取
樣本2:現有系統sys_url屬性存放url頁面路徑(協議+網域名稱+路徑),例如https://yuming.com/path1/path2/
希望提取出/path1/path2/頁面路徑,可以使用如下運算式
extract(sys_url, '/[^/]+(/.*)')
3.3屬性值合并
樣本3:假設當前埋時間點事件已有屬性:<國家Country>、<城市City>、街道<Street>,需要將這些字串拼接為”國家-城市-街道“,可以使用如下運算式
CONCAT(JSONExtractString(event_kv_json,'$Country'),'-',JSONExtractString(event_kv_json, '$City'),'-',JSONExtractString(event_kv_json,'$Street'))
3.4時間日期再加工
樣本4:假設當前埋時間點事件已有屬性<時間date>中儲存的資料為2023-04-01,需要轉化為20230401,使用如下運算式
replaceOne(JSONExtractString(event_kv_json,'date'),'-','')
3.5資料類型轉換
樣本5:假設當前埋時間點事件已有屬性<毫秒millisecond>,需要將毫秒轉化為分鐘的同時類型為int,使用如下運算式
CAST(JSONExtractInt(event_kv_json, 'millisecond') / 1000 / 60 AS Nullable(Int))