预算表:
交易表:
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])
)
为了使 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)```