我是Qlik的新手,似乎无法解决我在工作中面临的挑战。任何想法????????? ????????????????????????????????????
在可视化中(在标准集线器中),我需要根据用户从“过滤器”窗格中的DateAs列表中选择的两个表和日期中的数据执行计算。
GIVEN
给出下面两张表。其中有更多数据,我只是显示主键= 2的数据。
表A:
PrimaryKeyA | ValueA |日期A
2 | 300.00 | 2/1/2017
2 | 100.00 | 2/28/2017
2 | 123.45 | 3/1/2017
2 | 0.02 | 2017年3月15日2 | 0.03 | 3/31/2017
2 | 0.01 | 5/1/2017
2 | 67.89 | 2017年6月2日
表B:
PrimaryKeyB | ValueB | DateB
2 | 9.87 | 2/28/2017
2 | 9.86 | 3/31/2017
2 | 9.85 | 4/31/2017
2 | 9.84 | 2017年5月31日
基于过滤日期的计算
结果= FirstValue + Sum(ValueA) - SecondValue
计算规则,其中PrimaryKeyA = PrimaryKeyB
1。如果在日期过滤器中只选择了一个日期,则SecondValue为ValueB,其DateB为on或过滤日期之前最接近的日期。如果在日期过滤器中选择了多个日期,则SecondValue为ValueB,其DateB为on或最近过滤日期之前的最接近日期。
3。如果在日期过滤器中只选择了一个日期,则FirstValue为ValueB,其DateB在SecondValue的DateB之前最接近。如果在日期过滤器中选择了多个日期,则FirstValue为ValueB,其DateB在最早的过滤日期之前最接近。
5。如果未找到匹配项,请将值(FirstValue或SecondValue)设置为零。
的实施例
1。用户选择日期过滤器:6/2/2017
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。用户选择日期过滤器:3/1/2017到6/2/2017
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。用户选择日期过滤器:2017年2月2日至2月28日
SecondValue为9.87(与规则2相匹配2/28/2017)
FirstValue为0(与规则5不匹配)
结果= 0 +(300.00 + 100.00) - 9.87 = 390.13
的 IDEAS
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
&#13;
4。我认为无论如何都无法找出用户在过滤器中选择了什么,但我知道什么。
5。我看了这个(https://community.qlik.com/thread/16998),但我认为它只是QlikView,而不是Qlik Sense。
我已经尝试/研究的事情
由于我是Qlik的新手,我甚至不知道从哪里开始。
这是我试图无效的:
更新:我做了更多工作。鉴于我的表格,当用户在[交易日期]上过滤时,如何在我的数据透视表的表达式中查找要使用的值?请在 http://clairenstreb.brinkster.net/temp/InventoryValues.png查看我的最新数据和图表
答案 0 :(得分:1)
答案是使用firstsortedvalue chart function。例如:
firstsortedvalue ([Beginning Inventory Amount], -[Beginning Inventory Date])