【问题标题】:How to sort table visualization by column in alphabetical + numerical order?如何按字母+数字顺序按列对表格可视化进行排序?
【发布时间】:2021-02-27 14:06:14
【问题描述】:

我已将数据加载到 Power BI(通过“获取数据”),它看起来像这样:

注意 Subworkload 列在此处按字母和数字顺序正确排序为“R、W2、W3、....W11”。

我只想通过 Power BI 报表页面中的表格可视化显示此表格来做简单的事情,但 PBI 以错误的方式对列进行了排序。见下文:

如何以正确排序的方式将其放回原处?

如果不可能,我可以编写用于可视化的 python 代码以将表格按原样放在报告上吗?我只想做简单的事情来呈现报表上的表格,但是 PBI 让它变得如此困难。

【问题讨论】:

    标签: python powerbi


    【解决方案1】:

    Powerbi 也是 microsoft product 所以我认为对于类似于 Explorer 的排序,它也使用 API StrCmpLogicalW() 进行这种排序(称为'natural sort order') . 一个很好的解释可以找到here。

    import numpy as np
    import pandas as pd
    import re
    
    
    df = pd.DataFrame({
        'Subworkload': ['R', 'W10', 'W11', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7', 'W8', 'W9'],
        'Iteration': np.zeros(11),
        'Parameters': ['Buffer_size=Default_Num_Threads=1' for i in range(11)] 
    })
    
    def sort_nicely( l ):
        """ Sort the given list in the way that humans expect."""
        convert = lambda text: int(text) if text.isdigit() else text
        alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
        l.sort( key=alphanum_key )
    
        return l
    
    val = sort_nicely(list(df['Subworkload']))
    print(val)
    

    :输出:

    'R', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7', 'W8', 'W9', 'W10', 'W11']
    

    但根据StrCmpLogicalW 输出应该是:

    'R', 'W10', 'W11', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7', 'W8', 'W9']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多