编写 Power BI 度量以根据两个表中的值检查相关表中的多个记录

问题描述 投票:0回答:1

我的数据结构如下在contractProducts表中,给出了合同和产品的每种组合以及每个合同的前一个产品(每个合同可以有多个产品)。

合约ID 产品_id 上一个产品 ID
1 1 1
2 2 1
2 3 3
3 3 2
4 1 3
5 3 1
6 2 3
6 1 2
7 3 3
8 1 1
9 1 2
9 2 3
10 3 1

我还有一个产品优势表(如下),显示了为每种产品选择的所有优势。

产品_id 福利名称
1
1 手臂
1
1 返回
2
2 手臂
2
2
3
3
3 眼睛
3 左肾

根据每个产品的 ID,它们之间存在多对多关系,我希望能够重构它或以某种方式将其全部拆分为更合理的模型,但由于我正在工作的系统以及如何构建和附加不可行的产品信息的好处(我已经尝试过,但这已经是最接近的了,长话短说,实际上不可能制作一个独特的好处列表和/或产品以保持信息正确的方式)。

我在 power Bi 中想要的是一个显示每个合约的矩阵,该矩阵可以展开以显示其当前产品的所有产品权益,并检查每个权益是否是新的(基于之前的产品 id):

矩阵图片为了方便显示,数据与上面有点不同,但结构相同

本质上,我想要一个能够发现:

For each contract

        For each product they have

                For each benefit in that product

                        Check if that benefit exists in their previous product and return yes/no

我首先使用 SELECTEDVALUE() 进行度量来查找产品 ID、之前的产品 ID 和特定的权益名称,我将每个度量定义为度量中的变量以便稍后重用。当我测试矩阵中的每个值时,它们都与正确的合同/产品/收益一起正确显示(即单独返回每个 SELECTEDVALUE() 并将它们显示在矩阵中,值是正确的)。

这就是它开始无法正常工作的地方。我已经尝试了很多选项(TREATAS、CONTAINS、FILTER、CALCULATETABLE 等),但似乎没有什么能给我我所期望的。我已经成功地使用 GENERATE 完成了其中的工作,从合同产品和过滤后的福利版本生成一个表,仅包含 previous_product_id 的 SELECTEDVALUE,如果我对此进行 COUNTROWS,它会为我提供上一个产品的正确编号,但任何时候然后,我尝试将特定好处的过滤器应用到生成的表中,或者检查它是否包含该值,它会出错(错误、空白表或显示每个好处的大规模扩展,其中大多数为空白)并且仅填充了先前产品的优点)。

预先感谢您的任何建议。

powerbi dax report powerbi-desktop dashboard
1个回答
0
投票

您可以尝试以下方法。

previous_product_id
创建第二个非活动关系。 Relationships

然后创建一个类似于以下的度量:

New Option = 
  var curOptions = DISTINCT(Benefit[benefit_name])
  var prevOptions = 
    CALCULATETABLE(
      DISTINCT(Benefit[benefit_name]),
      USERELATIONSHIP(Contract[previous_product_id], Benefit[product_id])
    )
  var chk = COUNTROWS( INTERSECT(curOptions, prevOptions) )
  return SWITCH(TRUE(),
    NOT ISINSCOPE(Benefit[benefit_name]), "",
    ISBLANK(COUNTROWS( curOptions )), BLANK(),
    ISBLANK(chk), "Yes",
    "No"
  )

为您提供以下结果: Result

© www.soinside.com 2019 - 2024. All rights reserved.