如何将来自两个查询的汇总数据加入 DAX Power BI 中的新表

Ser*_*dia 3 dax powerbi powerbi-desktop

我有两个疑问:

优质的:

在此处输入图片说明

和损失:

在此处输入图片说明

如何使用 DAX 简单地汇总高级查询中的数据并将其左连接到损失查询中的汇总数据?

在 SQL 中,它会是这样的:

declare @PremiumTable table (PolicyNumber varchar(50), Premium money)
insert into @PremiumTable values 
                                ('Pol1', 100),
                                ('Pol1', 50),
                                ('Pol2', 300),
                                ('Pol3', 500),
                                ('Pol3', 200),
                                ('Pol4',400)

declare @LossesTable table (PolicyNumber varchar(50), Losses money)
insert into @LossesTable values ('Pol1',115),
                                ('Pol1',25),
                                ('Pol2',0),
                                ('Pol3',110),
                                ('Pol3',75)


select  p.PolicyNumber, 
        sum(p.Premium) as Premium,
        sum(l.Losses)as Losses  
from @PremiumTable p 
        LEFT JOIN @LossesTable l on p.PolicyNumber = l.PolicyNumber
group by p.PolicyNumber
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明

我尝试使用,NATURALLEFTOUTERJOIN但它给了我一个错误:

*An incompatible join column, (''[PolicyNumber]) was detected. 'NATURALLEFTOUTERJOIN' doesn't support joins by using columns with different data types or lineage.*
Run Code Online (Sandbox Code Playgroud)
MyTable = 
    VAR Premium = 
            SELECTCOLUMNS(
                fact_Premium,
                "PolicyNumber",fact_Premium[PolicyNumber],
                "Premium", fact_Premium[Premium]
                )
    VAR Losses = 
                SELECTCOLUMNS(
                    fact_Losses,
                    "PolicyNumber", fact_Losses[PolicyNumber],
                    "Losses", fact_Losses[PaymentAmount]
                             )
    VAR Result = NATURALLEFTOUTERJOIN(Premium,Losses)
    RETURN Result
Run Code Online (Sandbox Code Playgroud)

Fox*_* Ng 5

围绕变量 ( VAR)的使用存在一些相互依赖的“错误”或限制,NATURALLEFTOUTERJOIN这使得调试变得很奇怪。

一些值得注意的限制是:

VAR

不能通过 TableName[ColumnName] 语法引用表变量中的列。

NATURALLEFTOUTERJOIN

任何一个:

必须在应用连接之前定义两个表之间的关系,并且定义关系的列的名称需要不同。

或者:

为了连接具有相同名称且没有关系的两列,这些列必须具有数据沿袭

(我有点困惑,因为提到了链接do not have a data lineage;而官方文档说只有来自同一源表(具有相同谱系)的列才被加入。)


回到这个案子。

  1. SUMMARIZE应该用来代替SELECTCOLUMNS获取Premiumand 的汇总表Losses,即:

    Premium = 
    SUMMARIZE(
        fact_Premium,
        fact_Premium[PolicyNumber],
        "Premium", SUM(fact_Premium[Premium])
    )
    
    Losses = 
    SUMMARIZE(
        fact_Losses,
        fact_Losses[PolicyNumber],
        "Losses", SUM(fact_Losses[Losses])
    )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当我们NATURALLEFTOUTERJOIN对上面两个表进行应用时,No common join columns detected由于它们没有建立关系,它会返回错误。

在此处输入图片说明

  1. 为了解决这个问题,我们可以TREATAS按照这篇博文中的建议使用。但是要使用TREATAS,我们必须引用PremiumLosses表中的列名,因此我们不能使用VAR来声明它们,而必须实际实例化它们。

总而言之,解决方案是:

  1. 如上所述,为Premium和创建计算表Losses

优质的

损失

  1. 使用TREATAS模仿数据沿袭并加入PremiumLosses_TreatAs代替。

    MyTable = 
    VAR Losses_TreatAs = TREATAS(Losses, Premium[PolicyNumber], Losses[Losses])
    RETURN NATURALLEFTOUTERJOIN(Premium, Losses_TreatAs)
    
    Run Code Online (Sandbox Code Playgroud)

结果:

结果


Nel*_*ias 1

你好我建议你这样:

在PowerQuery中,用policyNumber建立一个表,如下所示:

  1. 复制 Premium 表,并删除副本上的 premium 列。称之为 PremiumPol
  2. 复制损失表,并删除重复项上的损失列。称之为 LossesPol
  3. 然后使用“追加查询”按钮来追加 PremiumPol 和 LossesPol。称之为保单号码
  4. 最后从附加表中删除重复项
  5. 然后点击关闭并应用

检查你的模型是否是这样的: 在此输入图像描述

然后,在保单基础上添加损失和保费很简单,继续选择表格视觉效果和这些字段: 在此输入图像描述

结果是这样的:

在此输入图像描述

希望有帮助!