Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

July 7 - July 17 | Round 2 of the Power BI Dataviz World Championships. Don't miss your chance! Learn more

Reply
Matas_skYwolf
Frequent Visitor

Custom connector for api with navigation table

Hello,

I am trying to make a connection to api where you select columns which you want to see and it according to that creates api request and generates you a new table with your selected columns.

 

I am trying to do everything on TripPin NavTables example, but I don't understand how to make that so it selects columns to show on the table, and not that every selection shows you just different table

 

My code now is this (which I don't udenrstand why it doesn't work as I want):

 

section TripPin;

//
// Definition
//
// Data Source Kind description
TripPin = [
    Authentication = [
        Anonymous = []
    ],
    Label = "FB Navigator"
];

// Data Source UI publishing description
TripPin.Publish = [
    Beta = true,
    Category = "Other",
    ButtonText = {"FB Navigator", "FB Navigator"}
];

//
// Implementation
//
[DataSource.Kind = "TripPin"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, TripPinNavType);

[DataSource.Kind = "TripPin", Publish = "TripPin.Publish"]
shared TripPin.Contents = Value.ReplaceType(TripPinNavTable, TripPinNavType);

TripPinNavType = type function ( 
    accID as (
        type text meta [
            Documentation.FieldCaption = "Account ID",
            Documentation.FieldDescription = "įrašykite account id kuris randamas facebook developers puslapyje",
            Documentation.SampleValues = {"1234567890", "0987654321"}
        ]
    ),
    API_key as (
        type text meta [
            Documentation.FieldCaption = "API token",
            Documentation.FieldDescription = "koks yra jūsų sukurtos aplikacijos API raktas",
            Documentation.SampleValues = {"HFHVJ5457JHBJH567HGH", "5637HGFHJJKJKBJ788"}
        ]
    )
) as table meta [
    Documentation.Name = "Facebook API conection",
    Documentation.LongDescription = "Facebook API conection LONG"
];






TripPinImpl = (accID as text, API_key as text) =>
    let
        urll = "http://services.odata.org/v4/TripPinService/Airlines",
        source = Web.Contents(urll), json = Json.Document(source)
    in
        json;

TripPinNavTable = (accID as text, API_key as text) as table =>
    let
        source = #table(
            {"Name", "Data", "ItemKind", "ItemName", "IsLeaf"},
            {
                {"Airlines", GetAirlinesTable(accID, API_key), "Table", "Table", false},
                {"Airports", GetAirportsTable(accID, API_key), "Table", "Table", false}
            }
        ),
        navTable = Table.ToNavigationTable(source, {"Name"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
    in
        navTable;

GetAirlinesTable = (accID as text, API_key as text) as table =>
    let
        source = TripPin.Feed(accID, API_key),
        value = source[value],
        toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
    in
        expand;

GetAirportsTable = (accID as text, API_key as text) as table =>
    let
        source = TripPin.Feed(accID, API_key),
        value = source[value],
        toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
    in
        expand;

//
// Common functions
//
Table.ToNavigationTable = (
    table as table,
    keyColumns as list,
    nameColumn as text,
    dataColumn as text,
    itemKindColumn as text,
    itemNameColumn as text,
    isLeafColumn as text
) as table =>
    let
        tableType = Value.Type(table),
        newTableType = Type.AddTableKey(tableType, keyColumns, true) meta [
            NavigationTable.NameColumn = nameColumn,
            NavigationTable.DataColumn = dataColumn,
            NavigationTable.ItemKindColumn = itemKindColumn,
            Preview.DelayColumn = itemNameColumn,
            NavigationTable.IsLeafColumn = isLeafColumn
        ],
        navigationTable = Value.ReplaceType(table, newTableType)
    in
        navigationTable;

 

0 REPLIES 0

Helpful resources

Announcements
FabCon and SQLCon Barcelona 2026

FabCon & SQLCon – Barcelona 2026

Join us in Barcelona for FabCon and SQLCon, the Fabric, Power BI, SQL, and AI community event. Save €200 with code FABCMTY200.

60 days of Data Days Carousel

Data Days 2026

Join Fabric Data Days 2026: 60 days of free live/on-demand sessions, challenges, study groups, and certification opportunities.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

Top Solution Authors