【发布时间】:2017-06-15 23:58:11
【问题描述】:
我是 Qlik 的新手,我似乎无法解决我在工作中遇到的这个挑战。有什么想法吗?????????!???!?!?!?!?!
在可视化(在标准中心)中,我需要根据两个表中的数据和用户从过滤器窗格中的 DateAs 列表中选择的日期执行计算。
给定
给定以下两个表格。其中有更多数据,我只是显示主键 = 2 的数据。
表 A:
PrimaryKeyA |值A |日期A
2 | 300.00 | 2017 年 2 月 1 日
2 | 100.00 | 2017 年 2 月 28 日
2 | 123.45 | 2017 年 3 月 1 日
2 | 0.02 | 2017 年 3 月 15 日
2 | 0.03 | 2017 年 3 月 31 日
2 | 0.01 | 2017 年 5 月 1 日
2 | 67.89 | 2017 年 6 月 2 日
表 B:
PrimaryKeyB |价值B |日期B
2 | 9.87 | 2017 年 2 月 28 日
2 | 9.86 | 2017 年 3 月 31 日
2 | 9.85 | 2017 年 4 月 31 日
2 | 9.84 | 2017 年 5 月 31 日
基于过滤日期的计算
结果 = FirstValue + Sum(ValueA) - SecondValue
计算规则,其中 PrimaryKeyA = PrimaryKeyB
1.如果在“日期”过滤器中只选择了一个日期,则 SecondValue 为 DateB 为 on 的 ValueB 或最接近过滤日期之前的日期。
2.如果在 Date 过滤器中选择了多个日期,则 SecondValue 是 DateB 为 on 的 ValueB 或最接近最新过滤日期的日期。
3。如果在日期过滤器中仅选择了一个日期,则 FirstValue 为 ValueB,其 DateB 与 SecondValue 的 DateB 最接近。
4.如果在 Date 过滤器中选择了多个日期,则 FirstValue 是 ValueB,其 DateB 是最早过滤日期之前最接近的。
5。未找到匹配项时,将值(FirstValue 或 SecondValue)设置为零。
示例
1。用户选择日期过滤器:2017 年 6 月 2 日
SecondValue 是 9.84(匹配规则 1 的 5/31/2017)
FirstValue 是 9.85(匹配规则 3 的 4/31/2017)
结果 = 9.85 + 67.89 - 9.84 = 67.9
2。用户选择日期过滤器:5/1/2017
SecondValue 是 9.85(匹配规则 1 的 4/31/2017)
FirstValue 是 9.86(匹配规则 3 的 3/31/2017)
结果 = 9.86 + 0.01 - 9.85 = 0.02
3。用户选择日期过滤器:3/1/2017
SecondValue 为 9.87(与规则 1 匹配 2/28/2017)
FirstValue 为 0(与规则 5 不匹配)
结果 = 0 + 123.45 - 9.87 = 113.58
4。用户选择的日期过滤器为:2017 年 3 月 1 日至 2017 年 3 月 31 日
SecondValue 是 9.86(匹配规则 2 的 3/31/2017)
FirstValue 是 9.87(匹配规则 4 的 2/28/2017)
结果 = 9.87 + (123.45 + 0.02 + 0.03 ) - 9.86 = 123.51
5。用户选择的日期过滤器为:2017 年 3 月 1 日至 2017 年 6 月 2 日
SecondValue 是 9.84(匹配规则 2 的 5/31/2017)
FirstValue 是 9.87(匹配规则 4 的 2/28/2017)
结果 = 9.87 + (123.45 + 0.02 + 0.03 + 0.01 + 67.89) - 9.84 = 191.43
6。用户选择的日期过滤器为:2/1/2017 到 2/28/2017
SecondValue 为 9.87(与规则 2 匹配 2/28/2017)
FirstValue 为 0(与规则 5 不匹配)
结果 = 0 + (300.00 + 100.00) - 9.87 = 390.13
想法
1.我认为 Qlik Sense 没有用户定义的函数,所以这个想法已经过时了。
2。我在想一个可以执行以下伪代码的表达式,但我不知道如何实现。
Set MaxDateFilter = MAX(Filtered dates)
Set MinDateFilter = MIN(Filtered dates)
If MaxDateFilter = MinDateFilter
Then (One date selected)
Set SecondValue = Lookup first match in TableB where DateB =< MaxDateFilter (If no match found, set to 0)
Set FirstValue = Lookup first match in TableB where DateB < SecondValue's DateB (If no match found, set to 0)
Else (Date range selected)
Set SecondValue = Lookup first match in TableB where DateB =< MaxDateFilter (If no match found, set to 0)
Set FirstValue = Lookup first match in TableB where DateB < MinDateFilter(If no match found, set to 0)
Result is FirstValue + SUM(ValueA) - SecondValue
4。我在想无论如何不可能找出用户在过滤器中选择的内容,但我知道什么。
5。我看了这个(https://community.qlik.com/thread/16998),但我认为它只是 QlikView,而不是 Qlik Sense。
我尝试过/研究过的事情
由于我是 Qlik 的新手,我什至不知道从哪里开始。
这是我尝试过但无济于事的:
- 查看了 Lookup 函数 (http://help.qlik.com/en-US/sense/3.0/Subsystems/Hub/Content/Scripting/InterRecordFunctions/LookUp.htm)
- 查看了动态生成主日历 (https://community.qlik.com/docs/DOC-16939) 和 (https://community.qlik.com/thread/66717) 并链接两个日期 (https:// /community.qlik.com/docs/DOC-5834),但这很困难,因为我不知道用户选择了哪些过滤器。
- 查看了集合分析 (https://community.qlik.com/thread/14707),但不明白它如何适用于这种情况
更新:我做了更多的工作。给定我的表,当用户在 [交易日期] 上进行过滤时,我如何查找要在数据透视表的表达式中使用的值?请在http://clairenstreb.brinkster.net/temp/InventoryValues.png查看我的最新数据和图表
【问题讨论】:
标签: qliksense