DAX将从电源查询导入的列与另一个表的列进行比较,并从同一行返回结果

时间:2017-08-17 18:39:30

标签: excel powerbi powerpivot dax powerquery

我有一个每日CSV文件,其中有一列包含从呼叫中心收到的大型地址列表(大约5000 /天),其中一些地址包含城市周围的社区名称,通常在第一个5个字。 在另一个表中,我有一列中所有邻域的确切名称,在同一行的另一列中,我有一个快递名称,在该邻域提供送货服务。

我正在寻找一种动力转轴方法来搜索[地址]栏的每一行&如果找到与邻居名称相似的值,则会给我该社区的快递员姓名。

This an example for my data sets, the fist sheet describes 5 sample of my daily data, and the second sheet is districts information and their courier ID

1 个答案:

答案 0 :(得分:0)

免责声明 - 此方法无法处理类似的字词,只能处理完全匹配。

我找到的最简单的方法是制作一个计算表。在Modeling选项卡上,单击New Table并输入此公式。

#include "kvsimple.h"
int main (void) {
    // Prepare our context and publisher socket
    // zctx_t *ctx = zctx_new ();
    zsock_t *publisher = zsock_new (ZMQ_PUB);
    zsock_bind (publisher, "tcp://*:5556");
    zclock_sleep (200);

    zhash_t *kvmap = zhash_new ();
    int64_t sequence = 0;
    srandom ((unsigned) time (NULL));

    while (true) { 
        //  Distribute as key-value message
        kvmsg_t *kvmsg = kvmsg_new (++sequence);
        kvmsg_fmt_key  (kvmsg, "%d", randof (10000));
        kvmsg_fmt_body (kvmsg, "%d", randof (1000000));
        kvmsg_send     (kvmsg, publisher);
        kvmsg_store   (&kvmsg, kvmap);
    }
    printf (" Interrupted\n%d messages out\n", (int) sequence);
    zhash_destroy (&kvmap);
    zsock_destroy (&publisher);
    return 0;
}

此交叉连接您的两个表,然后将结果过滤到只能在地址中找到Couriers表中的区域的位置。正如我在免责声明中所说,这只是寻找完全匹配。

Results table

然后将其返回到地址表中,添加一个包含此公式的新列。这将在我们刚刚制作的表格中查找地址并返回Courier ID。

Results = SELECTCOLUMNS(
    FILTER(CROSSJOIN(Addresses, Couriers), SEARCH(Couriers[District], Addresses[Address], , -1) > 0),
    "Address", Addresses[Address],
    "CourierID", Couriers[Courier ID]
)

Results

我们需要分两步执行此操作的原因是因为LOOKUPVALUE函数无法使用表达式。