我需要在整列的固定设定值中检索最接近的匹配值。
我不能使用VBA,理想情况下将其编写为M或powerquery中的计算列,因此可以在Power BI中复制结果。
必须匹配的值集如下所示
| preceding column | Sys_size |
===============================
| ... | null |
| ... | 7 |
| ... | 9 |
| ... | 12 |
| ... | 15 |
| ... | 17 |
| ... | null |
所以简而言之,上面的列表是可变的(可以添加或更改更多的大小),并包含空(空)值。
其次,有一堆变量数如下
| preceding column | User_size |
================================
| ... | 8.5 |
| ... | 13 |
| ... | 6 |
| ... | 10.5 |
| ... | 18 |
| ... | 14 |
我想在我的脚本中获得的结果如下所示
| preceding column | User_size | Sys_size |
===========================================
| ... | 8.5 | 9 |
| ... | 13 | 12 |
| ... | 6 | 7 |
| ... | 10.5 | 12 |
| ... | 18 | 17 |
| ... | 14 | 15 |
简单地说,它搜索与User_size输入匹配的最近的Sys_size。请注意,如果用户的值恰好落在两个Sys_size值之间,则结果将向上舍入。
答案 0 :(得分:2)
以下是在查询编辑器中执行此操作的一种方法:
首先,添加一个自定义列,为print ("Sie heben ", geld_a, "€ ab")
表的每一行计算User_size
和Sys_size
之间的最小距离:
Users
完成后,您可以使用以下公式的自定义列提取= Table.AddColumn(PreviousStepNameHere, "Dist",
(U) => List.Min(List.Transform(List.RemoveNulls(System[Sys_size]),
each Number.Abs(_ - U[User_size]))))
:
Sys_size
(您可以放弃if List.Contains(System[Sys_size], [User_size] + [Dist])
then [User_size] + [Dist]
else if List.Contains(System[Sys_size], [User_size] - [Dist])
then [User_size] - [Dist]
else null
,而只使用else if
。)
答案 1 :(得分:0)
就像@Alexis Olson在他的回答中提到的,使用DAX查询实现起来要容易一些。
假设: - 您有两个表,其中一个表具有Sys_size,另一个表具有User_Size。
让我们只使用DAX来创造我们需要的东西: -
步骤1: - 在建模选项卡上: - 点击"新表"
Table1= SELECTCOLUMNS(TableNameofSys_Size,"Sys_Size",TableNameofSys_Size[Sys_size])
Table2= SELECTCOLUMNS(TableNameofUser_Size,"User_Size",TableNameofSys_Size[User_size])
ReqTable = CROSSJOIN(Table1,Table2)
步骤2: - 在ReqTable
上创建如下的计算列Sys_sizeNew = IF(ISBLANK(ReqTable[Sys_size]),0,ReqTable[Sys_size])
Diff = ABS(ReqTable[Sys_sizeNew] - ReqTable[User_size])
步骤3: - 在ReqTable上创建如下的度量。
Req System Value = CALCULATE(SELECTEDVALUE(ReqTable[Sys_sizeNew],MAX(ReqTable[Sys_sizeNew])),FILTER(ReqTable, ReqTable[Diff] = MIN(ReqTable[Diff])))
步骤4: - 使用Table2加入ReqTable,如图所示。
如果有帮助,请告诉我!