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

时间:2018-07-19 23:05:44

标签: powerbi dax powerbi-desktop

我有2个查询:

高级:

enter image description here

和损失:

enter image description here

如何简单地汇总高级查询中的数据,然后使用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

结果:

enter image description here

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

*An incompatible join column, (''[PolicyNumber]) was detected. 'NATURALLEFTOUTERJOIN' doesn't support joins by using columns with different data types or lineage.*

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

2 个答案:

答案 0 :(得分:2)

关于变量(VAR)和NATURALLEFTOUTERJOIN的使用存在一些相互依赖的“错误”或局限性,这使得调试起来很奇怪。

一些值得注意的限制是:

VAR

  

表变量cannot be referenced中的列通过   TableName [ColumnName]语法。

NATURALLEFTOUTERJOIN

要么:

  

两个表之间的关系必须为defined before the join is applied,并且定义   关系需要不同。

或者:

  

为了连接两个具有相同名称且没有关系的列,   这些列必须位于have a data lineage

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


回到这种情况。

    应该使用
  1. SUMMARIZE而不是SELECTCOLUMNS来获取PremiumLosses的摘要表,即:

    Premium = 
    SUMMARIZE(
        fact_Premium,
        fact_Premium[PolicyNumber],
        "Premium", SUM(fact_Premium[Premium])
    )
    
    Losses = 
    SUMMARIZE(
        fact_Losses,
        fact_Losses[PolicyNumber],
        "Losses", SUM(fact_Losses[Losses])
    )
    
  2. 当我们将NATURALLEFTOUTERJOIN应用于以上两个表时,由于它们没有建立关系,它将返回错误No common join columns detected

enter image description here

  1. 要解决此问题,我们可以根据this博客文章中的建议使用TREATAS。但是要使用TREATAS,我们必须引用PremiumLosses表中的列名,因此我们不能使用VAR来声明它们,而必须实例化他们。

最后,解决方案是:

  1. 如上所述为PremiumLosses创建计算表。

premium

losses

  1. 使用TREATAS模仿数据沿袭,并将Premium表与Losses_TreatAs联接。

    MyTable = 
    VAR Losses_TreatAs = TREATAS(Losses, Premium[PolicyNumber], Losses[Losses])
    RETURN NATURALLEFTOUTERJOIN(Premium, Losses_TreatAs)
    

结果:

results

答案 1 :(得分:0)

你好,我这样建议你

在PowerQuery中,使用如下的policyNumber建立了一个表:

  1. 复制高级表格,并删除重复项上的高级列。称为PremiumPol
  2. 复制“损失”表,并删除重复项上的“损失”列。称之为LossesPol
  3. 然后使用“追加查询”按钮来追加PremiumPol和LossesPol。称之为政策编号
  4. 最后从附加表中删除重复项
  5. 然后单击关闭并应用

检查您的模型是否是这样的: enter image description here

然后,要在一个保单基础上增加损失和保费是微不足道的,请继续选择一个表格,并选择以下字段: enter image description here

结果是这样的:

enter image description here

希望有帮助!