将内连接(两个带有分组依据的子查询)从 T-SQL 转换为 DAX

问题描述 投票:0回答:2

预算表:

Budgets table

交易表:

Transactions table

SELECT Budget.[CUSTOMER_ID],[Budget_Year],[Budget_Month]
    ,[Budget_Calculation],Transactions.[Total Cost Value Calculation]  
FROM (
    SELECT [Budgets].[CUSTOMER_ID] 
        ,[FinYear] [Budget_Year]
        ,[Month] [Budget_Month]
        ,sum([Budget]) [Budget_Calculation] 
    FROM [SQLTestScripts].[dbo].[Budgets]  
    group by [Budgets].[CUSTOMER_ID],[FinYear],[Month], budget
    ) Budget
INNER JOIN (
    SELECT 
        [CUSTOMER_ID]
        ,datepart(year,[Transactions].[TRANSACTION_DATE]) [Transactions_Year]
        ,datepart(month,[Transactions].[TRANSACTION_DATE]) [Transactions_Month]
        ,SUM([COST_VALUE]*QTY_INVOICED )[Total Cost Value Calculation]
    FROM [dbo].[Transactions]
    group by 
        [Transactions].[TRANSACTION_DATE],
        [CUSTOMER_ID]
    ) Transactions 
on Budget.CUSTOMER_ID = Transactions.CUSTOMER_ID
and Budget.[Budget_Year] = Transactions.[Transactions_Year] 

如何在 DAX 中编写此内容?

这不会返回正确的结果:

EVALUATE
SUMMARIZE(
    FILTER(NATURALLEFTOUTERJOIN(Budget,Transactions)
        ,Budget[CUSTOMER_ID]=Transactions[CUSTOMER_ID] 
        && Budget[FinYear] = YEAR(Transactions[TRANSACTION_DATE]
    ) 
    ,Budget[CUSTOMER_ID],Budget[FinYear],Budget[Month]
    ,"Budget Calculation",sum(Budget[Budget]) 
    ,"Total Cost Value Calculation",sum(Transactions[Total Cost Value])
)
t-sql group-by powerbi subquery dax
2个回答
0
投票

为了使 DAX 连接函数正常工作,表连接列需要具有相同的名称。您可以使用 SELECTCOLUMNS() 重命名 DAX 表达式中的列,或者使用 ADDCOLUMNS() 添加具有匹配名称的新列。如果您正在寻找内部联接,有一个本机函数 NATURALINNERJOIN() 可以满足您的要求。

但是,根据您的情况和要求,您可能需要考虑在 PowerQuery 中执行联接(转换数据按钮)。它具有更直观的界面,通常更干净/更易于使用。在 PowerQuery 中,您可以选择基表,选择合并表,选择联接列(按住 Ctrl 键单击以选择多个),然后在底部选择内部联接类型。


0
投票

正确答案是:

1:使用

SELECTCOLUMNS
(因为你想重命名具有匹配名称的列)和
SUMMARIZECOLUMNS
(以便你可以进行计算和分组)。

2:用于连接的列添加

&"" 
,这样就不会出现沿袭错误

3:

    VAR BudgetTable = 
        SELECTCOLUMNS(
                SUMMARIZECOLUMNS(
                    Budget[CUSTOMER_ID],
                    Budget[FinYear],
                    Budget[Month],
                    "Budget Calculation",CALCULATE( sum(Budget[Budget]))
                ),
                "Cust", [CUSTOMER_ID] & "",
                "Year", [FinYear] & "",
                Budget[Month],
                [Budget Calculation]
        )
        
        
            
    VAR TransactionTable = 
        SELECTCOLUMNS(
                SUMMARIZECOLUMNS(
                    Transactions[CUSTOMER_ID],
                    Transactions[Transaction_Year],
                    Transactions[Transaction_Month],
                    "Total Cost Value Calculation", CALCULATE(sum(Transactions[Total Cost Value]))
                ),
                "Cust", [CUSTOMER_ID] & "",
                "Year",[Transaction_Year] & "", 
                Transactions[Transaction_Month],
                [Total Cost Value Calculation]
                
        )
    
EVALUATE BudgetTable
EVALUATE TransactionTable

EVALUATE NATURALINNERJOIN(BudgetTable,TransactionTable)```
© www.soinside.com 2019 - 2024. All rights reserved.