我想使用内部联接连接两个表。标准如下:
这两个表是预算和交易,它们是连接的
CUSTOMER_ID = CUSTOMER_ID, FinYear = Transactions_Year
预算:
交易:
计算为:
SUM(Budget)
和 SUM(Transactions[Total Cost Value])
下面是SQL代码:
--====Select Statement
SELECT Budget.[CUSTOMER_ID],[Budget_Year],[Budget_Month],[Budget_Calculation],Transactions.[Total Cost Value Calculation]
FROM (
--==SQL SUBQUERY FOR BUDGET
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 (
--==SQL SUBQUERY FOR TRANSACTIONS
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])
)
为了使 DAX 连接函数正常工作,表连接列需要具有相同的名称。您可以使用 SELECTCOLUMNS() 重命名 DAX 表达式中的列,或者使用 ADDCOLUMNS() 添加具有匹配名称的新列。如果您正在寻找内部联接,有一个本机函数 NATURALINNERJOIN() 可以满足您的要求。
但是,根据您的情况和要求,您可能需要考虑在 PowerQuery 中执行联接(转换数据按钮)。它具有更直观的界面,通常更干净/更易于使用。在 PowerQuery 中,您可以选择基表,选择合并表,选择联接列(按住 Ctrl 键单击以选择多个),然后在底部选择内部联接类型。
正确答案是:
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)```