Developing the Sector Allocation Chart

      Developing the Sector Allocation Chart


        Article summary

        In this example we look at how to create the Sector Allocation chart. We will be using the DEMO_HoldingsDetails Block for this purpose (refer the Transformation Block sample at the end). Below guideline shows how to create the Data Object and fabricate the Asset Allocation Pie Chart.

        • Give an appropriate name for the Data Object

        • Set your Source Data Block

        • Apply Data Settings one by one

        • Set the Column names one by one as needed and we only need below 3 Columns

        • Set the Grouping as shown below

        • Set the Summary as shown below

        Fabricating the table (2 Columns by 3 Rows table structure) 

        Fabricating the Sector Allocation Pie Chart

        Insert a native PowerPoint Pie Chart and fabricate as shown below

        Sample Python Transformation Block (DEMO_HoldingsDetails)  

        object_blueprint= {"PORTFOLIOCODE":"",
        
                        "CURRENCYCODE":"",
        
                        "CURRENCY":"",
        
                        "ISSUERNAME":"",
        
                        "ISSUENAME":"",
        
                        "ISSUEDISPLAYNAME":"",
        
                        "COSTBASIS":"",
        
                        "QUANTITY":"",
        
                        "MARKETVALUEWITHOUTACCRUEDINCOME":"",
        
                        "ACCRUEDINCOME":"",
        
                        "MARKETVALUE":"",
        
                        "LOCALMARKETVALUE":"",
        
                        "UNREALIZEDGAINSLOSSES":"",
        
                        "DIVIDENDYIELD":"",
        
                        "ESTIMATEDANNUALINCOME":"",
        
                        "HOLDINGSPERIOD":"",
        
                        "PORTFOLIOWEIGHT":"",
        
                        "PRICE":"",
        
                        "BOOKVALUE":"",
        
                        "LOCALBOOKVALUE":"",
        
                        "ASSETCLASSNAME":"",
        
                        "ISSUETYPE":"",
        
                        "ISINCODE":"",
        
                        "CUSIP":"",
        
                        "FIGIID":"",
        
                        "TICKER":"",
        
                        "RISKCOUNTRYCODE":"",
        
                        "RISKCOUNTRY":"",
        
                        "HQCOUNTRYCODE":"",
        
                        "HQCOUNTRY":"",
        
                        "ISSUECOUNTRYCODE":"",
        
                        "ISSUECOUNTRY":"",
        
                        "REGIONCLASSIFICATIONSCHEME":"",
        
                        "REGIONNAME":"",
        
                        "PRIMARYSECTORSCHEME":"",
        
                        "PRIMARYSECTORNAME":"",
        
                        "PRIMARYSUBSECTORNAME":"",
        
                        "PRIMARYINDUSTRYGROUPNAME":"",
        
                        "PRIMARYINDUSTRYNAME":"",
        
                        "PRIMARYSUBINDUSTRYNAME":"",
        
                        "SECONDARYSECTORSCHEME":"",
        
                        "SECONDARYSECTORNAME":"",
        
                        "SECONDARYSUBSECTORNAME":"",
        
                        "SECONDARYINDUSTRYGROUPNAME":"",
        
                        "SECONDARYINDUSTRYNAME":"",
        
                        "SECONDARYSUBINDUSTRYNAME":"",
        
                        "CUSTOMCLASSIFICATION1":"",
        
                        "CUSTOMCLASSIFICATION1NAME":"",
        
                        "PERCENTAGE":"",
        
                        "UNITCOST":""
        
                        }
        
        AccountCode = ""
        
        AsofDate = ""
        
        CurrencyCode=""
        
        SectorScheme=""
        
        WithCash=""
        
        ShowCash=""
        
        if (params.__len__() > 0):
        
            AccountCode = params["AccountCode"]
        
            AsofDate = params["AsofDate"]
        
            CurrencyCode=params["CurrencyCode"]
        
            SectorScheme=params["SectorScheme"]
        
            WithCash=params["WithCash"]
        
            ShowCash=params["ShowCash"]
        
        
        basedata_df = pd.DataFrame(read("DEMO_SnowFlakeHoldingsDetailsExtract",{"AccountCode": AccountCode, "AsofDate": AsofDate, "CurrencyCode":CurrencyCode, "SectorScheme":SectorScheme})["data"])
        
        currencycode=read("DEMO_SnowflakeGetPortfolioBaseCurrency",{"AccountCode": AccountCode})["data"]
        
        baseCurrencyCode=currencycode[0]["BASECURRENCYCODE"]
        
        baseCurrencyName=currencycode[0]["BASECURRENCYNAME"]
        
        # Include or Exclude Cash
        
        # data_df= pd.DataFrame()
        
        
        if WithCash== "yes":
        
            data_df=basedata_df
        
        else:
        
            data_df = basedata_df.loc[basedata_df['ASSETCLASSNAME'] != 'Cash and Equiv.'].reset_index()   
        
        # Convert String Market Value into Float
        
        data_df["MARKETVALUE"] = data_df["MARKETVALUE"].astype(float)
        
        data_df["COSTBASIS"] = data_df["COSTBASIS"].astype(float)
        
        data_df["QUANTITY"] = data_df["QUANTITY"].astype(float)
        
        
        # calculate total marketvalue
        
        # totalMV=0.00
        
        total_mv = data_df["MARKETVALUE"].sum()
        
        data_df['TotalMV']=total_mv
        
        data_df['PERCENTAGE'] = data_df.apply(lambda row: row["MARKETVALUE"]/row["TotalMV"], axis=1)
        
        data_df['UNITCOST'] = data_df.apply(lambda row: row["COSTBASIS"]/row["QUANTITY"], axis=1)
        
         
        if WithCash == "yes" and ShowCash != "yes":
        
            data_df = data_df.loc[data_df['ASSETCLASSNAME'] != 'Cash and Equiv.']
        
        
        del_column_list = []
        
        for col_name in data_df.columns:
        
            if col_name not in object_blueprint.keys():
        
                del_column_list.append(col_name)
        
        data_df = data_df.drop(del_column_list, axis=1)
        
        output_list = data_df.to_dict(orient='records')
        
        # Add output paramets
        outputValue = dict()
        
        outputValue["BaseCurrencyCode"] =  baseCurrencyCode
        
        outputValue["BaseCurrencyName"] = baseCurrencyName
        
        
        response["data"] = output_list
        
        response["values"]= outputValue