首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

明明结果是对的,为什么被合并查询后得到的结果却出错了?| Power Query躲坑

最近,有位朋友在一个实际工作问题中,在表2使用合并查询从表1的结果中匹配最高(阶段)项,眼看着表1的结果是对的,但表2里却得到了错误的返回结果,具体情况如图所示: 为什么会这样?...我们先来看表1的处理情况。 为了合并查询得到最高阶段项,对表1进行降序排序: 然后通过删除重复项保留最高阶段数据: 从表1的结果来看,的确保留了最高阶段的数据。...然后,在表2里使用合并查询获取表1中的结果并展开: 咦!!! 表1的处理结果明明是阶段4(报价),为什么合并查询得到的结果却是阶段2(售前)? 这难道是Power Query的Bug吗?...这里的问题根源其实是表1的处理问题,我以往发布的多篇文章案例中,在涉及Power Query中使用排序的问题时会强调,Power Query的排序需要增加添加索引或Table.Buffer的步骤,使排序的结果真正...所以,回到这个问题,针对表1的排序步骤,我们可以嵌套Table.Buffer函数(图中中间行为原排序操作生成的代码,无所做任何改变): 这时,我们再看表2的结果: 完全正确!

3.1K20

LiveData beyond the ViewModel

多年来,反应式架构一直是Android的一个热门话题。它一直是Android会议上的一个永恒主题,通常都是用RxJava的例子来进行演示的(见底部的Rx部分)。...缺点是,LiveData并没有像Rx那样提供一个用于组合数据流或管理线程的工具包。 如果在一个典型的应用程序的每一层中使用LiveData,看起来就像这样。...每当资源库有新的数据时,ViewModel只需对其进行映射即可。...这个场景下,你可以让用户管理器直接调用令牌上传器(或任何对你的架构有意义的东西)。 img ❝如果你的应用程序的一部分不影响用户界面,你可能不需要LiveData。...然而,我们正在泄露所有以前的LiveDatas,这些LiveDatas不会再发送更新,所以这是一种浪费。 你可以存储一个对源的引用,然后在添加新的源之前将其删除。

