如何在 Power BI Desktop 中连接多列表
How to join tables on multiple columns in Power BI Desktop
目标是创建一个视觉效果,显示一年中每个月的预算与溢价;
类似的东西:
所以我有两个 tables BudgetData 和 Premiums。
我怎样才能在两列上加入这两个 table:
`BudgetData.InsurenceType = Premiums.Division
and
BudgetData .MonthYear = Premiums.MonthYear`
预算日期Table:
InsurType Amount MonthYear
Commercial Auto 1000 Jan 2017
Commercial Auto 22000 Feb 2017
Commercial Auto 3000 Mar 2017
Specialty Casualty 4000 Jan 2017
Specialty Casualty 5000 Feb 2017
Specialty Casualty 35000 Mar 2017
保费Table:
Division Premium MonthYear
Commercial Auto 2500 Jan 2017
Commercial Auto 1800 Feb 2017
Commercial Auto 3365 Mar 2017
Specialty Casualty 14528 Jan 2017
Specialty Casualty 3323 Feb 2017
Specialty Casualty 1825 Mar 2017
在 Power BI 中,我只能加入单一关系,我不明白为什么会这样。
那么实现这一目标的最有效方法是什么?在性能方面。
更新:
乔,非常感谢你。
我能够加入。
但是当我尝试做视觉效果时,它给了我预算金额 count
或 sum
我设置了 Don't summarize
并确保数据类型与 Premium 值(小数)相同,但仍然有这个问题。
跟join有关系吗?
更新 2:
.pibx 文件可通过保管箱获得:
https://www.dropbox.com/s/mcj1gtonttjtz6y/PremiumByDivisions.pbix?dl=0
更新 3
Joe,如果我从现有的 tables Premiums
和 BudgetData
中创建单独的计算 table 会怎么样?列:Premium
、BudgetAmount
、Division
和 MonthYear
。
像那样:
然后在我的图表中使用它。如果我点击甜甜圈图,你认为它会按部门过滤吗?
问题是我知道如何在 SQL 中创建这样的 table,但不知道如何在 DAX 中创建。
下面是t-sql代码:
;with cte_Premiums
as
(
select sum(Premium) as Premium,
Division,
LEFT(DATENAME(MONTH,[EffectiveDate]),3) +' '+ CONVERT(varchar(4),Year(EffectiveDate)) AS MonthYear,
MAX(DATEPART(MM, [EffectiveDate])) as DateOrder
from ##OlegTest
group by LEFT(DATENAME(MONTH,[EffectiveDate]),3) +' '+ CONVERT(varchar(4),Year(EffectiveDate)), Division
)
,cte_Budget
AS
(
select insurType,
Amount,
LEFT(DATENAME(MONTH,[PostDate]),3) +' '+CONVERT(varchar(4),Year([PostDate])) AS MonthYear
from BudgetData
)
select Premium,
Amount as BudgetAmount,
Division,
p.MonthYear
FROM cte_Premiums p INNER JOIN cte_Budget b ON p.Division = b.insurType and p.MonthYear = b.MonthYear
ORDER BY Division,DateOrder
创建关系对话框不允许 select 多列
所以有2个解决方法
1. 在两个表上创建一个新列,连接 InsurType & MonthYear
- Power Query 可以连接包含您 want.First 从主页选项卡的合并部分打开合并查询的列的表,您可以一一按住 CTRL 键和 select 列(在正确的加入顺序)。
简而言之,Power BI 不支持连接两列...但我认为这不是您需要在此处解决的问题。
在不知道您的完整数据模型的情况下,我将进行一些猜测,但我希望这能为您解决问题。
我从这样的 BudgetData table 开始:
和像这样的溢价 table:
我使用 Power BI 使用以下 DAX 公式创建了一个日期 table。
Dates = CALENDAR(DATE(2017, 1, 1), DATE(2017, 12, 31))
我还使用 Power BI 使用以下 DAX 公式为 InsurType/Division 创建了一个维度 table。
InsurTypes = DISTINCT(
UNION(
SELECTCOLUMNS(BudgetData, "InsurType", BudgetData[InsurType]),
SELECTCOLUMNS(Premiums, "InsurType", Premiums[Division])
)
)
然后我创建了四个 table 之间的关系,如下所示。
由于您使用的是我没有的 MonthInCalendar
列,因此我使用以下公式创建它和排序列。
MonthInCalendar = LEFT(Dates[Date].[Month], 3) & " " & Dates[Date].[Year]
MonthInCalendarSort = Dates[Date].[Year] & Dates[Date].[MonthNo]
然后我创建了一个如下图所示配置的图表,它似乎显示了正确的信息。不需要 BudgetData 和 Premiums tables 之间的关系。
您可以 select 合并多个列。
首先将两个表(BudgetDate 和 Premiums)加载到 Power Query 中。
然后单击“主页”->“合并查询”->“合并查询为新查询”:
然后,在合并 window 的顶部部分,select 'Premiums'(在下拉列表 select 或),然后单击 'Division' 列 header,然后 按住您的 Ctrl 按钮 和 单击 'MonthYear' 列 header . (您会看到每列 header 旁边出现一个“1”和一个“2”...确保它们以正确的顺序出现,即 'Division 1' 和 'MonthYear 2')。
然后,在 Merge window 的下一部分,select BudgetDate(在下拉列表中 select 或者),然后单击 'InsurType' 列 header,然后 按住 Ctrl 按钮 并 单击 'MonthYear' 列 header。 (您会看到每列 header 旁边出现一个“1”和一个“2”...确保它们以正确的顺序出现,即 'InsurType 1' 和 'MonthYear 2')。
你的合并 window 像这样:
点击确定后,您将看到:
然后当你点击 'NewColumn' 的 header 中的这个... ... 你会得到这个:
清除 'Use original column name as prefix' 旁边的复选标记,然后单击“确定”得到:
目标是创建一个视觉效果,显示一年中每个月的预算与溢价; 类似的东西:
所以我有两个 tables BudgetData 和 Premiums。 我怎样才能在两列上加入这两个 table:
`BudgetData.InsurenceType = Premiums.Division
and
BudgetData .MonthYear = Premiums.MonthYear`
预算日期Table:
InsurType Amount MonthYear
Commercial Auto 1000 Jan 2017
Commercial Auto 22000 Feb 2017
Commercial Auto 3000 Mar 2017
Specialty Casualty 4000 Jan 2017
Specialty Casualty 5000 Feb 2017
Specialty Casualty 35000 Mar 2017
保费Table:
Division Premium MonthYear
Commercial Auto 2500 Jan 2017
Commercial Auto 1800 Feb 2017
Commercial Auto 3365 Mar 2017
Specialty Casualty 14528 Jan 2017
Specialty Casualty 3323 Feb 2017
Specialty Casualty 1825 Mar 2017
在 Power BI 中,我只能加入单一关系,我不明白为什么会这样。
那么实现这一目标的最有效方法是什么?在性能方面。
更新:
乔,非常感谢你。
我能够加入。
但是当我尝试做视觉效果时,它给了我预算金额 count
或 sum
我设置了 Don't summarize
并确保数据类型与 Premium 值(小数)相同,但仍然有这个问题。
跟join有关系吗?
更新 2:
.pibx 文件可通过保管箱获得: https://www.dropbox.com/s/mcj1gtonttjtz6y/PremiumByDivisions.pbix?dl=0
更新 3
Joe,如果我从现有的 tables Premiums
和 BudgetData
中创建单独的计算 table 会怎么样?列:Premium
、BudgetAmount
、Division
和 MonthYear
。
像那样:
然后在我的图表中使用它。如果我点击甜甜圈图,你认为它会按部门过滤吗?
问题是我知道如何在 SQL 中创建这样的 table,但不知道如何在 DAX 中创建。 下面是t-sql代码:
;with cte_Premiums
as
(
select sum(Premium) as Premium,
Division,
LEFT(DATENAME(MONTH,[EffectiveDate]),3) +' '+ CONVERT(varchar(4),Year(EffectiveDate)) AS MonthYear,
MAX(DATEPART(MM, [EffectiveDate])) as DateOrder
from ##OlegTest
group by LEFT(DATENAME(MONTH,[EffectiveDate]),3) +' '+ CONVERT(varchar(4),Year(EffectiveDate)), Division
)
,cte_Budget
AS
(
select insurType,
Amount,
LEFT(DATENAME(MONTH,[PostDate]),3) +' '+CONVERT(varchar(4),Year([PostDate])) AS MonthYear
from BudgetData
)
select Premium,
Amount as BudgetAmount,
Division,
p.MonthYear
FROM cte_Premiums p INNER JOIN cte_Budget b ON p.Division = b.insurType and p.MonthYear = b.MonthYear
ORDER BY Division,DateOrder
创建关系对话框不允许 select 多列 所以有2个解决方法 1. 在两个表上创建一个新列,连接 InsurType & MonthYear
- Power Query 可以连接包含您 want.First 从主页选项卡的合并部分打开合并查询的列的表,您可以一一按住 CTRL 键和 select 列(在正确的加入顺序)。
简而言之,Power BI 不支持连接两列...但我认为这不是您需要在此处解决的问题。
在不知道您的完整数据模型的情况下,我将进行一些猜测,但我希望这能为您解决问题。
我从这样的 BudgetData table 开始:
和像这样的溢价 table:
我使用 Power BI 使用以下 DAX 公式创建了一个日期 table。
Dates = CALENDAR(DATE(2017, 1, 1), DATE(2017, 12, 31))
我还使用 Power BI 使用以下 DAX 公式为 InsurType/Division 创建了一个维度 table。
InsurTypes = DISTINCT(
UNION(
SELECTCOLUMNS(BudgetData, "InsurType", BudgetData[InsurType]),
SELECTCOLUMNS(Premiums, "InsurType", Premiums[Division])
)
)
然后我创建了四个 table 之间的关系,如下所示。
由于您使用的是我没有的 MonthInCalendar
列,因此我使用以下公式创建它和排序列。
MonthInCalendar = LEFT(Dates[Date].[Month], 3) & " " & Dates[Date].[Year]
MonthInCalendarSort = Dates[Date].[Year] & Dates[Date].[MonthNo]
然后我创建了一个如下图所示配置的图表,它似乎显示了正确的信息。不需要 BudgetData 和 Premiums tables 之间的关系。
您可以 select 合并多个列。
首先将两个表(BudgetDate 和 Premiums)加载到 Power Query 中。
然后单击“主页”->“合并查询”->“合并查询为新查询”:
然后,在合并 window 的顶部部分,select 'Premiums'(在下拉列表 select 或),然后单击 'Division' 列 header,然后 按住您的 Ctrl 按钮 和 单击 'MonthYear' 列 header . (您会看到每列 header 旁边出现一个“1”和一个“2”...确保它们以正确的顺序出现,即 'Division 1' 和 'MonthYear 2')。
然后,在 Merge window 的下一部分,select BudgetDate(在下拉列表中 select 或者),然后单击 'InsurType' 列 header,然后 按住 Ctrl 按钮 并 单击 'MonthYear' 列 header。 (您会看到每列 header 旁边出现一个“1”和一个“2”...确保它们以正确的顺序出现,即 'InsurType 1' 和 'MonthYear 2')。
你的合并 window 像这样:
点击确定后,您将看到:
然后当你点击 'NewColumn' 的 header 中的这个...
清除 'Use original column name as prefix' 旁边的复选标记,然后单击“确定”得到: