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)
围绕变量 ( VAR)的使用存在一些相互依赖的“错误”或限制,NATURALLEFTOUTERJOIN这使得调试变得很奇怪。
一些值得注意的限制是:
VAR:
不能通过 TableName[ColumnName] 语法引用表变量中的列。
NATURALLEFTOUTERJOIN:
任何一个:
必须在应用连接之前定义两个表之间的关系,并且定义关系的列的名称需要不同。
或者:
为了连接具有相同名称且没有关系的两列,这些列必须具有数据沿袭。
(我有点困惑,因为提到了链接do not have a data lineage;而官方文档说只有来自同一源表(具有相同谱系)的列才被加入。)
回到这个案子。
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)当我们NATURALLEFTOUTERJOIN对上面两个表进行应用时,No common join columns detected由于它们没有建立关系,它会返回错误。
TREATAS按照这篇博文中的建议使用。但是要使用TREATAS,我们必须引用Premium和Losses表中的列名,因此我们不能使用VAR来声明它们,而必须实际实例化它们。总而言之,解决方案是:
Premium和创建计算表Losses。使用TREATAS模仿数据沿袭并加入Premium表Losses_TreatAs代替。
MyTable =
VAR Losses_TreatAs = TREATAS(Losses, Premium[PolicyNumber], Losses[Losses])
RETURN NATURALLEFTOUTERJOIN(Premium, Losses_TreatAs)
Run Code Online (Sandbox Code Playgroud)结果:
| 归档时间: |
|
| 查看次数: |
15966 次 |
| 最近记录: |