【问题标题】:How to join tables on multiple columns in Power BI Desktop如何在 Power BI Desktop 中连接多个列上的表
【发布时间】:2017-10-20 15:34:05
【问题描述】:

目标是创建一个视觉效果,显示一年中每个月的预算与保费; 类似的东西:

所以我有两个表 BudgetData 和 Premiums。 如何在两列上加入这两个表:

    `BudgetData.InsurenceType = Premiums.Division 
and
 BudgetData .MonthYear = Premiums.MonthYear`

预算日期表:

   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

保费表:

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 中,我只能加入单一关系,这就是我不明白为什么会这样。

那么实现这一目标的最有效方法是什么?在性能方面。

更新:

乔,非常感谢。 我能够加入。 但是当我尝试做视觉效果时,它会给我预算金额 countsum

我设置了Don't summarize 并确保数据类型与高级值(十进制数)相同,但仍然存在此问题。

跟join有关系吗?

更新2:

.pibx 文件可通过 dropbox 获取: https://www.dropbox.com/s/mcj1gtonttjtz6y/PremiumByDivisions.pbix?dl=0

更新 3

Joe,如果我从现有表 PremiumsBudgetData 中创建单独的计算表,其中包含以下列:PremiumBudgetAmountDivisionMonthYear。 类似的东西:

然后在我的图表中使用它。如果我点击圆环图,你认为它会按部门过滤吗?

问题是我知道如何在 SQL 中创建这样的表,但不知道如何在 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

【问题讨论】:

    标签: excel-formula powerbi dax


    【解决方案1】:

    简短的回答是 Power BI 不支持加入两列...但我认为这不是您需要在这里解决的问题。

    在不了解您的完整数据模型的情况下,我会做出一些猜测,但我希望这能为您解决问题。

    我从一个这样的 BudgetData 表开始:

    还有这样的保费表:

    我使用 Power BI 创建了一个包含以下 DAX 公式的日期表。

    Dates = CALENDAR(DATE(2017, 1, 1), DATE(2017, 12, 31))
    

    我还使用 Power BI 使用以下 DAX 公式为 InsurType/Division 创建了维度表。

    InsurTypes = DISTINCT(
        UNION(
            SELECTCOLUMNS(BudgetData, "InsurType", BudgetData[InsurType]),
            SELECTCOLUMNS(Premiums, "InsurType", Premiums[Division])
        )
    )
    

    然后我创建了四个表之间的关系,如下所示。

    由于您使用的是我没有的MonthInCalendar 列,因此我使用以下公式来创建它和一个排序列。

    MonthInCalendar = LEFT(Dates[Date].[Month], 3) & " " & Dates[Date].[Year]
    
    MonthInCalendarSort = Dates[Date].[Year] & Dates[Date].[MonthNo]
    

    然后我创建了一个配置如下所示的图表,它似乎显示了正确的信息。不需要 BudgetData 和 Premiums 表之间的关系。

    【讨论】:

    • 谢谢乔。我能够加入,但视觉数据看起来很奇怪。我更新了帖子。谢谢
    • 谢谢乔。我想我按照你的建议做了。但是视觉仍然看起来很奇怪。我添加了指向 .pibx 文件的链接。也许你会有兴趣看看它。谢谢
    • 在您的文件中,我将 Amount 字段的 Default Summarization 改回 Sum,然后图表看起来正常。
    • 感谢乔,选择所有部门后看起来不错。但是,如果我在甜甜圈图上选择单独的划分 - 它仍然会向我显示所有这些的总和。很抱歉。
    • Joe,我在两个表中都创建了 DivisionID 列。建立的关系。但仍然总结/计算我的预算。我发布了这个问题的干净版本。 stackoverflow.com/questions/46899919/…
    【解决方案2】:

    您可以选择多列进行合并。

    首先将两个表(BudgetDate 和 Premiums)加载到 Power Query 中。

    然后点击 Home -> Merge Queries -> Merge Queries as New:

    然后,在合并窗口的顶部,选择“Premiums”(在下拉选择器中),然后单击“Division”列标题,然后按住您的 Ctrl 按钮和 点击“MonthYear”列标题。 (您会在每个列标题旁边看到一个“1”和一个“2”...确保它们以正确的顺序出现,即“Division 1”和“MonthYear 2”)。

    然后,在合并窗口的下一部分中,选择 BudgetDate(在下拉选择器中),然后单击“InsurType”列标题,然后按住您的 Ctrl 按钮 点击“月年”列标题。 (您会在每个列标题旁边看到一个“1”和一个“2”...确保它们以正确的顺序出现,即“InsurType 1”和“MonthYear 2”)。

    您的合并窗口如下所示:

    当你点击确定时,你会得到这个:

    当你点击这个...... 在'NewColumn'的标题中......你会得到这个:

    清除“使用原始列名作为前缀”旁边的复选标记,然后单击“确定”以获取:

    【讨论】:

      【解决方案3】:

      创建关系对话框不允许选择多个列 所以有2个解决方法 1. 在两个表上创建一个新列,并连接 InsurType 和 MonthYear

      1. Power Query 可以连接包含任意多列的表。首先从“主页”选项卡的“组合”部分打开“合并查询”,您可以按住 CTRL 键并一一选择列(按正确的连接顺序)。李>

      【讨论】:

        猜你喜欢
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 2019-09-06
        • 2016-06-06
        • 2018-11-13
        • 2019-01-26
        相关资源
        最近更新 更多