1.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    5 张弹珠图彻底弄清 RxJS 的拉平策略:mergeMap、switchMap、concatMap、exhaustMap

    ( map(name => http(name)) ) namesObservable.subscribe(result => console.log(`${result}`)) // 则会得到两个...我们可以借助 flatMap 操作符,则能得到同样的解析值的效果~ flatMap 其实也就是我们熟知的 mergeMap 操作符; 代码如下: const { of } = Rx; const { mergeMap...,除了 mergeMap,RxJS 又引入了 switchMap、concatMap 和 exhaustMap,它们能够提供不同方向的拉平策略。...; switchMap const { of,interval} = Rx; const { switchMap,take,map } = RxOperators; const namesObservable...(name => http(name)) ) switchMap,在每次发出时,会取消前一个内部 observable 的订阅,然后订阅一个新的 observable; concatMap const

    73620

    构建流式应用:RxJS 详解

    所以,这里将结合自己对 RxJS 理解,通过 RxJS 的实现原理、基础实现及实例来一步步分析,提供 RxJS 较为全面的指引,感受下使用 RxJS 编码是怎样的体验。...结果后台返回了“爱迪生”的搜索结果,执行渲染逻辑后结果框展示了“爱迪生”的结果,而不是当前正在搜索的“达尔文”,这是不正确的。...下雨天时,雨滴随时间推移逐渐产生,下落时对水面产生了水波纹的影响,这跟 Rx 中的流是很类似的。而在 Web 中,雨滴可能就是一系列的鼠标点击、键盘点击产生的事件或数据集合等等。...Rx.Observable.prototype.switchMap switchMap 与 mergeMap 都是将分支流疏通到主干上,而不同的地方在于 switchMap 只会保留最后的流,而取消抛弃之前的流...Rx.Observable.prototype.switchMap() 使用 switchMap 替换 mergeMap,将能取消上一个已无用的请求,只保留最后的请求结果流,这样就确保处理展示的是最后的搜索的结果

    7.4K31

    给创业码农的话--如何提升开发效率

    编者的话:simsun在2013年从手Q转岗到微信,在此非常感谢他对微信做出的贡献。在我看来,sim是一个活生生的全栈工程师,从硬件、后台到iOS、Android样样精通。...原先试用过facebook的开源方案Bolts-Android,这个库是parse的开源方案。后来有iOS的同事推荐Reactive的方案,于是就走上了Rx脑残粉的不归路。...首先Rx会大大减少你的代码量,这一点对“懒惰”的我们十分重要。 下面举2个平时开发都会遇到的问题来举例: 1....搜索界面 我们需要在用户输入完毕后第一时间显示搜索结果,由于这个需要请求后台,我们又不想用户每次输入的时候都去后台请求。并且总需要显示当前最新输入内容的结果,不能因为网络的原因产生乱序的结果。...由于Android并不支持Java 8,所以我们需要Retrolambda,来支持lambda表达式。 2.

    2K70

    RxJS速成 (下)

    每个订阅者都会从BehaviorSubject那里得到它推送出来的初始值和最新的值. 用例: 共享app状态....switchMap switchMap把每个值都映射成Observable, 然后使用switch把这些内部的Observables合并成一个. switchMap有一部分很想mergeMap, 但也仅仅是一部分像而已...例子:  // 立即发出值, 然后每5秒发出值 const source = Rx.Observable.timer(0, 5000); // 当 source 发出值时切换到新的内部 observable...,发出新的内部 observable 所发出的值 const example = source.switchMap(() => Rx.Observable.interval(500)); // 输出:...: 网速比较慢的时候, 客户端发送了多次重复的请求, 如果前一次请求在2秒内没有返回的话, 那么就取消前一次请求, 不再需要前一次请求的结果了, 这里就应该使用debounceTime配合switchMap

    2.2K40

    使用 Architecture Component 实现 MVVM 的正确姿势

    答案肯定是否定的,但是 Android 给我提供了一套组件,可以让我们更方便地用 MVVM 模式来开发,减少我们重复造轮子的工作量 ViewModel ViewModel 是官方提供的,用于管理 UI...ViewModelProvider(this).get(MvvmViewModel::class.java) // 或者如果引入了 activity-ktx 或者 fragment-ktx 也可以这样用...因此在使用 LiveData 的时候也要特别注意这一点,否则可能引发一些意想不到的问题,具体可移步我的另一篇文章:LiveData 的正确使用姿势以及反模式 非粘性消息的实现 网络上和官方博客上都有提到...非粘性消息的探索和尝试 LiveData 变换和组合 有时候我们希望对 LiveData 做一些变换或者其他处理再提供给 View 层使用,可以使用 Transforms 一对一的静态转换 —— map...理想情况下 ViewModel 中不应该有 Android framework 相关的代码,这用对于可测性而言会更加友好(不需要 mock Android 相关的代码) 注意内存泄露问题 ViewModel

    78820

    RxJava(七) 使用 debounce 操作符优化 App 搜索功能

    如果后发出去的 AB 请求先返回, A 请求后返回,那么 A 请求后的结果将会覆盖 AB 请求的结果. 从而导致搜索结果不正确....新的请求又去请求 Search 接口.这个时候有可能最后的一个请求返回, 第一个请求最后返回,导致最终显示的结果是第一次搜索的结果....看看官网对 switchMap 操作符如何解释的: Returns a new Observable by applying a function that you supply to each item...另外,我为 Android 程序员编写了一份:超详细的 Android 程序员所需要的技术栈思维导图。...如果有需要可以移步我的 GitHub -> AndroidAll,里面包含了最全的目录和对应知识点链接,帮你扫除 Android 知识点盲区。

    1.3K30

    用 RxJS、RxWX 编写微信小程序

    Rx.js。对Rx.js进行了一些修改使其能在小程序中运行。 RxWX.js。基于Rx.js对微信的api进行了封装,调用同名API不再使用回调,而是返回Observalbe对象。...使用 小程序的API大多数都不是按照纯函数的思想设计的,把返回结果赋值给入参的success、fail、complete属性。...其中Rx.js是可运行在小程序中的Rx.js模块,RxWX.js是利用Rx.js对小程序API进行的封装,封装后API函数将返回Observable对象,属性值不变。...e) => console.error('RxWX发现错误')) .subscribe((resp) => console.log(resp) 在调用同步时RxWX没有太大优势,但在调用异步API的时候以流的方式来处理结果和异常...这种统一的操作方式可以让开发者更好的关注业务逻辑,而不需要去分辨API到底是异步还是同步,执行结果到底是在回调中获取还是返回值获取。 这种处理方式是不是让你想起点什么?

    2.6K80

    如何学习RxJava3?有这个项目就够了!

    前言 最近跳槽到了一家新的公司, 居然发现这家公司的项目大量使用了RxJava3相关的技术, 这让我这个Rx系列轻度使用者有些无所适从. 俗话说, 千学不如一看, 千看不如一练....就这样, 我看着文档一遍遍地敲着代码学习, 掌握的速度非常的迅速. 有对RxJava3感兴趣的不妨把项目下下来, 本地跑一跑试一试, 效果绝对出乎你想象!...可以看成是Rx的Runnable。 Maybe 能够发射0或者1个数据,要么成功,要么失败。类似Single和Completable的结合。...Android的主线程,即UI线程 Plugins 插件,又可称Hook, 可以修改Rxjava的默认行为。...我是xuexiangjys,一枚热爱学习,爱好编程,致力于Android架构研究以及开源项目经验分享的技术up主。

    78120

    RxJS速成

    Observable: 一系列值的生产者 Observer: 它是observable值的消费者 Subscriber: 连接observer和observable Operator: 可以在数据流的途中对值进行转换的操作符..., 它的结果肯定是一样的. pure function不与外界打交道, 不保存到数据库, 不会存储文件, 不依赖于时间.......每个订阅者都会从BehaviorSubject那里得到它推送出来的初始值和最新的值. 用例: 共享app状态....发出值时切换到新的内部 observable,发出新的内部 observable 所发出的值 const example = source.switchMap(() => Rx.Observable.interval...: 网速比较慢的时候, 客户端发送了多次重复的请求, 如果前一次请求在2秒内没有返回的话, 那么就取消前一次请求, 不再需要前一次请求的结果了, 这里就应该使用debounceTime配合switchMap

    4.2K180

    【译】LiveData三连

    例如,如果该Activity是在后台,它将不会得到数据变化的通知,直到它再次对用户可见。这就意味着不会再有因Activity停止而导致的崩溃了。...此外,LiveData还得到了新的SQLite持久化库Room的支持,该库是作为Android架构组件的一部分推出的。...即使LiveData提供了Transformations这样的工具,它也只有map和switchMap可以帮助你开箱即用。...因此,处理这种需求的最好方法是不使用LiveData作为生产者,而是使用RX类型或Kotlin,因为Kotlin支持多种高阶函数以及对Collections和Sequence的扩展。...你可以使用RX或Kotlin的coroutines对操作者和线程控制进行更有力的控制。LiveData并不能对你的线程管理提供完全的控制权。

    1.7K20

    Js 异步处理演进,Callback=u003EPromise=u003EObserver

    ) ).subscribe(); 详细过程: Observable.from 将一个 Promises 数组转换为 Observable,它是基于 callApiFooA 和 callApiFooB 的结果数组...; map — 从 API 函数 A 和 B 的 Respond 中提取 ID; switchMap — 使用前一个结果的 id 调用 callApiFooC,并返回一个新的 Observable...,新 Observable 是 callApiFooC( resIds ) 的返回结果; switchMap — 使用函数 callApiFooC 的结果调用 callApiFooD; tap...— 获取先前执行的结果,并将其打印在控制台中; subscribe — 开始监听 observable; Observable是多数据值的生产者,它在处理异步数据流方面更加强大和灵活,它在 Angular...后续会带来 Rx.js Observer 实战~~ 之前的文章就提过,惰性求值似乎能连接 js 最重要的闭包和异步两个要点,现在看来更是如此,敬请期待~~ 看到这里,不如点个赞吧~ 我是掘金安东尼,公众号同名

    2K10

    翻译翻译什么 tmd 叫“可读”?RxJS实现“搜索”功能

    render(data); } }); },300) }) 对吧...'; var text = document.querySelector('#text'); var inputStream = Rx.Observable.fromEvent(text, 'keyup...,则是提取点击的 event.target.value switchMap switchMap 要重点理解下; 官方解释是:映射成 observable,完成前一个内部 observable,发出值。...即永远订阅最新的Observable; 那么:switchMap = map + switch ,示意如下: 结合理解,在本篇搜索示例中,即用 Http.get(url) 所得 data 值作为事件流的最新值...,进行后续的传递; 至此,我们可以得出:RxJS 让代码变得十分简洁、可读,前提是,我们熟悉事件流这个东西,熟悉它的 API~~ ---- OK,以上便是本篇分享,希望对你能有所帮助~觉得不错,给个三连吧

    56810

    Android Jetpack系列 之LiveData

    ,最后我们在注册回到的onChanged方法中去给Textview赋值就可以了,我们运行程序结果如下: ?...postValue,再次运行结果如下所示: ?...,这就是map转换函数的用法 switchMap 我们上面的例子数据的获取是直接写在Activity中获取的,在真实的项目开发中,这里的数据一般都是从网络请求中或者缓存中获取的,我们来新建HttpUtil...在实际项目开发中我们使用switchMap的频率还是很高的,毕竟 只要LiveData对象是调用其他方法获取的 ,我们就可以这样做, 在点击事件中我们设置了可观察数据:分数,当分数改变的时候,就会执行switchMap...函数 ,switchMap会将获取的数据转换为可观察的LiveData,所以我们监听这个LiveData对象 就可以观察到数据的变化了。

    1.1K20

    你就是函数响应式编程(FRP)啊?!【附 RxJS 实战】

    对于函数式编程,我们并不陌生,在 我的 JS 专栏 里面可以找到很多相关文章~~ 这里不妨先对函数式编程特性做简要回顾: 函数是一等公民(意味着可以把函数赋值给变量或存储在数据结构中,也可以把函数作为其它函数的参数或者返回值...OK,说到这里,对函数式编程有了一个大体的回顾,下面就介绍今天的主角 —— 函数响应式编程 正文 从名字上来看,就是多了 响应 二字,什么是“响应”? 各位一定不陌生!...,这种变化将传导到 a; 函数响应式编程(FRP)所做的就是:遍历整个事情流集合,将导致 b 和 c 变化的事情回放,并获得 a 的结果; 【事件流】被称为【被观察者序列】(observable sequences...拖拽实战 再演示一个实战栗子: 实现一个简单的拖拽功能; 拖拽功能,可理解为:对 mousedown, mousemove, mouseup 等多个事件进行观察,并相应地改变小方块的位置。...ev.clientX - this.offsetLeft; var relaY = ev.clientY - this.offsetTop; // 获取当前鼠标位置,减去与div的相对位置得到当前

    87910

    竞态问题与RxJs

    竞态问题与RxJs 竞态问题通常指的是在多线程的编程中,输入了相同的条件,但是会输出不确定的结果的情况。...竞态问题 前边提到了竞态问题通常指的是在多线程的编程中,输入了相同的条件,但是会输出不确定的结果的情况。...,如果网络完全没有波动的情况下,我们就可以正常按照顺序得到B、C的弹窗,但是如果网络波动了呢,假设由于返回B的数据包正常在路上阻塞了,而C先返回来了,那么最后得到的执行顺序可能就是C、B的弹窗了。...在这里只是一个顺序问题,如果我们做搜索的时候,更加希望的是展示输入的最后的值的搜索结果,那么按照上边的例,我们希望得到最后输入的那个字母的下一个字母,也就是顺序输入AB希望得到C,但是却也有可能得到B。...来绑定事件,在这里演示我们是需要自己触发的事件了,也就是runner.next,这里最重要的一点就是借助了switchMap,他帮助我们管理了在流上的顺序,取消了上次回调的执行。

    1.2K30
    领券