Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel formula 如何在Power BI Desktop中连接多列上的表_Excel Formula_Powerbi_Dax - Fatal编程技术网

Excel formula 如何在Power BI Desktop中连接多列上的表

Excel formula 如何在Power BI Desktop中连接多列上的表,excel-formula,powerbi,dax,Excel Formula,Powerbi,Dax,目标是创建一个显示一年中每个月的预算与溢价的视觉效果; 诸如此类: 所以我有两个表预算数据和保费。 如何在两列上连接这两个表: `BudgetData.InsurenceType = Premiums.Division and BudgetData .MonthYear = Premiums.MonthYear` 预算日期表: InsurType Amount MonthYear Commercial Auto 1000 Jan

目标是创建一个显示一年中每个月的预算与溢价的视觉效果; 诸如此类:

所以我有两个表预算数据和保费。 如何在两列上连接这两个表:

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

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

更新:

乔,非常感谢你。 我能够加入。 但当我尝试进行可视化时,它会给我预算金额
count
sum

我设置了“不汇总”,并确保数据类型与Premium value(十进制数)相同,但仍然存在此问题

这和join有关吗

更新2:

.pibx文件可通过dropbox获得:

更新3

Joe,如果我从现有表
Premium
BudgetData
中创建单独的计算表,并包含以下列:
Premium
BudgetAmount
Division
MonthYear
。 诸如此类:

然后在我的图表中使用它。如果我点击油炸圈饼图,你认为它会按除法过滤吗

问题是我知道如何在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

“创建关系”对话框不允许选择多个列 因此,有两种变通方法 1.使用concatenation insuretype&MonthYear在两个表上创建一个新列

  • Power Query可以连接任意列的表。首先从“主页”选项卡的“合并”部分打开“合并查询”,您可以按住CTRL键并逐个选择列(按正确的连接顺序)

  • “创建关系”对话框不允许选择多个列 因此,有两种变通方法 1.使用concatenation insuretype&MonthYear在两个表上创建一个新列

  • Power Query可以连接任意列的表。首先从“主页”选项卡的“合并”部分打开“合并查询”,您可以按住CTRL键并逐个选择列(按正确的连接顺序)

  • 简而言之,Power BI不支持在两个列上连接。。。但我认为这不是你需要解决的问题

    在不了解完整数据模型的情况下,我将进行一些猜测,但我希望这能为您澄清一些问题

    我从如下的BudgetData表开始:

    还有这样一个保费表:

    我使用Power BI创建了一个具有以下DAX公式的日期表

    Dates = CALENDAR(DATE(2017, 1, 1), DATE(2017, 12, 31))
    
    InsurTypes = DISTINCT(
        UNION(
            SELECTCOLUMNS(BudgetData, "InsurType", BudgetData[InsurType]),
            SELECTCOLUMNS(Premiums, "InsurType", Premiums[Division])
        )
    )
    

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

    Dates = CALENDAR(DATE(2017, 1, 1), DATE(2017, 12, 31))
    
    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]
    
    然后,我创建了一个如下所示配置的图形,它似乎显示了正确的信息。预算数据和保费表之间不需要任何关系


    简而言之,Power BI不支持在两个列上连接。。。但我认为这不是你需要解决的问题

    在不了解完整数据模型的情况下,我将进行一些猜测,但我希望这能为您澄清一些问题

    我从如下的BudgetData表开始:

    还有这样一个保费表:

    我使用Power BI创建了一个具有以下DAX公式的日期表

    Dates = CALENDAR(DATE(2017, 1, 1), DATE(2017, 12, 31))
    
    InsurTypes = DISTINCT(
        UNION(
            SELECTCOLUMNS(BudgetData, "InsurType", BudgetData[InsurType]),
            SELECTCOLUMNS(Premiums, "InsurType", Premiums[Division])
        )
    )
    

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

    Dates = CALENDAR(DATE(2017, 1, 1), DATE(2017, 12, 31))
    
    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]
    
    然后,我创建了一个如下所示配置的图形,它似乎显示了正确的信息。预算数据和保费表之间不需要任何关系


    您可以为合并选择多个列。

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

    然后单击主页->合并查询->将查询合并为新查询:

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

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

    您的合并窗口如下所示:

    单击“确定”后,您将看到:

    当你点击这个。。。在“NewColumn”的标题中。。。您将得到以下结果:

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


    您可以为合并选择多个列。

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

    然后单击主页->合并查询->将查询合并为新查询:

    然后,在合并窗口的顶部,选择“Premium”(在下拉选择器中),然后单击“Division”列标题,然后按住Ctrl键,然后单击“MonthYear”列标题。(哟)