【发布时间】:2021-12-29 16:37:24
【问题描述】:
我正在尝试找出我拥有的数据中的祖先血统。我觉得我缺少一些东西来完成这项工作。此数据不会更改,因此不确定在加载/刷新数据时是否遗漏了可以在电源查询编辑器中编写的内容。
虽然从技术上讲,它在字段中是循环的,但它永远不会返回它当前所在的同一行,并且第一代是硬数字作为起点。只想参考妈妈和爸爸来推算孩子的血统。第一代是基本的 IF() 语句。以下是我在遇到循环依赖错误之前所能得到的。我尝试了一些方法来打破它认为它会循环。
逻辑是:
- 根据出生地,第一代的每个血统都是 100%,之后的每一代都是 ((母亲血统 + 父亲血统) / 2)。我发现我可以使用 PATHITEM() 来隔离血液类型,但会出现循环依赖的错误。 (这是我无法弄清楚如何参考母亲/父亲进行计算的地方。)如果我把这部分拿出来,我会得到下面的图片适用于第一代,而正确的母亲/父亲适用于第二代。
Asisa Blood =
VAR current_id = 'Sheet1'[ID]
VAR current_gen = 'Sheet1'[Generation]
VAR current_blood = 'Sheet1'[Birthplace]
VAR current_mother_blood =
PATHITEM(
CALCULATE(
DISTINCT('Sheet1'[Mother's Blood Mix]),
FILTER(
ALLNOBLANKROW('Sheet1'[ID]),
'Sheet1'[ID] = current_id
),
REMOVEFILTERS('Sheet1')
),1,INTEGER)
VAR current_father_blood =
PATHITEM(
CALCULATE(
DISTINCT('Sheet1'[Father's Blood Mix]),
FILTER(
ALLNOBLANKROW('Sheet1'[ID]),
'Sheet1'[ID] = current_id
),
REMOVEFILTERS('Sheet1')
),1,INTEGER)
VAR gen1_value = 100
RETURN
IF(AND(LOWER(current_gen) = "1",LOWER(current_blood) = "asisa"),
gen1_value,
((current_mother_blood + current_father_blood)/2)
)
- Blood Mix 将四种血型连接到一个字段中,以便在下一步中查找。
Blood mix =
VAR current__id = 'Sheet1'[ID]
VAR current_blood_a = 'Sheet1'[Asisa Blood]
VAR current_blood_b = 'Sheet1'[Africa Blood]
VAR current_blood_c = 'Sheet1'[Europe Blood]
VAR current_blood_d = 'Sheet1'[North America Blood]
RETURN
current_blood_a & "|" & current_blood_b & "|" & current_blood_c & "|" & current_blood_d
- Mother 和 Father 正在查找带有母亲或父亲 ID 的血液混合物
Mother's Blood Mix =
VAR current_id = 'Sheet1'[ID]
VAR current_gen = 'Sheet1'[Generation]
VAR gen_value = 'Sheet1'[Blood mix]
VAR current_parent_id =
IF(LOWER(current_gen) = "1",current_id,'Sheet1'[Mother ID])
VAR result =
CALCULATE(
DISTINCT('Sheet1'[Blood mix]),
FILTER(
ALLNOBLANKROW('Sheet1'[ID]),
'Sheet1'[ID] = current_parent_id
),
REMOVEFILTERS('Sheet1')
)
RETURN
result
【问题讨论】: