【问题标题】:Using Tableau to do VLookup使用 Tableau 做 VLookup
【发布时间】:2022-02-16 09:01:55
【问题描述】:

Tableau 的新手非常抱歉,如果这很明显,但我进行了搜索,但找不到/理解任何内容。所以我有一家蛋糕店,我想知道人们是否在同一个订单中同时购买了 éclairs 和 Eccles 蛋糕

订单 ID 项目
0001 泡芙
0001 冰包
0001 埃克尔斯蛋糕
0002 泡芙
0002 冰包
0003 泡芙
0003 埃克尔斯蛋糕

我想要的输出如下:

订购 ID 项 éclair? 0001 泡芙 0 0001 冰包 0 0001 埃克尔斯蛋糕 1 0002 泡芙 0 0002 冰包 0 0003 泡芙 0 0003 埃克尔斯蛋糕 1

我认为它需要诸如查找或帮助列之类的东西?!

作为参考,我有一个数据集(一个 csv 文件),所以我猜我无法对其运行 SQL 查询?

【问题讨论】:

    标签: lookup tableau-api formulas


    【解决方案1】:

    这就是我能够做到这一点的方法 - 可能有一种我不熟悉的更好方法。不过……


    步骤:

    1. 在工作表中,将Order IdItem 添加到Rows 部分。

    2. 复制您的数据源(右键单击 > 复制)。我将原件称为A,将副本称为B

    3. 取消链接Item 字段。这是通过单击字段名称右侧的橙色链链接图标来完成的。灰色链接是您想要的。将Order Id 字段保持链接状态(橙色)。

    4. 留在同一张表上,点击数据源B 并创建这两个计算字段: Cake_Flag:MAX(IF [Item] = 'Eccles cake' THEN 1 ELSE 0 END)

      Eclair_Flag:MAX(IF [Item] = 'éclair' THEN 1 ELSE 0 END)

    5. 通过选择返回到数据源A 并创建这个新的计算字段: 泡芙?:IF ATTR([Item]) = 'Eccles cake' AND [Data Source B].[Eclair Flag] = 1 AND [Data Source B].[Cake Flag] = 1 THEN 1 ELSE 0 END

      [Data Source B] 应替换为 B 数据源的名称。

    6. 将新的计算字段éclair? 放在文本卡中。


    结果:

    【讨论】:

    • 我不建议为此使用数据混合。这不是必需的,您现在使用两个数据库查询而不是一个,并花时间在客户端合并查询结果。增加了复杂性和性能成本。对于小型数据集不是问题,但对于较大的数据集。
    • 为此使用数据混合没有任何问题。它提供了适当的解决方案。你还没有提出一个可行的替代解决方案,所以我不确定你能说什么。
    • 在小数据集上进行数据混合并没有错。它真的可以用大的来咬你(特别是如果你的链接字段是细粒度的)
    【解决方案2】:

    请参阅Set difference: find distinct members for two groups in Tableau Desktop 了解几种可能的方法之一。关键是编写一个聚合计算字段,计算一个订单 id 是否包含两个感兴趣的项目。

    您可以在集合中或直接在订单 ID 为维度的视图中使用该计算。

    一个例子是:

    count(if item = "eclair" then 1 end) > 0 and count(if item = "Eccles cake" then 1 end) > 0
    

    对于包含至少一个 eclair 项目和至少一个 Eccles 蛋糕项目的订单,此(聚合)计算返回 true,对于其他订单返回 false。

    为此,您需要订单 ID 作为视图中的维度,而不是商品,以便计算一次应用于订单中的所有商品。这回答了您提出的问题,但每个订单显示一行,而不是每个订单/项目一行。

    如果你真的需要你指定的精确输出形式,那么你把这个计算变成一个LOD计算,比如:

    { FIXED [ORDER ID] : count(if item = "eclair" then 1 end) > 0 and count(if item = "Eccles cake" > 0 then 1 end) }
    

    然后,您会在每个订单 ID/项目旁边显示一列,以指示该订单是否同时包含泡芙和蛋糕。 (这也不完全是您显示的所需输出)或使用此新字段与当前项目一起定义最终计算,当且仅当项目是蛋糕并且订单包含两者时为 1。

    这评估为真和假。如果需要,我认为您可以转换为 1 和 0。

    【讨论】:

    • 考虑到 OP 所需的输出,这将不起作用。 Tableau 只会评估当前记录/分区,而不是窗格。
    • 它会回答他提出的问题“想知道人们是否在同一个订单中购买了这两种产品”——但这个计算假设订单 ID 是工作表上最细粒度的尺寸——所以你的正确的输出不完全符合他的要求。如果这对问题很重要,他可以将上述计算包装为 LOD 计算。我会相应地编辑答案。
    • LOB calc 是一种有趣的方法;但是,您是否也对此进行了测试?首先,计算中有一个小错误。其次,它不会返回 OP 正在寻找的输出,因为它会为同一 Order ID 中的每条记录返回 TRUE 或 FALSE
    • 感谢您指出第二次计算中的剪切和粘贴错误。我解决了。当然,问题在于区分满足条件的订单,而不是打印 1 还是 true。
    • 这不是关于 1 与 TRUE - 您的解决方案为同一 Order ID 中的每条记录产生相同的结果(无论是 1、0、TRUE、FALSE),这不是所要求的。我将您的解决方案作为测试运行 - 这就是我所知道的。您是否正在测试您提出的解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2018-03-17
    • 1970-01-01
    相关资源
    最近更新 更多