我继承了 Power BI 报告中现有的 DAX 语句,该语句根据来源和产品计算费用;
Fee= SUMX(
FILTER(
'Accounts',
AND(
RELATED('Processes'[processtype_group]) = "NEWBUS",
RELATED('Transaction classes'[transaction_class_code]) = "Undwrite")
),
SWITCH(
RELATED(Source[source name]) & " " & RELATED(Products[Product name]),
"Source1 Product1", -25,
"Source1 Product2", -25,
"Source1 Product3", -50,
"Source1 Product4", -25,
"Source2 Product1", -41.60,
"Source2 Product2", -41.60,
"Source2 Product3", -53.60,
"Source2 Product4", -35.60)
)
我想添加供应商更改费用的日期范围。
来自多个表的数据使情况变得更加复杂,但是我如何添加日期范围,以便根据产品的销售时间显示正确的费用?
我已经尝试过这个
Fee2 = sumx(
FILTER(
'Accounts',
AND(
RELATED('Processes'[processtype_group]) = "NEWBUS",
RELATED('Transaction classes'[transaction_class_code]) = "Undwrite")
),
SWITCH(
true(),
RELATED(Source[source name]) & " " & RELATED(Products[Product name]),
"Source1 Product1", -25,
"Source1 Product2", -25,
"Source1 Product3", -50,
"Source1 Product4", -25,
"Source2 Product1" && Accounts[posted_date] < DATE(2024,03,01), -41.60,
"Source2 Product2" && Accounts[posted_date] < DATE(2024,03,01), -41.60,
"Source2 Product3" && Accounts[posted_date] < DATE(2024,03,01), -53.60,
"Source2 Product4" && Accounts[posted_date] < DATE(2024,03,01), -35.60,
"Source2 Product1" && Accounts[posted_date] >= DATE(2024,03,01), -43.00,
"Source2 Product2" && Accounts[posted_date] >= DATE(2024,03,01), -43.00,
"Source2 Product3" && Accounts[posted_date] >= DATE(2024,03,01), -55.00,
"Source2 Product4" && Accounts[posted_date] >= DATE(2024,03,01), -36.85)
)
但是我收到一条错误消息“函数‘SWITCH’不支持将 Text 类型的值与 True/False 类型的值进行比较”
这对您来说是可行的解决方案吗?我用一些示例数据重新创建了您的问题。
Fee =
VAR _Table = FILTER(
'Accounts Table',
RELATED('Processes Table'[processtype_group]) = "NEWBUS" &&
RELATED('Transaction Classes'[transaction_class_code]) = "Undwrite"
)
RETURN SUMX(
_Table,
VAR Concat = RELATED('Source table'[source_name]) & " " & RELATED(Products[product_name])
VAR DateApplicable = 'Accounts Table'[posted_date]
RETURN
SWITCH(
TRUE(),
(Concat = "Source1 Product1"), -25,
(Concat = "Source1 Product2"), -25,
(Concat = "Source1 Product3"), -50,
(Concat = "Source1 Product4"), -25,
(Concat = "Source2 Product1") && (DateApplicable < DATE(2024,03,01)), -41.60,
(Concat = "Source2 Product2") && (DateApplicable < DATE(2024,03,01)), -41.60,
(Concat = "Source2 Product3") && (DateApplicable < DATE(2024,03,01)), -53.60,
(Concat = "Source2 Product4") && (DateApplicable < DATE(2024,03,01)), -35.60,
(Concat = "Source2 Product1") && (DateApplicable >= DATE(2024,03,01)), -43.00,
(Concat = "Source2 Product2") && (DateApplicable >= DATE(2024,03,01)), -43.00,
(Concat = "Source2 Product3") && (DateApplicable >= DATE(2024,03,01)), -55.00,
(Concat = "Source2 Product4") && (DateApplicable >= DATE(2024,03,01)), -36.85
)
)
最终结果:
您最初的解决方案不起作用,因为您插入了 'RELATED(Source[source name]) & " " & RELATED(Products[Product name])' 作为 switch 内的第二个参数,这就是您的第一个 'case'。它基本上会检查是否 TRUE() = Source1 Product1",这是没有意义的,Power BI 正确解决了这个问题。
我必须提到这个解决方案并不健壮并且非常冗长。也许您可以使用另一个查找表,在其中定义不同的条件,并且您可以查找每个特定的组合(在本例中为串联和日期)应应用哪些费用?这更易于维护并且需要编写的代码更少。